icount: rename functions to be consistent with the module name
Signed-off-by: Claudio Fontana <cfontana@suse.de> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>stable-6.0
parent
740b175973
commit
8191d36841
|
@ -71,7 +71,7 @@ static void align_clocks(SyncClocks *sc, CPUState *cpu)
|
||||||
}
|
}
|
||||||
|
|
||||||
cpu_icount = cpu->icount_extra + cpu_neg(cpu)->icount_decr.u16.low;
|
cpu_icount = cpu->icount_extra + cpu_neg(cpu)->icount_decr.u16.low;
|
||||||
sc->diff_clk += cpu_icount_to_ns(sc->last_cpu_icount - cpu_icount);
|
sc->diff_clk += icount_to_ns(sc->last_cpu_icount - cpu_icount);
|
||||||
sc->last_cpu_icount = cpu_icount;
|
sc->last_cpu_icount = cpu_icount;
|
||||||
|
|
||||||
if (sc->diff_clk > VM_CLOCK_ADVANCE) {
|
if (sc->diff_clk > VM_CLOCK_ADVANCE) {
|
||||||
|
@ -665,7 +665,7 @@ static inline void cpu_loop_exec_tb(CPUState *cpu, TranslationBlock *tb,
|
||||||
assert(icount_enabled());
|
assert(icount_enabled());
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
/* Ensure global icount has gone forward */
|
/* Ensure global icount has gone forward */
|
||||||
cpu_update_icount(cpu);
|
icount_update(cpu);
|
||||||
/* Refill decrementer and continue execution. */
|
/* Refill decrementer and continue execution. */
|
||||||
insns_left = MIN(0xffff, cpu->icount_budget);
|
insns_left = MIN(0xffff, cpu->icount_budget);
|
||||||
cpu_neg(cpu)->icount_decr.u16.low = insns_left;
|
cpu_neg(cpu)->icount_decr.u16.low = insns_left;
|
||||||
|
@ -775,7 +775,7 @@ void dump_drift_info(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
qemu_printf("Host - Guest clock %"PRIi64" ms\n",
|
qemu_printf("Host - Guest clock %"PRIi64" ms\n",
|
||||||
(cpu_get_clock() - cpu_get_icount()) / SCALE_MS);
|
(cpu_get_clock() - icount_get()) / SCALE_MS);
|
||||||
if (icount_align_option) {
|
if (icount_align_option) {
|
||||||
qemu_printf("Max guest delay %"PRIi64" ms\n",
|
qemu_printf("Max guest delay %"PRIi64" ms\n",
|
||||||
-max_delay / SCALE_MS);
|
-max_delay / SCALE_MS);
|
||||||
|
|
|
@ -184,11 +184,11 @@ is then incremented (which is called "warping" the virtual clock) as
|
||||||
soon as the timer fires or the CPUs need to go out of the idle state.
|
soon as the timer fires or the CPUs need to go out of the idle state.
|
||||||
Two functions are used for this purpose; because these actions change
|
Two functions are used for this purpose; because these actions change
|
||||||
virtual machine state and must be deterministic, each of them creates a
|
virtual machine state and must be deterministic, each of them creates a
|
||||||
checkpoint. qemu_start_warp_timer checks if the CPUs are idle and if so
|
checkpoint. icount_start_warp_timer checks if the CPUs are idle and if so
|
||||||
starts accounting real time to virtual clock. qemu_account_warp_timer
|
starts accounting real time to virtual clock. icount_account_warp_timer
|
||||||
is called when the CPUs get an interrupt or when the warp timer fires,
|
is called when the CPUs get an interrupt or when the warp timer fires,
|
||||||
and it warps the virtual clock by the amount of real time that has passed
|
and it warps the virtual clock by the amount of real time that has passed
|
||||||
since qemu_start_warp_timer.
|
since icount_start_warp_timer.
|
||||||
|
|
||||||
Bottom halves
|
Bottom halves
|
||||||
-------------
|
-------------
|
||||||
|
|
|
@ -35,30 +35,30 @@ extern int use_icount;
|
||||||
* Update the icount with the executed instructions. Called by
|
* Update the icount with the executed instructions. Called by
|
||||||
* cpus-tcg vCPU thread so the main-loop can see time has moved forward.
|
* cpus-tcg vCPU thread so the main-loop can see time has moved forward.
|
||||||
*/
|
*/
|
||||||
void cpu_update_icount(CPUState *cpu);
|
void icount_update(CPUState *cpu);
|
||||||
|
|
||||||
/* get raw icount value */
|
/* get raw icount value */
|
||||||
int64_t cpu_get_icount_raw(void);
|
int64_t icount_get_raw(void);
|
||||||
|
|
||||||
/* return the virtual CPU time in ns, based on the instruction counter. */
|
/* return the virtual CPU time in ns, based on the instruction counter. */
|
||||||
int64_t cpu_get_icount(void);
|
int64_t icount_get(void);
|
||||||
/*
|
/*
|
||||||
* convert an instruction counter value to ns, based on the icount shift.
|
* convert an instruction counter value to ns, based on the icount shift.
|
||||||
* This shift is set as a fixed value with the icount "shift" option
|
* This shift is set as a fixed value with the icount "shift" option
|
||||||
* (precise mode), or it is constantly approximated and corrected at
|
* (precise mode), or it is constantly approximated and corrected at
|
||||||
* runtime in adaptive mode.
|
* runtime in adaptive mode.
|
||||||
*/
|
*/
|
||||||
int64_t cpu_icount_to_ns(int64_t icount);
|
int64_t icount_to_ns(int64_t icount);
|
||||||
|
|
||||||
/* configure the icount options, including "shift" */
|
/* configure the icount options, including "shift" */
|
||||||
void configure_icount(QemuOpts *opts, Error **errp);
|
void icount_configure(QemuOpts *opts, Error **errp);
|
||||||
|
|
||||||
/* used by tcg vcpu thread to calc icount budget */
|
/* used by tcg vcpu thread to calc icount budget */
|
||||||
int64_t qemu_icount_round(int64_t count);
|
int64_t icount_round(int64_t count);
|
||||||
|
|
||||||
/* if the CPUs are idle, start accounting real time to virtual clock. */
|
/* if the CPUs are idle, start accounting real time to virtual clock. */
|
||||||
void qemu_start_warp_timer(void);
|
void icount_start_warp_timer(void);
|
||||||
void qemu_account_warp_timer(void);
|
void icount_account_warp_timer(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CPU Ticks and Clock
|
* CPU Ticks and Clock
|
||||||
|
|
|
@ -109,12 +109,12 @@ int64_t replay_read_clock(ReplayClockKind kind);
|
||||||
#define REPLAY_CLOCK(clock, value) \
|
#define REPLAY_CLOCK(clock, value) \
|
||||||
(replay_mode == REPLAY_MODE_PLAY ? replay_read_clock((clock)) \
|
(replay_mode == REPLAY_MODE_PLAY ? replay_read_clock((clock)) \
|
||||||
: replay_mode == REPLAY_MODE_RECORD \
|
: replay_mode == REPLAY_MODE_RECORD \
|
||||||
? replay_save_clock((clock), (value), cpu_get_icount_raw()) \
|
? replay_save_clock((clock), (value), icount_get_raw()) \
|
||||||
: (value))
|
: (value))
|
||||||
#define REPLAY_CLOCK_LOCKED(clock, value) \
|
#define REPLAY_CLOCK_LOCKED(clock, value) \
|
||||||
(replay_mode == REPLAY_MODE_PLAY ? replay_read_clock((clock)) \
|
(replay_mode == REPLAY_MODE_PLAY ? replay_read_clock((clock)) \
|
||||||
: replay_mode == REPLAY_MODE_RECORD \
|
: replay_mode == REPLAY_MODE_RECORD \
|
||||||
? replay_save_clock((clock), (value), cpu_get_icount_raw_locked()) \
|
? replay_save_clock((clock), (value), icount_get_raw_locked()) \
|
||||||
: (value))
|
: (value))
|
||||||
|
|
||||||
/* Processing data from random generators */
|
/* Processing data from random generators */
|
||||||
|
|
|
@ -64,7 +64,7 @@ bool replay_next_event_is(int event)
|
||||||
|
|
||||||
uint64_t replay_get_current_icount(void)
|
uint64_t replay_get_current_icount(void)
|
||||||
{
|
{
|
||||||
return cpu_get_icount_raw();
|
return icount_get_raw();
|
||||||
}
|
}
|
||||||
|
|
||||||
int replay_get_instructions(void)
|
int replay_get_instructions(void)
|
||||||
|
|
|
@ -70,7 +70,7 @@ int64_t cpu_get_ticks(void)
|
||||||
int64_t ticks;
|
int64_t ticks;
|
||||||
|
|
||||||
if (icount_enabled()) {
|
if (icount_enabled()) {
|
||||||
return cpu_get_icount();
|
return icount_get();
|
||||||
}
|
}
|
||||||
|
|
||||||
qemu_spin_lock(&timers_state.vm_clock_lock);
|
qemu_spin_lock(&timers_state.vm_clock_lock);
|
||||||
|
@ -160,7 +160,7 @@ static bool adjust_timers_state_needed(void *opaque)
|
||||||
return s->icount_rt_timer != NULL;
|
return s->icount_rt_timer != NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool shift_state_needed(void *opaque)
|
static bool icount_shift_state_needed(void *opaque)
|
||||||
{
|
{
|
||||||
return icount_enabled() == 2;
|
return icount_enabled() == 2;
|
||||||
}
|
}
|
||||||
|
@ -196,7 +196,7 @@ static const VMStateDescription icount_vmstate_shift = {
|
||||||
.name = "timer/icount/shift",
|
.name = "timer/icount/shift",
|
||||||
.version_id = 1,
|
.version_id = 1,
|
||||||
.minimum_version_id = 1,
|
.minimum_version_id = 1,
|
||||||
.needed = shift_state_needed,
|
.needed = icount_shift_state_needed,
|
||||||
.fields = (VMStateField[]) {
|
.fields = (VMStateField[]) {
|
||||||
VMSTATE_INT16(icount_time_shift, TimersState),
|
VMSTATE_INT16(icount_time_shift, TimersState),
|
||||||
VMSTATE_END_OF_LIST()
|
VMSTATE_END_OF_LIST()
|
||||||
|
|
|
@ -560,7 +560,7 @@ static int64_t tcg_get_icount_limit(void)
|
||||||
deadline = INT32_MAX;
|
deadline = INT32_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
return qemu_icount_round(deadline);
|
return icount_round(deadline);
|
||||||
} else {
|
} else {
|
||||||
return replay_get_instructions();
|
return replay_get_instructions();
|
||||||
}
|
}
|
||||||
|
@ -615,7 +615,7 @@ static void process_icount_data(CPUState *cpu)
|
||||||
{
|
{
|
||||||
if (icount_enabled()) {
|
if (icount_enabled()) {
|
||||||
/* Account for executed instructions */
|
/* Account for executed instructions */
|
||||||
cpu_update_icount(cpu);
|
icount_update(cpu);
|
||||||
|
|
||||||
/* Reset the counters */
|
/* Reset the counters */
|
||||||
cpu_neg(cpu)->icount_decr.u16.low = 0;
|
cpu_neg(cpu)->icount_decr.u16.low = 0;
|
||||||
|
@ -716,7 +716,7 @@ static void *qemu_tcg_rr_cpu_thread_fn(void *arg)
|
||||||
replay_mutex_lock();
|
replay_mutex_lock();
|
||||||
qemu_mutex_lock_iothread();
|
qemu_mutex_lock_iothread();
|
||||||
/* Account partial waits to QEMU_CLOCK_VIRTUAL. */
|
/* Account partial waits to QEMU_CLOCK_VIRTUAL. */
|
||||||
qemu_account_warp_timer();
|
icount_account_warp_timer();
|
||||||
|
|
||||||
/* Run the timers here. This is much more efficient than
|
/* Run the timers here. This is much more efficient than
|
||||||
* waking up the I/O thread and waiting for completion.
|
* waking up the I/O thread and waiting for completion.
|
||||||
|
|
|
@ -73,7 +73,7 @@ static void icount_enable_adaptive(void)
|
||||||
* originally budgeted minus the current state of the decrementing
|
* originally budgeted minus the current state of the decrementing
|
||||||
* icount counters in extra/u16.low.
|
* icount counters in extra/u16.low.
|
||||||
*/
|
*/
|
||||||
static int64_t cpu_get_icount_executed(CPUState *cpu)
|
static int64_t icount_get_executed(CPUState *cpu)
|
||||||
{
|
{
|
||||||
return (cpu->icount_budget -
|
return (cpu->icount_budget -
|
||||||
(cpu_neg(cpu)->icount_decr.u16.low + cpu->icount_extra));
|
(cpu_neg(cpu)->icount_decr.u16.low + cpu->icount_extra));
|
||||||
|
@ -84,9 +84,9 @@ static int64_t cpu_get_icount_executed(CPUState *cpu)
|
||||||
* account executed instructions. This is done by the TCG vCPU
|
* account executed instructions. This is done by the TCG vCPU
|
||||||
* thread so the main-loop can see time has moved forward.
|
* thread so the main-loop can see time has moved forward.
|
||||||
*/
|
*/
|
||||||
static void cpu_update_icount_locked(CPUState *cpu)
|
static void icount_update_locked(CPUState *cpu)
|
||||||
{
|
{
|
||||||
int64_t executed = cpu_get_icount_executed(cpu);
|
int64_t executed = icount_get_executed(cpu);
|
||||||
cpu->icount_budget -= executed;
|
cpu->icount_budget -= executed;
|
||||||
|
|
||||||
qatomic_set_i64(&timers_state.qemu_icount,
|
qatomic_set_i64(&timers_state.qemu_icount,
|
||||||
|
@ -98,16 +98,16 @@ static void cpu_update_icount_locked(CPUState *cpu)
|
||||||
* account executed instructions. This is done by the TCG vCPU
|
* account executed instructions. This is done by the TCG vCPU
|
||||||
* thread so the main-loop can see time has moved forward.
|
* thread so the main-loop can see time has moved forward.
|
||||||
*/
|
*/
|
||||||
void cpu_update_icount(CPUState *cpu)
|
void icount_update(CPUState *cpu)
|
||||||
{
|
{
|
||||||
seqlock_write_lock(&timers_state.vm_clock_seqlock,
|
seqlock_write_lock(&timers_state.vm_clock_seqlock,
|
||||||
&timers_state.vm_clock_lock);
|
&timers_state.vm_clock_lock);
|
||||||
cpu_update_icount_locked(cpu);
|
icount_update_locked(cpu);
|
||||||
seqlock_write_unlock(&timers_state.vm_clock_seqlock,
|
seqlock_write_unlock(&timers_state.vm_clock_seqlock,
|
||||||
&timers_state.vm_clock_lock);
|
&timers_state.vm_clock_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int64_t cpu_get_icount_raw_locked(void)
|
static int64_t icount_get_raw_locked(void)
|
||||||
{
|
{
|
||||||
CPUState *cpu = current_cpu;
|
CPUState *cpu = current_cpu;
|
||||||
|
|
||||||
|
@ -117,47 +117,47 @@ static int64_t cpu_get_icount_raw_locked(void)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
/* Take into account what has run */
|
/* Take into account what has run */
|
||||||
cpu_update_icount_locked(cpu);
|
icount_update_locked(cpu);
|
||||||
}
|
}
|
||||||
/* The read is protected by the seqlock, but needs atomic64 to avoid UB */
|
/* The read is protected by the seqlock, but needs atomic64 to avoid UB */
|
||||||
return qatomic_read_i64(&timers_state.qemu_icount);
|
return qatomic_read_i64(&timers_state.qemu_icount);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int64_t cpu_get_icount_locked(void)
|
static int64_t icount_get_locked(void)
|
||||||
{
|
{
|
||||||
int64_t icount = cpu_get_icount_raw_locked();
|
int64_t icount = icount_get_raw_locked();
|
||||||
return qatomic_read_i64(&timers_state.qemu_icount_bias) +
|
return qatomic_read_i64(&timers_state.qemu_icount_bias) +
|
||||||
cpu_icount_to_ns(icount);
|
icount_to_ns(icount);
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t cpu_get_icount_raw(void)
|
int64_t icount_get_raw(void)
|
||||||
{
|
{
|
||||||
int64_t icount;
|
int64_t icount;
|
||||||
unsigned start;
|
unsigned start;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
start = seqlock_read_begin(&timers_state.vm_clock_seqlock);
|
start = seqlock_read_begin(&timers_state.vm_clock_seqlock);
|
||||||
icount = cpu_get_icount_raw_locked();
|
icount = icount_get_raw_locked();
|
||||||
} while (seqlock_read_retry(&timers_state.vm_clock_seqlock, start));
|
} while (seqlock_read_retry(&timers_state.vm_clock_seqlock, start));
|
||||||
|
|
||||||
return icount;
|
return icount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the virtual CPU time, based on the instruction counter. */
|
/* Return the virtual CPU time, based on the instruction counter. */
|
||||||
int64_t cpu_get_icount(void)
|
int64_t icount_get(void)
|
||||||
{
|
{
|
||||||
int64_t icount;
|
int64_t icount;
|
||||||
unsigned start;
|
unsigned start;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
start = seqlock_read_begin(&timers_state.vm_clock_seqlock);
|
start = seqlock_read_begin(&timers_state.vm_clock_seqlock);
|
||||||
icount = cpu_get_icount_locked();
|
icount = icount_get_locked();
|
||||||
} while (seqlock_read_retry(&timers_state.vm_clock_seqlock, start));
|
} while (seqlock_read_retry(&timers_state.vm_clock_seqlock, start));
|
||||||
|
|
||||||
return icount;
|
return icount;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t cpu_icount_to_ns(int64_t icount)
|
int64_t icount_to_ns(int64_t icount)
|
||||||
{
|
{
|
||||||
return icount << qatomic_read(&timers_state.icount_time_shift);
|
return icount << qatomic_read(&timers_state.icount_time_shift);
|
||||||
}
|
}
|
||||||
|
@ -188,7 +188,7 @@ static void icount_adjust(void)
|
||||||
&timers_state.vm_clock_lock);
|
&timers_state.vm_clock_lock);
|
||||||
cur_time = REPLAY_CLOCK_LOCKED(REPLAY_CLOCK_VIRTUAL_RT,
|
cur_time = REPLAY_CLOCK_LOCKED(REPLAY_CLOCK_VIRTUAL_RT,
|
||||||
cpu_get_clock_locked());
|
cpu_get_clock_locked());
|
||||||
cur_icount = cpu_get_icount_locked();
|
cur_icount = icount_get_locked();
|
||||||
|
|
||||||
delta = cur_icount - cur_time;
|
delta = cur_icount - cur_time;
|
||||||
/* FIXME: This is a very crude algorithm, somewhat prone to oscillation. */
|
/* FIXME: This is a very crude algorithm, somewhat prone to oscillation. */
|
||||||
|
@ -229,7 +229,7 @@ static void icount_adjust_vm(void *opaque)
|
||||||
icount_adjust();
|
icount_adjust();
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t qemu_icount_round(int64_t count)
|
int64_t icount_round(int64_t count)
|
||||||
{
|
{
|
||||||
int shift = qatomic_read(&timers_state.icount_time_shift);
|
int shift = qatomic_read(&timers_state.icount_time_shift);
|
||||||
return (count + (1 << shift) - 1) >> shift;
|
return (count + (1 << shift) - 1) >> shift;
|
||||||
|
@ -266,7 +266,7 @@ static void icount_warp_rt(void)
|
||||||
* In adaptive mode, do not let QEMU_CLOCK_VIRTUAL run too
|
* In adaptive mode, do not let QEMU_CLOCK_VIRTUAL run too
|
||||||
* far ahead of real time.
|
* far ahead of real time.
|
||||||
*/
|
*/
|
||||||
int64_t cur_icount = cpu_get_icount_locked();
|
int64_t cur_icount = icount_get_locked();
|
||||||
int64_t delta = clock - cur_icount;
|
int64_t delta = clock - cur_icount;
|
||||||
warp_delta = MIN(warp_delta, delta);
|
warp_delta = MIN(warp_delta, delta);
|
||||||
}
|
}
|
||||||
|
@ -291,7 +291,7 @@ static void icount_timer_cb(void *opaque)
|
||||||
icount_warp_rt();
|
icount_warp_rt();
|
||||||
}
|
}
|
||||||
|
|
||||||
void qemu_start_warp_timer(void)
|
void icount_start_warp_timer(void)
|
||||||
{
|
{
|
||||||
int64_t clock;
|
int64_t clock;
|
||||||
int64_t deadline;
|
int64_t deadline;
|
||||||
|
@ -394,7 +394,7 @@ void qemu_start_warp_timer(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void qemu_account_warp_timer(void)
|
void icount_account_warp_timer(void)
|
||||||
{
|
{
|
||||||
if (!icount_enabled() || !icount_sleep) {
|
if (!icount_enabled() || !icount_sleep) {
|
||||||
return;
|
return;
|
||||||
|
@ -417,7 +417,7 @@ void qemu_account_warp_timer(void)
|
||||||
icount_warp_rt();
|
icount_warp_rt();
|
||||||
}
|
}
|
||||||
|
|
||||||
void configure_icount(QemuOpts *opts, Error **errp)
|
void icount_configure(QemuOpts *opts, Error **errp)
|
||||||
{
|
{
|
||||||
const char *option = qemu_opt_get(opts, "shift");
|
const char *option = qemu_opt_get(opts, "shift");
|
||||||
bool sleep = qemu_opt_get_bool(opts, "sleep", true);
|
bool sleep = qemu_opt_get_bool(opts, "sleep", true);
|
||||||
|
|
|
@ -2695,7 +2695,7 @@ static void user_register_global_props(void)
|
||||||
|
|
||||||
static int do_configure_icount(void *opaque, QemuOpts *opts, Error **errp)
|
static int do_configure_icount(void *opaque, QemuOpts *opts, Error **errp)
|
||||||
{
|
{
|
||||||
configure_icount(opts, errp);
|
icount_configure(opts, errp);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,40 +6,40 @@
|
||||||
|
|
||||||
int use_icount;
|
int use_icount;
|
||||||
|
|
||||||
void cpu_update_icount(CPUState *cpu)
|
void icount_update(CPUState *cpu)
|
||||||
{
|
{
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
void configure_icount(QemuOpts *opts, Error **errp)
|
void icount_configure(QemuOpts *opts, Error **errp)
|
||||||
{
|
{
|
||||||
/* signal error */
|
/* signal error */
|
||||||
error_setg(errp, "cannot configure icount, TCG support not available");
|
error_setg(errp, "cannot configure icount, TCG support not available");
|
||||||
}
|
}
|
||||||
int64_t cpu_get_icount_raw(void)
|
int64_t icount_get_raw(void)
|
||||||
{
|
{
|
||||||
abort();
|
abort();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int64_t cpu_get_icount(void)
|
int64_t icount_get(void)
|
||||||
{
|
{
|
||||||
abort();
|
abort();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int64_t cpu_icount_to_ns(int64_t icount)
|
int64_t icount_to_ns(int64_t icount)
|
||||||
{
|
{
|
||||||
abort();
|
abort();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int64_t qemu_icount_round(int64_t count)
|
int64_t icount_round(int64_t count)
|
||||||
{
|
{
|
||||||
abort();
|
abort();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
void qemu_start_warp_timer(void)
|
void icount_start_warp_timer(void)
|
||||||
{
|
{
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
void qemu_account_warp_timer(void)
|
void icount_account_warp_timer(void)
|
||||||
{
|
{
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1212,12 +1212,12 @@ static bool instructions_supported(CPUARMState *env)
|
||||||
|
|
||||||
static uint64_t instructions_get_count(CPUARMState *env)
|
static uint64_t instructions_get_count(CPUARMState *env)
|
||||||
{
|
{
|
||||||
return (uint64_t)cpu_get_icount_raw();
|
return (uint64_t)icount_get_raw();
|
||||||
}
|
}
|
||||||
|
|
||||||
static int64_t instructions_ns_per(uint64_t icount)
|
static int64_t instructions_ns_per(uint64_t icount)
|
||||||
{
|
{
|
||||||
return cpu_icount_to_ns((int64_t)icount);
|
return icount_to_ns((int64_t)icount);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -300,7 +300,7 @@ static int read_instret(CPURISCVState *env, int csrno, target_ulong *val)
|
||||||
{
|
{
|
||||||
#if !defined(CONFIG_USER_ONLY)
|
#if !defined(CONFIG_USER_ONLY)
|
||||||
if (icount_enabled()) {
|
if (icount_enabled()) {
|
||||||
*val = cpu_get_icount();
|
*val = icount_get();
|
||||||
} else {
|
} else {
|
||||||
*val = cpu_get_host_ticks();
|
*val = cpu_get_host_ticks();
|
||||||
}
|
}
|
||||||
|
@ -315,7 +315,7 @@ static int read_instreth(CPURISCVState *env, int csrno, target_ulong *val)
|
||||||
{
|
{
|
||||||
#if !defined(CONFIG_USER_ONLY)
|
#if !defined(CONFIG_USER_ONLY)
|
||||||
if (icount_enabled()) {
|
if (icount_enabled()) {
|
||||||
*val = cpu_get_icount() >> 32;
|
*val = icount_get() >> 32;
|
||||||
} else {
|
} else {
|
||||||
*val = cpu_get_host_ticks() >> 32;
|
*val = cpu_get_host_ticks() >> 32;
|
||||||
}
|
}
|
||||||
|
|
|
@ -526,7 +526,7 @@ void main_loop_wait(int nonblocking)
|
||||||
* CPU thread can infinitely wait for event after
|
* CPU thread can infinitely wait for event after
|
||||||
* missing the warp
|
* missing the warp
|
||||||
*/
|
*/
|
||||||
qemu_start_warp_timer();
|
icount_start_warp_timer();
|
||||||
}
|
}
|
||||||
qemu_clock_run_all_timers();
|
qemu_clock_run_all_timers();
|
||||||
}
|
}
|
||||||
|
|
|
@ -419,7 +419,7 @@ static void timerlist_rearm(QEMUTimerList *timer_list)
|
||||||
{
|
{
|
||||||
/* Interrupt execution to force deadline recalculation. */
|
/* Interrupt execution to force deadline recalculation. */
|
||||||
if (icount_enabled() && timer_list->clock->type == QEMU_CLOCK_VIRTUAL) {
|
if (icount_enabled() && timer_list->clock->type == QEMU_CLOCK_VIRTUAL) {
|
||||||
qemu_start_warp_timer();
|
icount_start_warp_timer();
|
||||||
}
|
}
|
||||||
timerlist_notify(timer_list);
|
timerlist_notify(timer_list);
|
||||||
}
|
}
|
||||||
|
@ -636,7 +636,7 @@ int64_t qemu_clock_get_ns(QEMUClockType type)
|
||||||
default:
|
default:
|
||||||
case QEMU_CLOCK_VIRTUAL:
|
case QEMU_CLOCK_VIRTUAL:
|
||||||
if (icount_enabled()) {
|
if (icount_enabled()) {
|
||||||
return cpu_get_icount();
|
return icount_get();
|
||||||
} else if (qtest_enabled()) { /* for qtest_clock_warp */
|
} else if (qtest_enabled()) { /* for qtest_clock_warp */
|
||||||
return qtest_get_virtual_clock();
|
return qtest_get_virtual_clock();
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue