Dexuan, are you happy with the patch? You can also delegate to Saurabh if you think it's more appropriate. Thanks!
On Wed, Jan 07, 2026 at 01:44:45PM -0800, Ricardo Neri wrote: > From: Yunhong Jiang <[email protected]> > > The current code maps MMIO devices as shared (decrypted) by default in a > confidential computing VM. > > In a TDX environment, secondary CPUs are booted using the Multiprocessor > Wakeup Structure defined in the ACPI specification. The virtual firmware > and the operating system function in the guest context, without > intervention from the VMM. Map the physical memory of the mailbox as > private. Use the is_private_mmio() callback. > > Signed-off-by: Yunhong Jiang <[email protected]> > Signed-off-by: Ricardo Neri <[email protected]> > --- > Changes in v8: > - Included linux/acpi.h to add missing definitions that caused build > breaks (kernel test robot) > > Changes in v7: > - Dropped check for !CONFIG_X86_MAILBOX_WAKEUP. The symbol is no longer > valid and now we have a stub for !CONFIG_ACPI. > - Dropped Reviewed-by tags from Dexuan and Michael as this patch > changed. > > Changes in v6: > - Fixed a compile error with !CONFIG_X86_MAILBOX_WAKEUP. > - Added Reviewed-by tag from Dexuan. Thanks! > > Changes in v5: > - None > > Changes in v4: > - Updated to use the renamed function acpi_get_mp_wakeup_mailbox_paddr(). > - Added Reviewed-by tag from Michael. Thanks! > > Changes in v3: > - Use the new helper function get_mp_wakeup_mailbox_paddr(). > - Edited the commit message for clarity. > > Changes in v2: > - Added the helper function within_page() to improve readability > - Override the is_private_mmio() callback when detecting a TDX > environment. The address of the mailbox is checked in > hv_is_private_mmio_tdx(). > --- > arch/x86/hyperv/hv_vtl.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/arch/x86/hyperv/hv_vtl.c b/arch/x86/hyperv/hv_vtl.c > index 752101544663..2af825f7a447 100644 > --- a/arch/x86/hyperv/hv_vtl.c > +++ b/arch/x86/hyperv/hv_vtl.c > @@ -6,6 +6,9 @@ > * Saurabh Sengar <[email protected]> > */ > > +#include <linux/acpi.h> > + > +#include <asm/acpi.h> > #include <asm/apic.h> > #include <asm/boot.h> > #include <asm/desc.h> > @@ -59,6 +62,18 @@ static void __noreturn hv_vtl_restart(char __maybe_unused > *cmd) > hv_vtl_emergency_restart(); > } > > +static inline bool within_page(u64 addr, u64 start) > +{ > + return addr >= start && addr < (start + PAGE_SIZE); > +} > + > +static bool hv_vtl_is_private_mmio_tdx(u64 addr) > +{ > + u64 mb_addr = acpi_get_mp_wakeup_mailbox_paddr(); > + > + return mb_addr && within_page(addr, mb_addr); > +} > + > void __init hv_vtl_init_platform(void) > { > /* > @@ -71,6 +86,8 @@ void __init hv_vtl_init_platform(void) > /* There is no paravisor present if we are here. */ > if (hv_isolation_type_tdx()) { > x86_init.resources.realmode_limit = SZ_4G; > + x86_platform.hyper.is_private_mmio = hv_vtl_is_private_mmio_tdx; > + > } else { > x86_platform.realmode_reserve = x86_init_noop; > x86_platform.realmode_init = x86_init_noop; > > -- > 2.43.0 >

