[PATCH v8 0/9] mshv: add SEV-SNP support for MSHV root partitions
From: Wei Hu
Date: Mon Oct 26 2026 - 10:17:16 EST
This series adds support for creating and managing AMD SEV-SNP
confidential virtual machines through the Microsoft Hypervisor root
partition driver.
The series adds fixed-size MSHV UAPI definitions, the required Microsoft
Hypervisor ABI definitions and hypercall helpers, partition ioctls,
capability discovery, processor-feature handling, ordered encrypted-memory
teardown, and nested-root SynIC handling.
Two prerequisite fixes lead the series. The first makes memory-region
unmap ownership explicit and retains mappings, pinned pages, the partition,
and the module whenever checked hypervisor unmap cannot prove cleanup. The
second publishes and withdraws per-CPU SynIC pointers so interrupt readers
cannot observe mappings after initialization failure or CPU teardown.
Per Wei Liu's recommendation, v8 is based on linux-next next-20261022:
bd1ecbb61afefc6a8b876ccbc31e9228b44e9eab
This includes both the MM/HMM changes and hyperv-next. The complete series
also applies without conflicts to the separately checked hyperv-next tip:
347f8745462dad74022284e34ddd9d1c16b7473f
Changes since v7:
- Rebase onto linux-next, resolving the patch-1 conflict with
39899823ad38 ("mshv: use hmm_range_fault_unlocked_timeout() for region
faults").
- In patch 1, retain the unlocked HMM helper and let it manage mmap_lock.
Preserve the region fault-admission gate, mm lifetime reference,
notifier-sequence recheck, and checked-unmap teardown ordering.
- Preserve hyperv-next's updated hypervisor memory-deposit logic.
- Reflow ordinary code and comments toward 80 columns without splitting
diagnostic strings. Keep conventional alignment where long type or
argument names make an 80-column layout impractical.
- Apart from patch 1's HMM adaptation, source changes relative to v7
are formatting-only. There are no UAPI layout, ioctl-number, or
request-limit changes. The UAPI header is no longer byte-identical.
Formatting-only verification:
- Every intermediate patch preserves the previous v8 snapshot's C
tokens, complete literals, comment words and preprocessor directives.
- Strict checkpatch at 80 columns: no errors or CHECKs; seven remaining
long-identifier warnings.
- x86-64 and ARM64 W=1 affected-object builds.
- All nine existing MSHV host-access KUnit tests.
- Exported UAPI layout assertions for x86-64, x86-32, and ARM64, plus
x86 and ARM64 Rust bindgen checks.
- Exact mailbox replay on the stated linux-next base.
- Plain git am application and affected x86 object builds on the stated
hyperv-next tip.
The previous v8 source, b4b111a45c54, passed the full x86-64 kernel/modules
build and the nested-host CVM tests: normal 16-CPU host boot, the dedicated
Cloud Hypervisor integration test, and a four-vCPU/1-GiB SNP guest reaching
login with successful teardown. Those are prior, source-equivalent runtime
results, not a new deployment or hardware run of this formatted revision.
The development host needs local runtime prerequisites: EFI HvLoader root
partition boot enablement, its adaptation to linux-next's UTF-16 formatter,
the nested-VMBus interrupt-vector workaround, and preservation of the nested
SIGNAL_EVENT control bit. These and the KUnit follow-up remain excluded from
the nine-patch submission.
Link: https://lore.kernel.org/linux-hyperv/20260922041043.171543-1-weh@xxxxxxxxxxxxxxxxxxx/
Wei Hu (3):
mshv: retain memory regions until unmap succeeds
mshv: clear SynIC mappings before freeing them
mshv: set up own SynIC registers on a nested root partition
Wei Liu (6):
mshv: add SEV-SNP UAPI definitions
mshv: add SEV-SNP PSP request hypercall
mshv: add SEV-SNP isolated page hypercalls
mshv: wire SEV-SNP partition ioctls
mshv: detect and report SEV-SNP support at init
mshv: use safe partition CPU feature defaults
drivers/hv/mshv_regions.c | 482 ++++++++++++---
drivers/hv/mshv_root.h | 129 +++-
drivers/hv/mshv_root_hv_call.c | 379 ++++++++++--
drivers/hv/mshv_root_main.c | 1334 +++++++++++++++++++++++++++++++++++++---
drivers/hv/mshv_synic.c | 174 +++---
include/hyperv/hvgdk_mini.h | 31 +
include/hyperv/hvhdk.h | 124 +++-
include/hyperv/hvhdk_mini.h | 53 ++
include/uapi/linux/mshv.h | 122 +++-
9 files changed, 2563 insertions(+), 265 deletions(-)
base-commit: bd1ecbb61afefc6a8b876ccbc31e9228b44e9eab
--
2.43.0