Skip to content

Commit c9c9acf

Browse files
committed
KVM: x86: Move kvm_set_apic_base() implementation to lapic.c (from x86.c)
Move kvm_set_apic_base() to lapic.c so that the bulk of KVM's local APIC code resides in lapic.c, regardless of whether or not KVM is emulating the local APIC in-kernel. This will also allow making various helpers visible only to lapic.c. No functional change intended. Reviewed-by: Kai Huang <kai.huang@intel.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Link: https://lore.kernel.org/r/20241009181742.1128779-6-seanjc@google.com Link: https://lore.kernel.org/r/20241101183555.1794700-6-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
1 parent adfec1f commit c9c9acf

File tree

2 files changed

+21
-21
lines changed

2 files changed

+21
-21
lines changed

arch/x86/kvm/lapic.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2628,6 +2628,27 @@ void kvm_lapic_set_base(struct kvm_vcpu *vcpu, u64 value)
26282628
}
26292629
}
26302630

2631+
int kvm_set_apic_base(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
2632+
{
2633+
enum lapic_mode old_mode = kvm_get_apic_mode(vcpu);
2634+
enum lapic_mode new_mode = kvm_apic_mode(msr_info->data);
2635+
u64 reserved_bits = kvm_vcpu_reserved_gpa_bits_raw(vcpu) | 0x2ff |
2636+
(guest_cpuid_has(vcpu, X86_FEATURE_X2APIC) ? 0 : X2APIC_ENABLE);
2637+
2638+
if ((msr_info->data & reserved_bits) != 0 || new_mode == LAPIC_MODE_INVALID)
2639+
return 1;
2640+
if (!msr_info->host_initiated) {
2641+
if (old_mode == LAPIC_MODE_X2APIC && new_mode == LAPIC_MODE_XAPIC)
2642+
return 1;
2643+
if (old_mode == LAPIC_MODE_DISABLED && new_mode == LAPIC_MODE_X2APIC)
2644+
return 1;
2645+
}
2646+
2647+
kvm_lapic_set_base(vcpu, msr_info->data);
2648+
kvm_recalculate_apic_map(vcpu->kvm);
2649+
return 0;
2650+
}
2651+
26312652
void kvm_apic_update_apicv(struct kvm_vcpu *vcpu)
26322653
{
26332654
struct kvm_lapic *apic = vcpu->arch.apic;

arch/x86/kvm/x86.c

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -668,27 +668,6 @@ static void drop_user_return_notifiers(void)
668668
kvm_on_user_return(&msrs->urn);
669669
}
670670

671-
int kvm_set_apic_base(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
672-
{
673-
enum lapic_mode old_mode = kvm_get_apic_mode(vcpu);
674-
enum lapic_mode new_mode = kvm_apic_mode(msr_info->data);
675-
u64 reserved_bits = kvm_vcpu_reserved_gpa_bits_raw(vcpu) | 0x2ff |
676-
(guest_cpuid_has(vcpu, X86_FEATURE_X2APIC) ? 0 : X2APIC_ENABLE);
677-
678-
if ((msr_info->data & reserved_bits) != 0 || new_mode == LAPIC_MODE_INVALID)
679-
return 1;
680-
if (!msr_info->host_initiated) {
681-
if (old_mode == LAPIC_MODE_X2APIC && new_mode == LAPIC_MODE_XAPIC)
682-
return 1;
683-
if (old_mode == LAPIC_MODE_DISABLED && new_mode == LAPIC_MODE_X2APIC)
684-
return 1;
685-
}
686-
687-
kvm_lapic_set_base(vcpu, msr_info->data);
688-
kvm_recalculate_apic_map(vcpu->kvm);
689-
return 0;
690-
}
691-
692671
/*
693672
* Handle a fault on a hardware virtualization (VMX or SVM) instruction.
694673
*

0 commit comments

Comments
 (0)