[PATCH 00/15] Introduce /dev/mshv drivers

Nuno Das Neves nunodasneves at linux.microsoft.com
Thu Jul 27 14:05:34 PDT 2023


Apologies, it seems patch 15 bouncing from some mailing lists.
As a workaround, here is a link to the patch on github while we figure
out a solution:
https://github.com/NunoDasNeves/linux/commit/54329d18d68b0cbff4f1e0aeba00bc6dd9a21288

On 7/27/2023 12:54 PM, Nuno Das Neves wrote:
> This series introduces support for creating and running guest machines
> while running on the Microsoft Hypervisor. [0]
> This is done via an IOCTL interface accessed through /dev/mshv, similar to
> /dev/kvm. Another series introducing this support was previously posted.
> [1]
> 
> These interfaces support VMMs running in:
> 1. The root patition - provided in the mshv_root module, and
> 2. VTL 2 - provided in the mshv_vtl module [2]
> 
> Patches breakdown
> -----------------
> The first 7 patches are refactoring and adding some helper functions.
> They provide some benefit on their own and could be applied independently
> as cleanup patches.
> 
> The following 5 patches just set things up for the driver code to come.
> These are very small. They are separated so that the remaining patches are
> more self-contained.
> 
> The final 3 patches are the meat of the series:
> - Patch 13 contains new header files used by the driver.
>   These are designed to mirror the ABI headers exported by Hyper-V. This is
>   done to avoid polluting hyperv-tlfs.h and help track changes to the ABIs
>   that are still unstable. (See FAQ below).
> - Patch 14 conditionally includes these new header files into mshyperv.h
>   and linux/hyperv.h, in order to be able to use these files in the new
>   drivers while remaining independent from hyperv-tlfs.h.
> - Patch 15 contains the new driver code located in drivers/hv. This is a
>   large amount of code and new files, but it is mostly self-contained and
>   all within drivers/hv - apart from the IOCTL interface itself in uapi.
> 
> FAQ on include/uapi/hyperv/*.h
> ------------------------------
> Q:
> Why not just add these definitions to hyperv-tlfs.h?
> A:
> The intention of hyperv-tlfs.h is to contain stable definitions documented
> in the public TLFS document. These new definitions don't fit that criteria,
> so they should be separate.
> 
> Q:
> Why are these files named hvgdk.h, hvgdk_mini.h, hvhdk.h and hvhdk_mini.h?
> A:
> The precise meaning of the names reflects conventions used internally at
> Microsoft.
> Naming them this way makes it easy to find where particular Hyper-V
> definitions come from, and check their correctness.
> It also facilitates the future work of automatically generating these files.
> 
> Q:
> Why are they in uapi?
> A:
> In short, to keep things simple. There are many definitions needed in both
> the kernel and the VMM in userspace. Separating them doesn't serve much
> purpose, and makes it more laborious to import definitions from Hyper-V
> code.
> 
> Q:
> The new headers redefine many things that are already in hyperv-tlfs.h - why?
> A:
> Some definitions are extended compared to what is documented in the TLFS.
> In order to avoid adding undocumented or unstable definitions to hyperv-tlfs.h,
> the new headers must compile independently.
> Therefore, the new headers must redefine many things in hyperv-tlfs.h in order
> to compile.
> 
> --------------------------
> [0] "Hyper-V" is more well-known, but it really refers to the whole stack
>     including the hypervisor and other components that run in Windows
>     kernel and userspace.
> [1] Previous /dev/mshv patch series and discussion:
>     https://lore.kernel.org/linux-hyperv/1632853875-20261-1-git-send-email-nunodasneves@linux.microsoft.com/
> [2] Virtual Secure Mode (VSM) and Virtual Trust Levels (VTL):
>     https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/tlfs/vsm
> 
> Nuno Das Neves (15):
>   hyperv-tlfs: Change shared HV_REGISTER_* defines to HV_MSR_*
>   mshyperv: Introduce hv_get_hypervisor_version
>   mshyperv: Introduce numa_node_to_proximity_domain_info
>   asm-generic/mshyperv: Introduce hv_recommend_using_aeoi()
>   hyperv: Move hv_connection_id to hyperv-tlfs
>   hyperv-tlfs: Introduce hv_status_to_string and hv_status_to_errno
>   Drivers: hv: Move hv_call_deposit_pages and hv_call_create_vp to
>     common code
>   Drivers: hv: Introduce per-cpu event ring tail
>   Drivers: hv: Introduce hv_output_arg_exists in hv_common
>   x86: hyperv: Add mshv_handler irq handler and setup function
>   Drivers: hv: export vmbus_isr, hv_context and hv_post_message
>   Documentation: Reserve ioctl number for mshv driver
>   uapi: hyperv: Add mshv driver headers hvhdk.h, hvhdk_mini.h, hvgdk.h,
>     hvgdk_mini.h
>   asm-generic: hyperv: Use mshv headers conditionally. Add
>     asm-generic/hyperv-defs.h
>   Drivers: hv: Add modules to expose /dev/mshv to VMMs running on
>     Hyper-V
> 
>  .../userspace-api/ioctl/ioctl-number.rst      |    2 +
>  arch/arm64/hyperv/mshyperv.c                  |   23 +-
>  arch/arm64/include/asm/hyperv-tlfs.h          |   25 +
>  arch/arm64/include/asm/mshyperv.h             |    2 +-
>  arch/x86/hyperv/hv_init.c                     |    2 +-
>  arch/x86/hyperv/hv_proc.c                     |  166 +-
>  arch/x86/include/asm/hyperv-tlfs.h            |  137 +-
>  arch/x86/include/asm/mshyperv.h               |   13 +-
>  arch/x86/kernel/cpu/mshyperv.c                |   71 +-
>  drivers/acpi/numa/srat.c                      |    1 +
>  drivers/clocksource/hyperv_timer.c            |   24 +-
>  drivers/hv/Kconfig                            |   54 +
>  drivers/hv/Makefile                           |   21 +
>  drivers/hv/hv.c                               |   46 +-
>  drivers/hv/hv_call.c                          |  119 +
>  drivers/hv/hv_common.c                        |  225 +-
>  drivers/hv/hyperv_vmbus.h                     |    2 +-
>  drivers/hv/mshv.h                             |  156 ++
>  drivers/hv/mshv_eventfd.c                     |  758 +++++++
>  drivers/hv/mshv_eventfd.h                     |   80 +
>  drivers/hv/mshv_main.c                        |  208 ++
>  drivers/hv/mshv_msi.c                         |  129 ++
>  drivers/hv/mshv_portid_table.c                |   84 +
>  drivers/hv/mshv_root.h                        |  194 ++
>  drivers/hv/mshv_root_hv_call.c                | 1064 +++++++++
>  drivers/hv/mshv_root_main.c                   | 1964 +++++++++++++++++
>  drivers/hv/mshv_synic.c                       |  689 ++++++
>  drivers/hv/mshv_vtl.h                         |   52 +
>  drivers/hv/mshv_vtl_main.c                    | 1541 +++++++++++++
>  drivers/hv/vmbus_drv.c                        |    3 +-
>  drivers/hv/xfer_to_guest.c                    |   28 +
>  include/asm-generic/hyperv-defs.h             |   26 +
>  include/asm-generic/hyperv-tlfs.h             |   77 +-
>  include/asm-generic/mshyperv.h                |   76 +-
>  include/linux/hyperv.h                        |   11 +-
>  include/uapi/hyperv/hvgdk.h                   |   41 +
>  include/uapi/hyperv/hvgdk_mini.h              | 1077 +++++++++
>  include/uapi/hyperv/hvhdk.h                   | 1352 ++++++++++++
>  include/uapi/hyperv/hvhdk_mini.h              |  164 ++
>  include/uapi/linux/mshv.h                     |  298 +++
>  40 files changed, 10653 insertions(+), 352 deletions(-)
>  create mode 100644 drivers/hv/hv_call.c
>  create mode 100644 drivers/hv/mshv.h
>  create mode 100644 drivers/hv/mshv_eventfd.c
>  create mode 100644 drivers/hv/mshv_eventfd.h
>  create mode 100644 drivers/hv/mshv_main.c
>  create mode 100644 drivers/hv/mshv_msi.c
>  create mode 100644 drivers/hv/mshv_portid_table.c
>  create mode 100644 drivers/hv/mshv_root.h
>  create mode 100644 drivers/hv/mshv_root_hv_call.c
>  create mode 100644 drivers/hv/mshv_root_main.c
>  create mode 100644 drivers/hv/mshv_synic.c
>  create mode 100644 drivers/hv/mshv_vtl.h
>  create mode 100644 drivers/hv/mshv_vtl_main.c
>  create mode 100644 drivers/hv/xfer_to_guest.c
>  create mode 100644 include/asm-generic/hyperv-defs.h
>  create mode 100644 include/uapi/hyperv/hvgdk.h
>  create mode 100644 include/uapi/hyperv/hvgdk_mini.h
>  create mode 100644 include/uapi/hyperv/hvhdk.h
>  create mode 100644 include/uapi/hyperv/hvhdk_mini.h
>  create mode 100644 include/uapi/linux/mshv.h
> 




More information about the linux-arm-kernel mailing list