[RFC PATCH 00/20] mshv: enable kexec with Hyper-V donated pages and partitions
Jork Loeser
jloeser at linux.microsoft.com
Wed May 27 17:41:42 PDT 2026
When Linux runs as an L1 Virtual Host (L1VH) under Hyper-V, the MSHV
root partition driver deposits pages to the hypervisor and creates
partitions for guest VMs. Prior patches enabled kexec for L1VH, but
only when no partitions had been created and no memory had been donated.
This series lifts that limitation. It uses KHO (Kexec Handover) to:
- Track all pages deposited to the hypervisor in a KHO radix tree
and preserve them across kexec so the new kernel knows which pages
are owned by the hypervisor.
- Freeze running partitions before kexec, record their IDs in the
KHO FDT, and vacuum (tear down + reclaim memory) stale partitions
after kexec.
- In case of a crash, exclude hypervisor-owned pages from crash
dump collection by passing the radix tree root PA via Hyper-V
crash MSR P2 to the crash kernel.
Dependency on Pratyush's KHO series
===================================
Patches 1-12 are cherry-picked from Pratyush Yadav's v1 series
"kho: make boot time huge page allocation work nicely with KHO" [1],
which is still under discussion. This series uses functionality from
those patches -- specifically the meta-data page enumeration via table
callbacks and the restructured radix tree API. It also extends the
KHO radix tree with:
- A freeze mechanism to lock the tree before serializing for kexec
(patch 13).
- A crash-kernel-safe variant that memremaps radix nodes for use
outside the direct map (patch 14).
Patch overview
==============
Patches 1-12: KHO radix tree and memblock changes (from [1])
Patch 13: Radix tree freeze and del_key() error reporting
Patch 14: Crash-kernel-safe radix tree presence check
Patch 15: Page tracker using KHO radix tree for deposited pages
Patch 16: Debugfs interface for page tracker
Patches 17-18: Crash MSR reshuffling + crash dump page exclusion
Patch 19: Export kexec_in_progress for modules
Patch 20: Freeze and vacuum partitions across kexec
Feedback
========
This is an RFC. I am looking for feedback on the overall approach as
well as the KHO changes (patches 13-14).
[1] https://lore.kernel.org/linux-mm/20260429133928.850721-1-pratyush@kernel.org/
Based-on: linux-next/master (next-20260527)
Jork Loeser (8):
kho: add radix tree freeze and del_key() error reporting
kho: Add crash-kernel-safe radix tree presence check
mshv: Use page tracker to manage MSHV-owned pages and preserve with
KHO
mshv: Add debugfs interface to page tracker
hyperv: Reserve crash MSR P2 for page preservation root PA
mshv: Exclude Hyper-V donated pages from crash dump collection
kexec: export kexec_in_progress for modules
mshv: freeze and vacuum partitions across kexec
Pratyush Yadav (Google) (12):
kho: generalize radix tree APIs
kho: store incoming radix tree in kho_in
kho: add a struct for radix callbacks
kho: add callback for table pages
kho: add data argument to radix walk callback
kho: allow early-boot usage of the KHO radix tree
kho: allow destroying KHO radix tree
kho: add kho_radix_init_tree()
memblock: introduce MEMBLOCK_KHO_SCRATCH_EXT
kho: extended scratch
kho: return virtual address of mem_map
mm/hugetlb: make bootmem allocation work with KHO
arch/arm64/hyperv/hv_core.c | 6 +-
arch/x86/hyperv/hv_init.c | 4 +-
drivers/hv/Kconfig | 3 +
drivers/hv/Makefile | 2 +-
drivers/hv/hv_common.c | 5 +-
drivers/hv/hv_proc.c | 32 +-
drivers/hv/mshv_debugfs.c | 99 +++++
drivers/hv/mshv_page_preserve.c | 557 ++++++++++++++++++++++++++
drivers/hv/mshv_page_preserve.h | 21 +
drivers/hv/mshv_root.h | 5 +
drivers/hv/mshv_root_hv_call.c | 12 +-
drivers/hv/mshv_root_main.c | 341 ++++++++++++++--
include/linux/kexec_handover.h | 1 +
include/linux/kho_radix_tree.h | 90 ++++-
include/linux/memblock.h | 14 +
kernel/kexec_core.c | 1 +
kernel/liveupdate/kexec_handover.c | 605 +++++++++++++++++++++++------
mm/hugetlb.c | 19 +-
mm/memblock.c | 177 +++++++--
mm/mm_init.c | 1 +
20 files changed, 1767 insertions(+), 228 deletions(-)
create mode 100644 drivers/hv/mshv_page_preserve.c
create mode 100644 drivers/hv/mshv_page_preserve.h
--
2.43.0
More information about the kexec
mailing list