RE: [PATCH 0/5] Add new headers for Hyper-V Dom0

Michael Kelley
2024-10-10T18:21:32Z

From: Nuno Das Neves <nunodasneves@linux.microsoft.com> 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/

>
> 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
>