RE: [PATCH 0/5] Add new headers for Hyper-V Dom0
From: Michael Kelley <hidden>
Date: 2024-10-10 18:21:32
Also in:
kvm, linux-arch, linux-arm-kernel, linux-hyperv, linux-iommu, linux-pci, lkml, virtualization
From: Nuno Das Neves <redacted> Sent: Thursday, October 3, 2024 12:51 PM
To support Hyper-V Dom0 (aka Linux as root partition), many new definitions are required. The plan going forward is to directly import headers from Hyper-V. This is a more maintainable way to import definitions rather than via the TLFS doc. This patch series introduces new headers (hvhdk.h, hvgdk.h, etc, see patch #3) directly derived from Hyper-V code. This patch series replaces hyperv-tlfs.h with hvhdk.h, but only in Microsoft-maintained Hyper-V code where they are needed. This leaves the existing hyperv-tlfs.h in use elsewhere - notably for Hyper-V enlightenments on KVM guests.
Could you elaborate on why the bifurcation is necessary? Is it an interim step until the KVM code can use the new scheme as well? Also, does "Hyper-V enlightenments on KVM guests" refer to nested KVM running at L1 on an L0 Hyper-V, and supporting L2 guests? Or is it the more general KVM support for mimicking Hyper-V for the purposes of running Windows guests? From these patches, it looks like your intention is for all KVM support for Hyper-V functionality to continue to use the existing hyperv-tlfs.h file.
An intermediary header "hv_defs.h" is introduced to conditionally include either hyperv-tlfs.h or hvhdk.h. This is required because several headers which today include hyperv-tlfs.h, are shared between Hyper-V and KVM code (e.g. mshyperv.h).
Have you considered user space code that uses include/linux/hyperv.h? Which of the two schemes will it use? That code needs to compile correctly on x86 and ARM64 after your changes. User space code includes the separate DPDK project, and some of the tools in the kernel tree under tools/hv. Anything that uses the uio_hv_generic.c driver falls into this category. I think there's also user space code that is built for vDSO that might pull in the .h files you are modifying. There are in-progress patches dealing with vDSO include files, such as [1]. My general comment on vDSO is to be careful in making #include file changes that it uses, but I'm not knowledgeable enough on how vDSO is built to give specific guidance. :-( Michael [1] https://lore.kernel.org/lkml/20241010135146.181175-1-vincenzo.frascino@arm.com/ (local)
Summary:
Patch 1-2: Cleanup patches
Patch 3: Add the new headers (hvhdk.h, etc..) in include/hyperv/
Patch 4: Add hv_defs.h and use it in mshyperv.h, svm.h,
hyperv_timer.h
Patch 5: Switch to the new headers, only in Hyper-V code
Nuno Das Neves (5):
hyperv: Move hv_connection_id to hyperv-tlfs.h
hyperv: Remove unnecessary #includes
hyperv: Add new Hyper-V headers
hyperv: Add hv_defs.h to conditionally include hyperv-tlfs.h or
hvhdk.h
hyperv: Use hvhdk.h instead of hyperv-tlfs.h in Hyper-V code
arch/arm64/hyperv/hv_core.c | 3 +-
arch/arm64/hyperv/mshyperv.c | 1 +
arch/arm64/include/asm/mshyperv.h | 2 +-
arch/x86/entry/vdso/vma.c | 1 +
arch/x86/hyperv/hv_apic.c | 2 +-
arch/x86/hyperv/hv_init.c | 3 +-
arch/x86/hyperv/hv_proc.c | 4 +-
arch/x86/hyperv/hv_spinlock.c | 1 +
arch/x86/hyperv/hv_vtl.c | 1 +
arch/x86/hyperv/irqdomain.c | 1 +
arch/x86/hyperv/ivm.c | 2 +-
arch/x86/hyperv/mmu.c | 2 +-
arch/x86/hyperv/nested.c | 2 +-
arch/x86/include/asm/kvm_host.h | 1 -
arch/x86/include/asm/mshyperv.h | 3 +-
arch/x86/include/asm/svm.h | 2 +-
arch/x86/include/asm/vdso/gettimeofday.h | 1 +
arch/x86/kernel/cpu/mshyperv.c | 2 +-
arch/x86/kernel/cpu/mtrr/generic.c | 1 +
arch/x86/kvm/vmx/vmx_onhyperv.h | 1 -
arch/x86/mm/pat/set_memory.c | 2 -
drivers/clocksource/hyperv_timer.c | 2 +-
drivers/hv/channel.c | 1 +
drivers/hv/channel_mgmt.c | 1 +
drivers/hv/connection.c | 1 +
drivers/hv/hv.c | 1 +
drivers/hv/hv_balloon.c | 5 +-
drivers/hv/hv_common.c | 2 +-
drivers/hv/hv_kvp.c | 1 -
drivers/hv/hv_snapshot.c | 1 -
drivers/hv/hv_util.c | 1 +
drivers/hv/hyperv_vmbus.h | 1 -
drivers/hv/ring_buffer.c | 1 +
drivers/hv/vmbus_drv.c | 1 +
drivers/iommu/hyperv-iommu.c | 1 +
drivers/net/hyperv/netvsc.c | 1 +
drivers/pci/controller/pci-hyperv.c | 1 +
include/asm-generic/hyperv-tlfs.h | 9 +
include/asm-generic/mshyperv.h | 2 +-
include/clocksource/hyperv_timer.h | 2 +-
include/hyperv/hv_defs.h | 29 +
include/hyperv/hvgdk.h | 66 ++
include/hyperv/hvgdk_ext.h | 46 +
include/hyperv/hvgdk_mini.h | 1212 ++++++++++++++++++++++
include/hyperv/hvhdk.h | 733 +++++++++++++
include/hyperv/hvhdk_mini.h | 310 ++++++
include/linux/hyperv.h | 12 +-
net/vmw_vsock/hyperv_transport.c | 1 -
48 files changed, 2442 insertions(+), 40 deletions(-)
create mode 100644 include/hyperv/hv_defs.h
create mode 100644 include/hyperv/hvgdk.h
create mode 100644 include/hyperv/hvgdk_ext.h
create mode 100644 include/hyperv/hvgdk_mini.h
create mode 100644 include/hyperv/hvhdk.h
create mode 100644 include/hyperv/hvhdk_mini.h
--
2.34.1