]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: SVM: Initialize per-CPU svm_data at the end of hardware setup
authorSean Christopherson <seanjc@google.com>
Thu, 16 Oct 2025 19:06:41 +0000 (12:06 -0700)
committerSean Christopherson <seanjc@google.com>
Tue, 4 Nov 2025 17:14:26 +0000 (09:14 -0800)
Setup the per-CPU SVM data structures at the very end of hardware setup so
that svm_hardware_unsetup() can be used in svm_hardware_setup() to unwind
AVIC setup (for the GALog notifier).  Alternatively, the error path could
do an explicit, manual unwind, e.g. by adding a helper to free the per-CPU
structures.  But the per-CPU allocations have no interactions or
dependencies, i.e. can comfortably live at the end, and so converting to
a manual unwind would introduce churn and code without providing any
immediate advantage.

Link: https://patch.msgid.link/20251016190643.80529-2-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/svm/svm.c

index 153c12dbf3eb15e521fd75468137573f7742f199..efc3a7adebefa8406ab1b6a409f2a32dabd3b176 100644 (file)
@@ -5386,12 +5386,6 @@ static __init int svm_hardware_setup(void)
 
        svm_hv_hardware_setup();
 
-       for_each_possible_cpu(cpu) {
-               r = svm_cpu_init(cpu);
-               if (r)
-                       goto err;
-       }
-
        enable_apicv = avic_hardware_setup();
        if (!enable_apicv) {
                enable_ipiv = false;
@@ -5435,6 +5429,13 @@ static __init int svm_hardware_setup(void)
        svm_set_cpu_caps();
 
        kvm_caps.inapplicable_quirks &= ~KVM_X86_QUIRK_CD_NW_CLEARED;
+
+       for_each_possible_cpu(cpu) {
+               r = svm_cpu_init(cpu);
+               if (r)
+                       goto err;
+       }
+
        return 0;
 
 err: