mirror of
https://github.com/torvalds/linux.git
synced 2026-03-13 23:46:14 +01:00
hyperv-next for v6.19
-----BEGIN PGP SIGNATURE-----
iQFHBAABCgAxFiEEIbPD0id6easf0xsudhRwX5BBoF4FAmk2b0ITHHdlaS5saXVA
a2VybmVsLm9yZwAKCRB2FHBfkEGgXkefCACpUWTK0U0i47hXT+s4aA0T3sq6V3/T
+su9WnT3GPQ3BuRCRk51w6u9ADYt1EXtu8gRwq/wZiES9PJtz+9DmNuLT8nkkHXH
exbaRIBAiwLGg6QFC2VpbQzeHLp7qeko0MsLWyMiVPkw+lw9QPqcLKVEWuzPZfOn
UCkPB+XpzZg9Ft4vKRjXLyUMpwKzkqJw/aiXMfwonuaelcrzLw0hkzO3/I+eKRHv
JKxaHCwLgrPZyGCJpWtwiLxgu0DKLeDDhj0WSqDz/kUNhjo/GEshLA25UQJUdzI0
O+tFN9my7SZSYtq7fGoyfo16mAsLaXh0oYuwP8UnR4CDm4UF4JB4QTsM
=laZR
-----END PGP SIGNATURE-----
Merge tag 'hyperv-next-signed-20251207' of git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux
Pull hyperv updates from Wei Liu:
- Enhancements to Linux as the root partition for Microsoft Hypervisor:
- Support a new mode called L1VH, which allows Linux to drive the
hypervisor running the Azure Host directly
- Support for MSHV crash dump collection
- Allow Linux's memory management subsystem to better manage guest
memory regions
- Fix issues that prevented a clean shutdown of the whole system on
bare metal and nested configurations
- ARM64 support for the MSHV driver
- Various other bug fixes and cleanups
- Add support for Confidential VMBus for Linux guest on Hyper-V
- Secure AVIC support for Linux guests on Hyper-V
- Add the mshv_vtl driver to allow Linux to run as the secure kernel in
a higher virtual trust level for Hyper-V
* tag 'hyperv-next-signed-20251207' of git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux: (58 commits)
mshv: Cleanly shutdown root partition with MSHV
mshv: Use reboot notifier to configure sleep state
mshv: Add definitions for MSHV sleep state configuration
mshv: Add support for movable memory regions
mshv: Add refcount and locking to mem regions
mshv: Fix huge page handling in memory region traversal
mshv: Move region management to mshv_regions.c
mshv: Centralize guest memory region destruction
mshv: Refactor and rename memory region handling functions
mshv: adjust interrupt control structure for ARM64
Drivers: hv: use kmalloc_array() instead of kmalloc()
mshv: Add ioctl for self targeted passthrough hvcalls
Drivers: hv: Introduce mshv_vtl driver
Drivers: hv: Export some symbols for mshv_vtl
static_call: allow using STATIC_CALL_TRAMP_STR() from assembly
mshv: Extend create partition ioctl to support cpu features
mshv: Allow mappings that overlap in uaddr
mshv: Fix create memory region overlap check
mshv: add WQ_PERCPU to alloc_workqueue users
Drivers: hv: Use kmalloc_array() instead of kmalloc()
...
This commit is contained in:
commit
feb06d2690
42 changed files with 5013 additions and 702 deletions
|
|
@ -26,6 +26,7 @@ enum {
|
|||
MSHV_PT_BIT_LAPIC,
|
||||
MSHV_PT_BIT_X2APIC,
|
||||
MSHV_PT_BIT_GPA_SUPER_PAGES,
|
||||
MSHV_PT_BIT_CPU_AND_XSAVE_FEATURES,
|
||||
MSHV_PT_BIT_COUNT,
|
||||
};
|
||||
|
||||
|
|
@ -41,6 +42,8 @@ enum {
|
|||
* @pt_flags: Bitmask of 1 << MSHV_PT_BIT_*
|
||||
* @pt_isolation: MSHV_PT_ISOLATION_*
|
||||
*
|
||||
* This is the initial/v1 version for backward compatibility.
|
||||
*
|
||||
* Returns a file descriptor to act as a handle to a guest partition.
|
||||
* At this point the partition is not yet initialized in the hypervisor.
|
||||
* Some operations must be done with the partition in this state, e.g. setting
|
||||
|
|
@ -52,6 +55,37 @@ struct mshv_create_partition {
|
|||
__u64 pt_isolation;
|
||||
};
|
||||
|
||||
#define MSHV_NUM_CPU_FEATURES_BANKS 2
|
||||
|
||||
/**
|
||||
* struct mshv_create_partition_v2
|
||||
*
|
||||
* This is extended version of the above initial MSHV_CREATE_PARTITION
|
||||
* ioctl and allows for following additional parameters:
|
||||
*
|
||||
* @pt_num_cpu_fbanks: Must be set to MSHV_NUM_CPU_FEATURES_BANKS.
|
||||
* @pt_cpu_fbanks: Disabled processor feature banks array.
|
||||
* @pt_disabled_xsave: Disabled xsave feature bits.
|
||||
*
|
||||
* pt_cpu_fbanks and pt_disabled_xsave are passed through as-is to the create
|
||||
* partition hypercall.
|
||||
*
|
||||
* Returns : same as above original mshv_create_partition
|
||||
*/
|
||||
struct mshv_create_partition_v2 {
|
||||
__u64 pt_flags;
|
||||
__u64 pt_isolation;
|
||||
__u16 pt_num_cpu_fbanks;
|
||||
__u8 pt_rsvd[6]; /* MBZ */
|
||||
__u64 pt_cpu_fbanks[MSHV_NUM_CPU_FEATURES_BANKS];
|
||||
__u64 pt_rsvd1[2]; /* MBZ */
|
||||
#if defined(__x86_64__)
|
||||
__u64 pt_disabled_xsave;
|
||||
#else
|
||||
__u64 pt_rsvd2; /* MBZ */
|
||||
#endif
|
||||
} __packed;
|
||||
|
||||
/* /dev/mshv */
|
||||
#define MSHV_CREATE_PARTITION _IOW(MSHV_IOCTL, 0x00, struct mshv_create_partition)
|
||||
|
||||
|
|
@ -89,7 +123,7 @@ enum {
|
|||
* @rsvd: MBZ
|
||||
*
|
||||
* Map or unmap a region of userspace memory to Guest Physical Addresses (GPA).
|
||||
* Mappings can't overlap in GPA space or userspace.
|
||||
* Mappings can't overlap in GPA space.
|
||||
* To unmap, these fields must match an existing mapping.
|
||||
*/
|
||||
struct mshv_user_mem_region {
|
||||
|
|
@ -288,4 +322,84 @@ struct mshv_get_set_vp_state {
|
|||
* #define MSHV_ROOT_HVCALL _IOWR(MSHV_IOCTL, 0x07, struct mshv_root_hvcall)
|
||||
*/
|
||||
|
||||
/* Structure definitions, macros and IOCTLs for mshv_vtl */
|
||||
|
||||
#define MSHV_CAP_CORE_API_STABLE 0x0
|
||||
#define MSHV_CAP_REGISTER_PAGE 0x1
|
||||
#define MSHV_CAP_VTL_RETURN_ACTION 0x2
|
||||
#define MSHV_CAP_DR6_SHARED 0x3
|
||||
#define MSHV_MAX_RUN_MSG_SIZE 256
|
||||
|
||||
struct mshv_vp_registers {
|
||||
__u32 count; /* supports only 1 register at a time */
|
||||
__u32 reserved; /* Reserved for alignment or future use */
|
||||
__u64 regs_ptr; /* pointer to struct hv_register_assoc */
|
||||
};
|
||||
|
||||
struct mshv_vtl_set_eventfd {
|
||||
__s32 fd;
|
||||
__u32 flag;
|
||||
};
|
||||
|
||||
struct mshv_vtl_signal_event {
|
||||
__u32 connection_id;
|
||||
__u32 flag;
|
||||
};
|
||||
|
||||
struct mshv_vtl_sint_post_msg {
|
||||
__u64 message_type;
|
||||
__u32 connection_id;
|
||||
__u32 payload_size; /* Must not exceed HV_MESSAGE_PAYLOAD_BYTE_COUNT */
|
||||
__u64 payload_ptr; /* pointer to message payload (bytes) */
|
||||
};
|
||||
|
||||
struct mshv_vtl_ram_disposition {
|
||||
__u64 start_pfn;
|
||||
__u64 last_pfn;
|
||||
};
|
||||
|
||||
struct mshv_vtl_set_poll_file {
|
||||
__u32 cpu;
|
||||
__u32 fd;
|
||||
};
|
||||
|
||||
struct mshv_vtl_hvcall_setup {
|
||||
__u64 bitmap_array_size; /* stores number of bytes */
|
||||
__u64 allow_bitmap_ptr;
|
||||
};
|
||||
|
||||
struct mshv_vtl_hvcall {
|
||||
__u64 control; /* Hypercall control code */
|
||||
__u64 input_size; /* Size of the input data */
|
||||
__u64 input_ptr; /* Pointer to the input struct */
|
||||
__u64 status; /* Status of the hypercall (output) */
|
||||
__u64 output_size; /* Size of the output data */
|
||||
__u64 output_ptr; /* Pointer to the output struct */
|
||||
};
|
||||
|
||||
struct mshv_sint_mask {
|
||||
__u8 mask;
|
||||
__u8 reserved[7];
|
||||
};
|
||||
|
||||
/* /dev/mshv device IOCTL */
|
||||
#define MSHV_CHECK_EXTENSION _IOW(MSHV_IOCTL, 0x00, __u32)
|
||||
|
||||
/* vtl device */
|
||||
#define MSHV_CREATE_VTL _IOR(MSHV_IOCTL, 0x1D, char)
|
||||
#define MSHV_ADD_VTL0_MEMORY _IOW(MSHV_IOCTL, 0x21, struct mshv_vtl_ram_disposition)
|
||||
#define MSHV_SET_POLL_FILE _IOW(MSHV_IOCTL, 0x25, struct mshv_vtl_set_poll_file)
|
||||
#define MSHV_RETURN_TO_LOWER_VTL _IO(MSHV_IOCTL, 0x27)
|
||||
#define MSHV_GET_VP_REGISTERS _IOWR(MSHV_IOCTL, 0x05, struct mshv_vp_registers)
|
||||
#define MSHV_SET_VP_REGISTERS _IOW(MSHV_IOCTL, 0x06, struct mshv_vp_registers)
|
||||
|
||||
/* VMBus device IOCTLs */
|
||||
#define MSHV_SINT_SIGNAL_EVENT _IOW(MSHV_IOCTL, 0x22, struct mshv_vtl_signal_event)
|
||||
#define MSHV_SINT_POST_MESSAGE _IOW(MSHV_IOCTL, 0x23, struct mshv_vtl_sint_post_msg)
|
||||
#define MSHV_SINT_SET_EVENTFD _IOW(MSHV_IOCTL, 0x24, struct mshv_vtl_set_eventfd)
|
||||
#define MSHV_SINT_PAUSE_MESSAGE_STREAM _IOW(MSHV_IOCTL, 0x25, struct mshv_sint_mask)
|
||||
|
||||
/* hv_hvcall device */
|
||||
#define MSHV_HVCALL_SETUP _IOW(MSHV_IOCTL, 0x1E, struct mshv_vtl_hvcall_setup)
|
||||
#define MSHV_HVCALL _IOWR(MSHV_IOCTL, 0x1F, struct mshv_vtl_hvcall)
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue