mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 22:14:03 +02:00
KVM: x86: Remove runtime Xen TSC frequency CPUID update
Remove the code in kvm_cpuid() that dynamically updates the Xen TSC info CPUID leaf at runtime, as KVM is updating the wrong sub-leaf anyway (0x40000x03/2 EAX is the *host* TSC frequency per the Xen ABI, not the guest frequency which belongs in 0x40000x03/0 ECX). Simply drop the code instead of fixing it to fill the correct sub-leaf, as modifying guest CPUID entries/output at runtime is generally undesirable, and providing userspace the necessary data to fill the sub-leaf itself is useful for other reasons, e.g. to fill the generic 0x40000010 timing leaf and to provide exact scaling information to aid save/restore. Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> Link: https://patch.msgid.link/20260728144954.355376-23-dwmw2@infradead.org [sean: tweak changelog to take this patch before the new uAPI] Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
parent
36a8520064
commit
7d3bd21e45
|
|
@ -2117,22 +2117,6 @@ bool kvm_cpuid(struct kvm_vcpu *vcpu, u32 *eax, u32 *ebx,
|
|||
} else if (function == 0x80000007) {
|
||||
if (kvm_hv_invtsc_suppressed(vcpu))
|
||||
*edx &= ~feature_bit(CONSTANT_TSC);
|
||||
} else if (IS_ENABLED(CONFIG_KVM_XEN) &&
|
||||
kvm_xen_is_tsc_leaf(vcpu, function)) {
|
||||
/*
|
||||
* Update guest TSC frequency information if necessary.
|
||||
* Ignore failures, there is no sane value that can be
|
||||
* provided if KVM can't get the TSC frequency.
|
||||
*/
|
||||
if (kvm_check_request(KVM_REQ_CLOCK_UPDATE, vcpu))
|
||||
kvm_guest_time_update(vcpu);
|
||||
|
||||
if (index == 1) {
|
||||
*ecx = vcpu->arch.pvclock_tsc_mul;
|
||||
*edx = vcpu->arch.pvclock_tsc_shift;
|
||||
} else if (index == 2) {
|
||||
*eax = vcpu->arch.hw_tsc_khz;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
*eax = *ebx = *ecx = *edx = 0;
|
||||
|
|
|
|||
|
|
@ -50,14 +50,6 @@ static inline void kvm_xen_sw_enable_lapic(struct kvm_vcpu *vcpu)
|
|||
kvm_xen_inject_vcpu_vector(vcpu);
|
||||
}
|
||||
|
||||
static inline bool kvm_xen_is_tsc_leaf(struct kvm_vcpu *vcpu, u32 function)
|
||||
{
|
||||
return static_branch_unlikely(&kvm_xen_enabled.key) &&
|
||||
vcpu->arch.xen.cpuid.base &&
|
||||
function <= vcpu->arch.xen.cpuid.limit &&
|
||||
function == (vcpu->arch.xen.cpuid.base | XEN_CPUID_LEAF(3));
|
||||
}
|
||||
|
||||
static inline bool kvm_xen_msr_enabled(struct kvm *kvm)
|
||||
{
|
||||
return static_branch_unlikely(&kvm_xen_enabled.key) &&
|
||||
|
|
@ -177,11 +169,6 @@ static inline bool kvm_xen_timer_enabled(struct kvm_vcpu *vcpu)
|
|||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline bool kvm_xen_is_tsc_leaf(struct kvm_vcpu *vcpu, u32 function)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
int kvm_xen_hypercall(struct kvm_vcpu *vcpu);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user