[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1605918637-12192-1-git-send-email-nunodasneves@linux.microsoft.com>
Date: Fri, 20 Nov 2020 16:30:19 -0800
From: Nuno Das Neves <nunodasneves@...ux.microsoft.com>
To: linux-hyperv@...r.kernel.org
Cc: virtualization@...ts.linux-foundation.org,
linux-kernel@...r.kernel.org, mikelley@...rosoft.com,
viremana@...ux.microsoft.com, sunilmut@...rosoft.com,
nunodasneves@...ux.microsoft.com, wei.liu@...nel.org,
ligrassi@...rosoft.com, kys@...rosoft.com
Subject: [RFC PATCH 00/18] Microsoft Hypervisor root partition ioctl interface
This patch series provides a userspace interface for creating and running guest
virtual machines while running on the Microsoft Hypervisor [0].
Since managing guest machines can only be done when Linux is the root partition,
this series depends on the RFC already posted by Wei Liu:
https://lore.kernel.org/linux-hyperv/20201105165814.29233-1-wei.liu@kernel.org/T/#t
The first two patches provide some helpers for converting hypervisor status
codes to linux error codes, and easily printing hypervisor status codes to dmesg
for debugging.
Hyper-V related headers asm-generic/hyperv-tlfs.h and x86/asm/hyperv-tlfs.h are
split into uapi and non-uapi. The uapi versions contain structures used in both
the ioctl interface and the kernel.
The mshv API is introduced in virt/mshv/mshv_main.c. As each interface is
introduced, documentation is added in Documentation/virt/mshv/api.rst.
The API is file-desciptor based, like KVM. The entry point is /dev/mshv.
/dev/mshv ioctls:
MSHV_REQUEST_VERSION
MSHV_CREATE_PARTITION
Partition (vm) ioctls:
MSHV_MAP_GUEST_MEMORY, MSHV_UNMAP_GUEST_MEMORY
MSHV_INSTALL_INTERCEPT
MSHV_ASSERT_INTERRUPT
MSHV_GET_PARTITION_PROPERTY, MSHV_SET_PARTITION_PROPERTY
MSHV_CREATE_VP
Vp (vcpu) ioctls:
MSHV_GET_VP_REGISTERS, MSHV_SET_VP_REGISTERS
MSHV_RUN_VP
MSHV_GET_VP_STATE, MSHV_SET_VP_STATE
mmap() (register page)
[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.
Nuno Das Neves (18):
x86/hyperv: convert hyperv statuses to linux error codes
asm-generic/hyperv: convert hyperv statuses to strings
virt/mshv: minimal mshv module (/dev/mshv/)
virt/mshv: request version ioctl
virt/mshv: create partition ioctl
virt/mshv: create, initialize, finalize, delete partition hypercalls
virt/mshv: withdraw memory hypercall
virt/mshv: map and unmap guest memory
virt/mshv: create vcpu ioctl
virt/mshv: get and set vcpu registers ioctls
virt/mshv: set up synic pages for intercept messages
virt/mshv: run vp ioctl and isr
virt/mshv: install intercept ioctl
virt/mshv: assert interrupt ioctl
virt/mshv: get and set vp state ioctls
virt/mshv: mmap vp register page
virt/mshv: get and set partition property ioctls
virt/mshv: Add enlightenment bits to create partition ioctl
.../userspace-api/ioctl/ioctl-number.rst | 2 +
Documentation/virt/mshv/api.rst | 173 ++
arch/x86/Kconfig | 2 +
arch/x86/hyperv/Kconfig | 22 +
arch/x86/hyperv/Makefile | 4 +
arch/x86/hyperv/hv_init.c | 2 +-
arch/x86/hyperv/hv_proc.c | 40 +-
arch/x86/include/asm/hyperv-tlfs.h | 44 +-
arch/x86/include/asm/mshyperv.h | 1 +
arch/x86/include/uapi/asm/hyperv-tlfs.h | 1312 +++++++++++
arch/x86/kernel/cpu/mshyperv.c | 16 +
include/asm-generic/hyperv-tlfs.h | 324 ++-
include/asm-generic/mshyperv.h | 3 +
include/linux/mshv.h | 61 +
include/uapi/asm-generic/hyperv-tlfs.h | 160 ++
include/uapi/linux/mshv.h | 109 +
virt/mshv/mshv_main.c | 2054 +++++++++++++++++
17 files changed, 4178 insertions(+), 151 deletions(-)
create mode 100644 Documentation/virt/mshv/api.rst
create mode 100644 arch/x86/hyperv/Kconfig
create mode 100644 arch/x86/include/uapi/asm/hyperv-tlfs.h
create mode 100644 include/linux/mshv.h
create mode 100644 include/uapi/asm-generic/hyperv-tlfs.h
create mode 100644 include/uapi/linux/mshv.h
create mode 100644 virt/mshv/mshv_main.c
--
2.25.1
Powered by blists - more mailing lists