Currently, TSC is set as part of the VM runtime state. Setting TSC at runtime is heavy and additionally can have side effects on the guest, which are not very resilient to variances in the TSC. This patch uses the VM state to determine whether to set TSC or not. Some minor enhancements for getting TSC values as well that considers the VM state. Additionally, while setting the TSC, the partition is suspended to reduce the variance in the TSC value across vCPUs. Signed-off-by: Sunil Muthuswamy <sunilmut@microsoft.com> Message-Id: <SN4PR2101MB08804D23439166E81FF151F7C0EA0@SN4PR2101MB0880.namprd21.prod.outlook.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
46 lines
1.1 KiB
C
46 lines
1.1 KiB
C
/*
|
|
* QEMU Windows Hypervisor Platform accelerator (WHPX) support
|
|
*
|
|
* Copyright Microsoft, Corp. 2017
|
|
*
|
|
* Authors:
|
|
*
|
|
* 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 QEMU_WHPX_H
|
|
#define QEMU_WHPX_H
|
|
|
|
|
|
int whpx_init_vcpu(CPUState *cpu);
|
|
int whpx_vcpu_exec(CPUState *cpu);
|
|
void whpx_destroy_vcpu(CPUState *cpu);
|
|
void whpx_vcpu_kick(CPUState *cpu);
|
|
|
|
|
|
void whpx_cpu_synchronize_state(CPUState *cpu);
|
|
void whpx_cpu_synchronize_post_reset(CPUState *cpu);
|
|
void whpx_cpu_synchronize_post_init(CPUState *cpu);
|
|
void whpx_cpu_synchronize_pre_loadvm(CPUState *cpu);
|
|
|
|
#ifdef CONFIG_WHPX
|
|
|
|
int whpx_enabled(void);
|
|
|
|
#else /* CONFIG_WHPX */
|
|
|
|
#define whpx_enabled() (0)
|
|
|
|
#endif /* CONFIG_WHPX */
|
|
|
|
/* state subset only touched by the VCPU itself during runtime */
|
|
#define WHPX_SET_RUNTIME_STATE 1
|
|
/* state subset modified during VCPU reset */
|
|
#define WHPX_SET_RESET_STATE 2
|
|
/* full state set, modified during initialization or on vmload */
|
|
#define WHPX_SET_FULL_STATE 3
|
|
|
|
#endif /* QEMU_WHPX_H */
|