Loading cpus.c +20 −15 Original line number Diff line number Diff line Loading @@ -316,11 +316,26 @@ int64_t cpu_icount_to_ns(int64_t icount) return icount << atomic_read(&timers_state.icount_time_shift); } static int64_t cpu_get_ticks_locked(void) { int64_t ticks = timers_state.cpu_ticks_offset; if (timers_state.cpu_ticks_enabled) { ticks += cpu_get_host_ticks(); } if (timers_state.cpu_ticks_prev > ticks) { /* Non increasing ticks may happen if the host uses software suspend. */ timers_state.cpu_ticks_offset += timers_state.cpu_ticks_prev - ticks; ticks = timers_state.cpu_ticks_prev; } timers_state.cpu_ticks_prev = ticks; return ticks; } /* return the time elapsed in VM between vm_start and vm_stop. Unless * icount is active, cpu_get_ticks() uses units of the host CPU cycle * counter. * * Caller must hold the BQL */ int64_t cpu_get_ticks(void) { Loading @@ -330,19 +345,9 @@ int64_t cpu_get_ticks(void) return cpu_get_icount(); } ticks = timers_state.cpu_ticks_offset; if (timers_state.cpu_ticks_enabled) { ticks += cpu_get_host_ticks(); } if (timers_state.cpu_ticks_prev > ticks) { /* Note: non increasing ticks may happen if the host uses software suspend */ timers_state.cpu_ticks_offset += timers_state.cpu_ticks_prev - ticks; ticks = timers_state.cpu_ticks_prev; } timers_state.cpu_ticks_prev = ticks; qemu_spin_lock(&timers_state.vm_clock_lock); ticks = cpu_get_ticks_locked(); qemu_spin_unlock(&timers_state.vm_clock_lock); return ticks; } Loading Loading
cpus.c +20 −15 Original line number Diff line number Diff line Loading @@ -316,11 +316,26 @@ int64_t cpu_icount_to_ns(int64_t icount) return icount << atomic_read(&timers_state.icount_time_shift); } static int64_t cpu_get_ticks_locked(void) { int64_t ticks = timers_state.cpu_ticks_offset; if (timers_state.cpu_ticks_enabled) { ticks += cpu_get_host_ticks(); } if (timers_state.cpu_ticks_prev > ticks) { /* Non increasing ticks may happen if the host uses software suspend. */ timers_state.cpu_ticks_offset += timers_state.cpu_ticks_prev - ticks; ticks = timers_state.cpu_ticks_prev; } timers_state.cpu_ticks_prev = ticks; return ticks; } /* return the time elapsed in VM between vm_start and vm_stop. Unless * icount is active, cpu_get_ticks() uses units of the host CPU cycle * counter. * * Caller must hold the BQL */ int64_t cpu_get_ticks(void) { Loading @@ -330,19 +345,9 @@ int64_t cpu_get_ticks(void) return cpu_get_icount(); } ticks = timers_state.cpu_ticks_offset; if (timers_state.cpu_ticks_enabled) { ticks += cpu_get_host_ticks(); } if (timers_state.cpu_ticks_prev > ticks) { /* Note: non increasing ticks may happen if the host uses software suspend */ timers_state.cpu_ticks_offset += timers_state.cpu_ticks_prev - ticks; ticks = timers_state.cpu_ticks_prev; } timers_state.cpu_ticks_prev = ticks; qemu_spin_lock(&timers_state.vm_clock_lock); ticks = cpu_get_ticks_locked(); qemu_spin_unlock(&timers_state.vm_clock_lock); return ticks; } Loading