x86/ioremap: Add hypervisor callback for private MMIO mapping in coco VM
authorMichael Kelley <mikelley@microsoft.com>
Thu, 9 Mar 2023 02:40:02 +0000 (18:40 -0800)
committerBorislav Petkov (AMD) <bp@alien8.de>
Sun, 26 Mar 2023 21:42:40 +0000 (23:42 +0200)
commit88e378d400fa0544d51cf62037e7774d8a4b4379
tree07da1f613ff1e7d87644b3ee3066d09bd305de28
parent0144e3b85d7b42e8a4cda991c0e81f131897457a
x86/ioremap: Add hypervisor callback for private MMIO mapping in coco VM

Current code always maps MMIO devices as shared (decrypted) in a
confidential computing VM. But Hyper-V guest VMs on AMD SEV-SNP with vTOM
use a paravisor running in VMPL0 to emulate some devices, such as the
IO-APIC and TPM. In such a case, the device must be accessed as private
(encrypted) because the paravisor emulates the device at an address below
vTOM, where all accesses are encrypted.

Add a new hypervisor callback to determine if an MMIO address should
be mapped private. The callback allows hypervisor-specific code to handle
any quirks, the use of a paravisor, etc. in determining whether a mapping
must be private. If the callback is not used by a hypervisor, default
to returning "false", which is consistent with normal coco VM behavior.

Use this callback as another special case to check for when doing
ioremap().  Just checking the starting address is sufficient as an
ioremap range must be all private or all shared.

Also make the callback in early boot IO-APIC mapping code that uses the
fixmap.

  [ bp: Touchups. ]

Signed-off-by: Michael Kelley <mikelley@microsoft.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/r/1678329614-3482-2-git-send-email-mikelley@microsoft.com
arch/x86/include/asm/x86_init.h
arch/x86/kernel/apic/io_apic.c
arch/x86/kernel/x86_init.c
arch/x86/mm/ioremap.c