mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 12:07:31 +00:00 
			
		
		
		
	 430065dab0
			
		
	
	
		430065dab0
		
	
	
	
	
		
			
			The new interface starts unused, will start being used by the next patches. It provides methods for each accelerator to start a vcpu, kick a vcpu, synchronize state, get cpu virtual clock and elapsed ticks. In qemu_wait_io_event, make it clear that APC is used only for HAX on Windows. Signed-off-by: Claudio Fontana <cfontana@suse.de> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * CPU timers state API
 | |
|  *
 | |
|  * Copyright 2020 SUSE LLC
 | |
|  *
 | |
|  * This work is licensed under the terms of the GNU GPL, version 2 or later.
 | |
|  * See the COPYING file in the top-level directory.
 | |
|  *
 | |
|  */
 | |
| #ifndef SYSEMU_CPU_TIMERS_H
 | |
| #define SYSEMU_CPU_TIMERS_H
 | |
| 
 | |
| #include "qemu/timer.h"
 | |
| 
 | |
| /* init the whole cpu timers API, including icount, ticks, and cpu_throttle */
 | |
| void cpu_timers_init(void);
 | |
| 
 | |
| /* icount - Instruction Counter API */
 | |
| 
 | |
| /*
 | |
|  * icount enablement state:
 | |
|  *
 | |
|  * 0 = Disabled - Do not count executed instructions.
 | |
|  * 1 = Enabled - Fixed conversion of insn to ns via "shift" option
 | |
|  * 2 = Enabled - Runtime adaptive algorithm to compute shift
 | |
|  */
 | |
| #ifdef CONFIG_TCG
 | |
| extern int use_icount;
 | |
| #define icount_enabled() (use_icount)
 | |
| #else
 | |
| #define icount_enabled() 0
 | |
| #endif
 | |
| 
 | |
| /*
 | |
|  * Update the icount with the executed instructions. Called by
 | |
|  * cpus-tcg vCPU thread so the main-loop can see time has moved forward.
 | |
|  */
 | |
| void icount_update(CPUState *cpu);
 | |
| 
 | |
| /* get raw icount value */
 | |
| int64_t icount_get_raw(void);
 | |
| 
 | |
| /* return the virtual CPU time in ns, based on the instruction counter. */
 | |
| int64_t icount_get(void);
 | |
| /*
 | |
|  * 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
 | |
|  * (precise mode), or it is constantly approximated and corrected at
 | |
|  * runtime in adaptive mode.
 | |
|  */
 | |
| int64_t icount_to_ns(int64_t icount);
 | |
| 
 | |
| /* configure the icount options, including "shift" */
 | |
| void icount_configure(QemuOpts *opts, Error **errp);
 | |
| 
 | |
| /* used by tcg vcpu thread to calc icount budget */
 | |
| int64_t icount_round(int64_t count);
 | |
| 
 | |
| /* if the CPUs are idle, start accounting real time to virtual clock. */
 | |
| void icount_start_warp_timer(void);
 | |
| void icount_account_warp_timer(void);
 | |
| 
 | |
| /*
 | |
|  * CPU Ticks and Clock
 | |
|  */
 | |
| 
 | |
| /* Caller must hold BQL */
 | |
| void cpu_enable_ticks(void);
 | |
| /* Caller must hold BQL */
 | |
| void cpu_disable_ticks(void);
 | |
| 
 | |
| /*
 | |
|  * return the time elapsed in VM between vm_start and vm_stop.
 | |
|  * cpu_get_ticks() uses units of the host CPU cycle counter.
 | |
|  */
 | |
| int64_t cpu_get_ticks(void);
 | |
| 
 | |
| /*
 | |
|  * Returns the monotonic time elapsed in VM, i.e.,
 | |
|  * the time between vm_start and vm_stop
 | |
|  */
 | |
| int64_t cpu_get_clock(void);
 | |
| 
 | |
| void qemu_timer_notify_cb(void *opaque, QEMUClockType type);
 | |
| 
 | |
| /* get the VIRTUAL clock and VM elapsed ticks via the cpus accel interface */
 | |
| int64_t cpus_get_virtual_clock(void);
 | |
| int64_t cpus_get_elapsed_ticks(void);
 | |
| 
 | |
| #endif /* SYSEMU_CPU_TIMERS_H */
 |