]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: x86: Move kvm_set_apic_base() implementation to lapic.c (from x86.c)
authorSean Christopherson <seanjc@google.com>
Fri, 1 Nov 2024 18:35:51 +0000 (11:35 -0700)
committerSean Christopherson <seanjc@google.com>
Tue, 5 Nov 2024 04:57:46 +0000 (20:57 -0800)
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>
arch/x86/kvm/lapic.c
arch/x86/kvm/x86.c

index fe30f465611fc4479ad4d3789860b015dfd37540..6239cfd89aade753700a3bdc94f501195f62d38e 100644 (file)
@@ -2628,6 +2628,27 @@ void kvm_lapic_set_base(struct kvm_vcpu *vcpu, u64 value)
        }
 }
 
+int kvm_set_apic_base(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
+{
+       enum lapic_mode old_mode = kvm_get_apic_mode(vcpu);
+       enum lapic_mode new_mode = kvm_apic_mode(msr_info->data);
+       u64 reserved_bits = kvm_vcpu_reserved_gpa_bits_raw(vcpu) | 0x2ff |
+               (guest_cpuid_has(vcpu, X86_FEATURE_X2APIC) ? 0 : X2APIC_ENABLE);
+
+       if ((msr_info->data & reserved_bits) != 0 || new_mode == LAPIC_MODE_INVALID)
+               return 1;
+       if (!msr_info->host_initiated) {
+               if (old_mode == LAPIC_MODE_X2APIC && new_mode == LAPIC_MODE_XAPIC)
+                       return 1;
+               if (old_mode == LAPIC_MODE_DISABLED && new_mode == LAPIC_MODE_X2APIC)
+                       return 1;
+       }
+
+       kvm_lapic_set_base(vcpu, msr_info->data);
+       kvm_recalculate_apic_map(vcpu->kvm);
+       return 0;
+}
+
 void kvm_apic_update_apicv(struct kvm_vcpu *vcpu)
 {
        struct kvm_lapic *apic = vcpu->arch.apic;
index 6d4fd165081a5f6f704050178386f9fa6be9227b..61b66ee0f30ce48c2f0cf88d030feef0329ee433 100644 (file)
@@ -668,27 +668,6 @@ static void drop_user_return_notifiers(void)
                kvm_on_user_return(&msrs->urn);
 }
 
-int kvm_set_apic_base(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
-{
-       enum lapic_mode old_mode = kvm_get_apic_mode(vcpu);
-       enum lapic_mode new_mode = kvm_apic_mode(msr_info->data);
-       u64 reserved_bits = kvm_vcpu_reserved_gpa_bits_raw(vcpu) | 0x2ff |
-               (guest_cpuid_has(vcpu, X86_FEATURE_X2APIC) ? 0 : X2APIC_ENABLE);
-
-       if ((msr_info->data & reserved_bits) != 0 || new_mode == LAPIC_MODE_INVALID)
-               return 1;
-       if (!msr_info->host_initiated) {
-               if (old_mode == LAPIC_MODE_X2APIC && new_mode == LAPIC_MODE_XAPIC)
-                       return 1;
-               if (old_mode == LAPIC_MODE_DISABLED && new_mode == LAPIC_MODE_X2APIC)
-                       return 1;
-       }
-
-       kvm_lapic_set_base(vcpu, msr_info->data);
-       kvm_recalculate_apic_map(vcpu->kvm);
-       return 0;
-}
-
 /*
  * Handle a fault on a hardware virtualization (VMX or SVM) instruction.
  *