]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
x86/hyperv/vtl: Use the wakeup mailbox to boot secondary CPUs
authorRicardo Neri <ricardo.neri-calderon@linux.intel.com>
Wed, 4 Mar 2026 23:41:21 +0000 (15:41 -0800)
committerDexuan Cui <decui@microsoft.com>
Thu, 28 May 2026 20:01:26 +0000 (20:01 +0000)
The hypervisor is an untrusted entity for TDX guests. It cannot be used
to boot secondary CPUs. The function hv_vtl_wakeup_secondary_cpu() cannot
be used.

Instead, the virtual firmware boots the secondary CPUs and places them in
a state to transfer control to the kernel using the wakeup mailbox. The
firmware enumerates the mailbox via either an ACPI table or a DeviceTree
node.

If the wakeup mailbox is present, the kernel updates the APIC callback
wakeup_secondary_cpu_64() to use it.

Reviewed-by: Dexuan Cui <decui@microsoft.com>
Reviewed-by: Michael Kelley <mhklinux@outlook.com>
Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
Signed-off-by: Dexuan Cui <dexuan@kernel.org>
arch/x86/hyperv/hv_vtl.c

index 1e2f5b3ea772050acfa8625de77a8da30339bad0..07fac3d687c39f77d6746882ea0b16a67a37f3fe 100644 (file)
@@ -274,7 +274,15 @@ int __init hv_vtl_early_init(void)
                panic("XSAVE has to be disabled as it is not supported by this module.\n"
                          "Please add 'noxsave' to the kernel command line.\n");
 
-       apic_update_callback(wakeup_secondary_cpu_64, hv_vtl_wakeup_secondary_cpu);
+       /*
+        * TDX confidential VMs do not trust the hypervisor and cannot use it to
+        * boot secondary CPUs. Instead, they will be booted using the wakeup
+        * mailbox if detected during boot. See setup_arch().
+        *
+        * There is no paravisor present if we are here.
+        */
+       if (!hv_isolation_type_tdx())
+               apic_update_callback(wakeup_secondary_cpu_64, hv_vtl_wakeup_secondary_cpu);
 
        return 0;
 }