diff mbox series

[v2,1/2] linux-headers: Update with vfio_ap IRQ index mapping

Message ID 20230602141125.448833-2-akrowiak@linux.ibm.com (mailing list archive)
State New, archived
Headers show
Series s390x/ap: fix hang when mdev attached to guest is removed | expand

Commit Message

Anthony Krowiak June 2, 2023, 2:11 p.m. UTC
Note: This is a placeholder patch that includes unmerged uapi changes.

Signed-off-by: Tony Krowiak <akrowiak@linux.ibm.com>
Link: https://lore.kernel.org/qemu-devel/20230530225544.280031-1-akrowiak@linux.ibm.com/
---
 include/standard-headers/linux/const.h        |  2 +-
 include/standard-headers/linux/virtio_blk.h   | 18 +++----
 .../standard-headers/linux/virtio_config.h    |  6 +++
 include/standard-headers/linux/virtio_net.h   |  1 +
 linux-headers/asm-arm64/kvm.h                 | 33 ++++++++++++
 linux-headers/asm-riscv/kvm.h                 | 53 ++++++++++++++++++-
 linux-headers/asm-riscv/unistd.h              |  9 ++++
 linux-headers/asm-s390/unistd_32.h            |  1 +
 linux-headers/asm-s390/unistd_64.h            |  1 +
 linux-headers/asm-x86/kvm.h                   |  3 ++
 linux-headers/linux/const.h                   |  2 +-
 linux-headers/linux/kvm.h                     | 12 +++--
 linux-headers/linux/psp-sev.h                 |  7 +++
 linux-headers/linux/userfaultfd.h             | 17 +++++-
 linux-headers/linux/vfio.h                    |  9 ++++
 15 files changed, 158 insertions(+), 16 deletions(-)

Comments

Cédric Le Goater July 3, 2023, 4:31 p.m. UTC | #1
On 6/2/23 16:11, Tony Krowiak wrote:
> Note: This is a placeholder patch that includes unmerged uapi changes.
> 
> Signed-off-by: Tony Krowiak <akrowiak@linux.ibm.com>
> Link: https://lore.kernel.org/qemu-devel/20230530225544.280031-1-akrowiak@linux.ibm.com/

I am preparing a vfio-next tree including these changes plus a linux-headers
update. I am just waiting for the 6.5-rc1 tag to be pushed.

Thanks,

C.

> ---
>   include/standard-headers/linux/const.h        |  2 +-
>   include/standard-headers/linux/virtio_blk.h   | 18 +++----
>   .../standard-headers/linux/virtio_config.h    |  6 +++
>   include/standard-headers/linux/virtio_net.h   |  1 +
>   linux-headers/asm-arm64/kvm.h                 | 33 ++++++++++++
>   linux-headers/asm-riscv/kvm.h                 | 53 ++++++++++++++++++-
>   linux-headers/asm-riscv/unistd.h              |  9 ++++
>   linux-headers/asm-s390/unistd_32.h            |  1 +
>   linux-headers/asm-s390/unistd_64.h            |  1 +
>   linux-headers/asm-x86/kvm.h                   |  3 ++
>   linux-headers/linux/const.h                   |  2 +-
>   linux-headers/linux/kvm.h                     | 12 +++--
>   linux-headers/linux/psp-sev.h                 |  7 +++
>   linux-headers/linux/userfaultfd.h             | 17 +++++-
>   linux-headers/linux/vfio.h                    |  9 ++++
>   15 files changed, 158 insertions(+), 16 deletions(-)
> 
> diff --git a/include/standard-headers/linux/const.h b/include/standard-headers/linux/const.h
> index 5e4898725168..1eb84b5087f8 100644
> --- a/include/standard-headers/linux/const.h
> +++ b/include/standard-headers/linux/const.h
> @@ -28,7 +28,7 @@
>   #define _BITUL(x)	(_UL(1) << (x))
>   #define _BITULL(x)	(_ULL(1) << (x))
>   
> -#define __ALIGN_KERNEL(x, a)		__ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1)
> +#define __ALIGN_KERNEL(x, a)		__ALIGN_KERNEL_MASK(x, (__typeof__(x))(a) - 1)
>   #define __ALIGN_KERNEL_MASK(x, mask)	(((x) + (mask)) & ~(mask))
>   
>   #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
> diff --git a/include/standard-headers/linux/virtio_blk.h b/include/standard-headers/linux/virtio_blk.h
> index 7155b1a4701b..d7be3cf5e42f 100644
> --- a/include/standard-headers/linux/virtio_blk.h
> +++ b/include/standard-headers/linux/virtio_blk.h
> @@ -138,11 +138,11 @@ struct virtio_blk_config {
>   
>   	/* Zoned block device characteristics (if VIRTIO_BLK_F_ZONED) */
>   	struct virtio_blk_zoned_characteristics {
> -		uint32_t zone_sectors;
> -		uint32_t max_open_zones;
> -		uint32_t max_active_zones;
> -		uint32_t max_append_sectors;
> -		uint32_t write_granularity;
> +		__virtio32 zone_sectors;
> +		__virtio32 max_open_zones;
> +		__virtio32 max_active_zones;
> +		__virtio32 max_append_sectors;
> +		__virtio32 write_granularity;
>   		uint8_t model;
>   		uint8_t unused2[3];
>   	} zoned;
> @@ -239,11 +239,11 @@ struct virtio_blk_outhdr {
>    */
>   struct virtio_blk_zone_descriptor {
>   	/* Zone capacity */
> -	uint64_t z_cap;
> +	__virtio64 z_cap;
>   	/* The starting sector of the zone */
> -	uint64_t z_start;
> +	__virtio64 z_start;
>   	/* Zone write pointer position in sectors */
> -	uint64_t z_wp;
> +	__virtio64 z_wp;
>   	/* Zone type */
>   	uint8_t z_type;
>   	/* Zone state */
> @@ -252,7 +252,7 @@ struct virtio_blk_zone_descriptor {
>   };
>   
>   struct virtio_blk_zone_report {
> -	uint64_t nr_zones;
> +	__virtio64 nr_zones;
>   	uint8_t reserved[56];
>   	struct virtio_blk_zone_descriptor zones[];
>   };
> diff --git a/include/standard-headers/linux/virtio_config.h b/include/standard-headers/linux/virtio_config.h
> index 965ee6ae237e..8a7d0dc8b007 100644
> --- a/include/standard-headers/linux/virtio_config.h
> +++ b/include/standard-headers/linux/virtio_config.h
> @@ -97,6 +97,12 @@
>    */
>   #define VIRTIO_F_SR_IOV			37
>   
> +/*
> + * This feature indicates that the driver passes extra data (besides
> + * identifying the virtqueue) in its device notifications.
> + */
> +#define VIRTIO_F_NOTIFICATION_DATA	38
> +
>   /*
>    * This feature indicates that the driver can reset a queue individually.
>    */
> diff --git a/include/standard-headers/linux/virtio_net.h b/include/standard-headers/linux/virtio_net.h
> index c0e797067aae..2325485f2ca8 100644
> --- a/include/standard-headers/linux/virtio_net.h
> +++ b/include/standard-headers/linux/virtio_net.h
> @@ -61,6 +61,7 @@
>   #define VIRTIO_NET_F_GUEST_USO6	55	/* Guest can handle USOv6 in. */
>   #define VIRTIO_NET_F_HOST_USO	56	/* Host can handle USO in. */
>   #define VIRTIO_NET_F_HASH_REPORT  57	/* Supports hash report */
> +#define VIRTIO_NET_F_GUEST_HDRLEN  59	/* Guest provides the exact hdr_len value. */
>   #define VIRTIO_NET_F_RSS	  60	/* Supports RSS RX steering */
>   #define VIRTIO_NET_F_RSC_EXT	  61	/* extended coalescing info */
>   #define VIRTIO_NET_F_STANDBY	  62	/* Act as standby for another device
> diff --git a/linux-headers/asm-arm64/kvm.h b/linux-headers/asm-arm64/kvm.h
> index d7e7bb885e20..38e5957526c2 100644
> --- a/linux-headers/asm-arm64/kvm.h
> +++ b/linux-headers/asm-arm64/kvm.h
> @@ -198,6 +198,15 @@ struct kvm_arm_copy_mte_tags {
>   	__u64 reserved[2];
>   };
>   
> +/*
> + * Counter/Timer offset structure. Describe the virtual/physical offset.
> + * To be used with KVM_ARM_SET_COUNTER_OFFSET.
> + */
> +struct kvm_arm_counter_offset {
> +	__u64 counter_offset;
> +	__u64 reserved;
> +};
> +
>   #define KVM_ARM_TAGS_TO_GUEST		0
>   #define KVM_ARM_TAGS_FROM_GUEST		1
>   
> @@ -363,6 +372,10 @@ enum {
>   	KVM_REG_ARM_VENDOR_HYP_BIT_PTP		= 1,
>   };
>   
> +/* Device Control API on vm fd */
> +#define KVM_ARM_VM_SMCCC_CTRL		0
> +#define   KVM_ARM_VM_SMCCC_FILTER	0
> +
>   /* Device Control API: ARM VGIC */
>   #define KVM_DEV_ARM_VGIC_GRP_ADDR	0
>   #define KVM_DEV_ARM_VGIC_GRP_DIST_REGS	1
> @@ -402,6 +415,8 @@ enum {
>   #define KVM_ARM_VCPU_TIMER_CTRL		1
>   #define   KVM_ARM_VCPU_TIMER_IRQ_VTIMER		0
>   #define   KVM_ARM_VCPU_TIMER_IRQ_PTIMER		1
> +#define   KVM_ARM_VCPU_TIMER_IRQ_HVTIMER	2
> +#define   KVM_ARM_VCPU_TIMER_IRQ_HPTIMER	3
>   #define KVM_ARM_VCPU_PVTIME_CTRL	2
>   #define   KVM_ARM_VCPU_PVTIME_IPA	0
>   
> @@ -458,6 +473,24 @@ enum {
>   /* run->fail_entry.hardware_entry_failure_reason codes. */
>   #define KVM_EXIT_FAIL_ENTRY_CPU_UNSUPPORTED	(1ULL << 0)
>   
> +enum kvm_smccc_filter_action {
> +	KVM_SMCCC_FILTER_HANDLE = 0,
> +	KVM_SMCCC_FILTER_DENY,
> +	KVM_SMCCC_FILTER_FWD_TO_USER,
> +
> +};
> +
> +struct kvm_smccc_filter {
> +	__u32 base;
> +	__u32 nr_functions;
> +	__u8 action;
> +	__u8 pad[15];
> +};
> +
> +/* arm64-specific KVM_EXIT_HYPERCALL flags */
> +#define KVM_HYPERCALL_EXIT_SMC		(1U << 0)
> +#define KVM_HYPERCALL_EXIT_16BIT	(1U << 1)
> +
>   #endif
>   
>   #endif /* __ARM_KVM_H__ */
> diff --git a/linux-headers/asm-riscv/kvm.h b/linux-headers/asm-riscv/kvm.h
> index 92af6f3f057c..f92790c9481a 100644
> --- a/linux-headers/asm-riscv/kvm.h
> +++ b/linux-headers/asm-riscv/kvm.h
> @@ -12,6 +12,7 @@
>   #ifndef __ASSEMBLY__
>   
>   #include <linux/types.h>
> +#include <asm/bitsperlong.h>
>   #include <asm/ptrace.h>
>   
>   #define __KVM_HAVE_READONLY_MEM
> @@ -52,6 +53,7 @@ struct kvm_riscv_config {
>   	unsigned long mvendorid;
>   	unsigned long marchid;
>   	unsigned long mimpid;
> +	unsigned long zicboz_block_size;
>   };
>   
>   /* CORE registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */
> @@ -64,7 +66,7 @@ struct kvm_riscv_core {
>   #define KVM_RISCV_MODE_S	1
>   #define KVM_RISCV_MODE_U	0
>   
> -/* CSR registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */
> +/* General CSR registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */
>   struct kvm_riscv_csr {
>   	unsigned long sstatus;
>   	unsigned long sie;
> @@ -78,6 +80,17 @@ struct kvm_riscv_csr {
>   	unsigned long scounteren;
>   };
>   
> +/* AIA CSR registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */
> +struct kvm_riscv_aia_csr {
> +	unsigned long siselect;
> +	unsigned long iprio1;
> +	unsigned long iprio2;
> +	unsigned long sieh;
> +	unsigned long siph;
> +	unsigned long iprio1h;
> +	unsigned long iprio2h;
> +};
> +
>   /* TIMER registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */
>   struct kvm_riscv_timer {
>   	__u64 frequency;
> @@ -105,9 +118,29 @@ enum KVM_RISCV_ISA_EXT_ID {
>   	KVM_RISCV_ISA_EXT_SVINVAL,
>   	KVM_RISCV_ISA_EXT_ZIHINTPAUSE,
>   	KVM_RISCV_ISA_EXT_ZICBOM,
> +	KVM_RISCV_ISA_EXT_ZICBOZ,
> +	KVM_RISCV_ISA_EXT_ZBB,
> +	KVM_RISCV_ISA_EXT_SSAIA,
>   	KVM_RISCV_ISA_EXT_MAX,
>   };
>   
> +/*
> + * SBI extension IDs specific to KVM. This is not the same as the SBI
> + * extension IDs defined by the RISC-V SBI specification.
> + */
> +enum KVM_RISCV_SBI_EXT_ID {
> +	KVM_RISCV_SBI_EXT_V01 = 0,
> +	KVM_RISCV_SBI_EXT_TIME,
> +	KVM_RISCV_SBI_EXT_IPI,
> +	KVM_RISCV_SBI_EXT_RFENCE,
> +	KVM_RISCV_SBI_EXT_SRST,
> +	KVM_RISCV_SBI_EXT_HSM,
> +	KVM_RISCV_SBI_EXT_PMU,
> +	KVM_RISCV_SBI_EXT_EXPERIMENTAL,
> +	KVM_RISCV_SBI_EXT_VENDOR,
> +	KVM_RISCV_SBI_EXT_MAX,
> +};
> +
>   /* Possible states for kvm_riscv_timer */
>   #define KVM_RISCV_TIMER_STATE_OFF	0
>   #define KVM_RISCV_TIMER_STATE_ON	1
> @@ -118,6 +151,8 @@ enum KVM_RISCV_ISA_EXT_ID {
>   /* If you need to interpret the index values, here is the key: */
>   #define KVM_REG_RISCV_TYPE_MASK		0x00000000FF000000
>   #define KVM_REG_RISCV_TYPE_SHIFT	24
> +#define KVM_REG_RISCV_SUBTYPE_MASK	0x0000000000FF0000
> +#define KVM_REG_RISCV_SUBTYPE_SHIFT	16
>   
>   /* Config registers are mapped as type 1 */
>   #define KVM_REG_RISCV_CONFIG		(0x01 << KVM_REG_RISCV_TYPE_SHIFT)
> @@ -131,8 +166,12 @@ enum KVM_RISCV_ISA_EXT_ID {
>   
>   /* Control and status registers are mapped as type 3 */
>   #define KVM_REG_RISCV_CSR		(0x03 << KVM_REG_RISCV_TYPE_SHIFT)
> +#define KVM_REG_RISCV_CSR_GENERAL	(0x0 << KVM_REG_RISCV_SUBTYPE_SHIFT)
> +#define KVM_REG_RISCV_CSR_AIA		(0x1 << KVM_REG_RISCV_SUBTYPE_SHIFT)
>   #define KVM_REG_RISCV_CSR_REG(name)	\
>   		(offsetof(struct kvm_riscv_csr, name) / sizeof(unsigned long))
> +#define KVM_REG_RISCV_CSR_AIA_REG(name)	\
> +	(offsetof(struct kvm_riscv_aia_csr, name) / sizeof(unsigned long))
>   
>   /* Timer registers are mapped as type 4 */
>   #define KVM_REG_RISCV_TIMER		(0x04 << KVM_REG_RISCV_TYPE_SHIFT)
> @@ -152,6 +191,18 @@ enum KVM_RISCV_ISA_EXT_ID {
>   /* ISA Extension registers are mapped as type 7 */
>   #define KVM_REG_RISCV_ISA_EXT		(0x07 << KVM_REG_RISCV_TYPE_SHIFT)
>   
> +/* SBI extension registers are mapped as type 8 */
> +#define KVM_REG_RISCV_SBI_EXT		(0x08 << KVM_REG_RISCV_TYPE_SHIFT)
> +#define KVM_REG_RISCV_SBI_SINGLE	(0x0 << KVM_REG_RISCV_SUBTYPE_SHIFT)
> +#define KVM_REG_RISCV_SBI_MULTI_EN	(0x1 << KVM_REG_RISCV_SUBTYPE_SHIFT)
> +#define KVM_REG_RISCV_SBI_MULTI_DIS	(0x2 << KVM_REG_RISCV_SUBTYPE_SHIFT)
> +#define KVM_REG_RISCV_SBI_MULTI_REG(__ext_id)	\
> +		((__ext_id) / __BITS_PER_LONG)
> +#define KVM_REG_RISCV_SBI_MULTI_MASK(__ext_id)	\
> +		(1UL << ((__ext_id) % __BITS_PER_LONG))
> +#define KVM_REG_RISCV_SBI_MULTI_REG_LAST	\
> +		KVM_REG_RISCV_SBI_MULTI_REG(KVM_RISCV_SBI_EXT_MAX - 1)
> +
>   #endif
>   
>   #endif /* __LINUX_KVM_RISCV_H */
> diff --git a/linux-headers/asm-riscv/unistd.h b/linux-headers/asm-riscv/unistd.h
> index 73d7cdd2ec49..950ab3fd4409 100644
> --- a/linux-headers/asm-riscv/unistd.h
> +++ b/linux-headers/asm-riscv/unistd.h
> @@ -43,3 +43,12 @@
>   #define __NR_riscv_flush_icache (__NR_arch_specific_syscall + 15)
>   #endif
>   __SYSCALL(__NR_riscv_flush_icache, sys_riscv_flush_icache)
> +
> +/*
> + * Allows userspace to query the kernel for CPU architecture and
> + * microarchitecture details across a given set of CPUs.
> + */
> +#ifndef __NR_riscv_hwprobe
> +#define __NR_riscv_hwprobe (__NR_arch_specific_syscall + 14)
> +#endif
> +__SYSCALL(__NR_riscv_hwprobe, sys_riscv_hwprobe)
> diff --git a/linux-headers/asm-s390/unistd_32.h b/linux-headers/asm-s390/unistd_32.h
> index 8e644d65f571..800f3adb2020 100644
> --- a/linux-headers/asm-s390/unistd_32.h
> +++ b/linux-headers/asm-s390/unistd_32.h
> @@ -419,6 +419,7 @@
>   #define __NR_landlock_create_ruleset 444
>   #define __NR_landlock_add_rule 445
>   #define __NR_landlock_restrict_self 446
> +#define __NR_memfd_secret 447
>   #define __NR_process_mrelease 448
>   #define __NR_futex_waitv 449
>   #define __NR_set_mempolicy_home_node 450
> diff --git a/linux-headers/asm-s390/unistd_64.h b/linux-headers/asm-s390/unistd_64.h
> index 51da542fec10..399a6059015e 100644
> --- a/linux-headers/asm-s390/unistd_64.h
> +++ b/linux-headers/asm-s390/unistd_64.h
> @@ -367,6 +367,7 @@
>   #define __NR_landlock_create_ruleset 444
>   #define __NR_landlock_add_rule 445
>   #define __NR_landlock_restrict_self 446
> +#define __NR_memfd_secret 447
>   #define __NR_process_mrelease 448
>   #define __NR_futex_waitv 449
>   #define __NR_set_mempolicy_home_node 450
> diff --git a/linux-headers/asm-x86/kvm.h b/linux-headers/asm-x86/kvm.h
> index 2937e7bf6982..2b3a8f7bd2c0 100644
> --- a/linux-headers/asm-x86/kvm.h
> +++ b/linux-headers/asm-x86/kvm.h
> @@ -557,4 +557,7 @@ struct kvm_pmu_event_filter {
>   #define KVM_VCPU_TSC_CTRL 0 /* control group for the timestamp counter (TSC) */
>   #define   KVM_VCPU_TSC_OFFSET 0 /* attribute for the TSC offset */
>   
> +/* x86-specific KVM_EXIT_HYPERCALL flags. */
> +#define KVM_EXIT_HYPERCALL_LONG_MODE	BIT(0)
> +
>   #endif /* _ASM_X86_KVM_H */
> diff --git a/linux-headers/linux/const.h b/linux-headers/linux/const.h
> index 5e4898725168..1eb84b5087f8 100644
> --- a/linux-headers/linux/const.h
> +++ b/linux-headers/linux/const.h
> @@ -28,7 +28,7 @@
>   #define _BITUL(x)	(_UL(1) << (x))
>   #define _BITULL(x)	(_ULL(1) << (x))
>   
> -#define __ALIGN_KERNEL(x, a)		__ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1)
> +#define __ALIGN_KERNEL(x, a)		__ALIGN_KERNEL_MASK(x, (__typeof__(x))(a) - 1)
>   #define __ALIGN_KERNEL_MASK(x, mask)	(((x) + (mask)) & ~(mask))
>   
>   #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
> diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h
> index 599de3c6e3aa..65b145b317ac 100644
> --- a/linux-headers/linux/kvm.h
> +++ b/linux-headers/linux/kvm.h
> @@ -341,8 +341,11 @@ struct kvm_run {
>   			__u64 nr;
>   			__u64 args[6];
>   			__u64 ret;
> -			__u32 longmode;
> -			__u32 pad;
> +
> +			union {
> +				__u32 longmode;
> +				__u64 flags;
> +			};
>   		} hypercall;
>   		/* KVM_EXIT_TPR_ACCESS */
>   		struct {
> @@ -1182,6 +1185,7 @@ struct kvm_ppc_resize_hpt {
>   #define KVM_CAP_S390_PROTECTED_ASYNC_DISABLE 224
>   #define KVM_CAP_DIRTY_LOG_RING_WITH_BITMAP 225
>   #define KVM_CAP_PMU_EVENT_MASKED_EVENTS 226
> +#define KVM_CAP_COUNTER_OFFSET 227
>   
>   #ifdef KVM_CAP_IRQ_ROUTING
>   
> @@ -1449,7 +1453,7 @@ struct kvm_vfio_spapr_tce {
>   #define KVM_CREATE_VCPU           _IO(KVMIO,   0x41)
>   #define KVM_GET_DIRTY_LOG         _IOW(KVMIO,  0x42, struct kvm_dirty_log)
>   #define KVM_SET_NR_MMU_PAGES      _IO(KVMIO,   0x44)
> -#define KVM_GET_NR_MMU_PAGES      _IO(KVMIO,   0x45)
> +#define KVM_GET_NR_MMU_PAGES      _IO(KVMIO,   0x45)  /* deprecated */
>   #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46, \
>   					struct kvm_userspace_memory_region)
>   #define KVM_SET_TSS_ADDR          _IO(KVMIO,   0x47)
> @@ -1541,6 +1545,8 @@ struct kvm_s390_ucas_mapping {
>   #define KVM_SET_PMU_EVENT_FILTER  _IOW(KVMIO,  0xb2, struct kvm_pmu_event_filter)
>   #define KVM_PPC_SVM_OFF		  _IO(KVMIO,  0xb3)
>   #define KVM_ARM_MTE_COPY_TAGS	  _IOR(KVMIO,  0xb4, struct kvm_arm_copy_mte_tags)
> +/* Available with KVM_CAP_COUNTER_OFFSET */
> +#define KVM_ARM_SET_COUNTER_OFFSET _IOW(KVMIO,  0xb5, struct kvm_arm_counter_offset)
>   
>   /* ioctl for vm fd */
>   #define KVM_CREATE_DEVICE	  _IOWR(KVMIO,  0xe0, struct kvm_create_device)
> diff --git a/linux-headers/linux/psp-sev.h b/linux-headers/linux/psp-sev.h
> index 51d8b3940e14..12ccb70099d4 100644
> --- a/linux-headers/linux/psp-sev.h
> +++ b/linux-headers/linux/psp-sev.h
> @@ -36,6 +36,13 @@ enum {
>    * SEV Firmware status code
>    */
>   typedef enum {
> +	/*
> +	 * This error code is not in the SEV spec. Its purpose is to convey that
> +	 * there was an error that prevented the SEV firmware from being called.
> +	 * The SEV API error codes are 16 bits, so the -1 value will not overlap
> +	 * with possible values from the specification.
> +	 */
> +	SEV_RET_NO_FW_CALL = -1,
>   	SEV_RET_SUCCESS = 0,
>   	SEV_RET_INVALID_PLATFORM_STATE,
>   	SEV_RET_INVALID_GUEST_STATE,
> diff --git a/linux-headers/linux/userfaultfd.h b/linux-headers/linux/userfaultfd.h
> index ba5d0df52fb8..14e402263a8a 100644
> --- a/linux-headers/linux/userfaultfd.h
> +++ b/linux-headers/linux/userfaultfd.h
> @@ -38,7 +38,8 @@
>   			   UFFD_FEATURE_MINOR_HUGETLBFS |	\
>   			   UFFD_FEATURE_MINOR_SHMEM |		\
>   			   UFFD_FEATURE_EXACT_ADDRESS |		\
> -			   UFFD_FEATURE_WP_HUGETLBFS_SHMEM)
> +			   UFFD_FEATURE_WP_HUGETLBFS_SHMEM |	\
> +			   UFFD_FEATURE_WP_UNPOPULATED)
>   #define UFFD_API_IOCTLS				\
>   	((__u64)1 << _UFFDIO_REGISTER |		\
>   	 (__u64)1 << _UFFDIO_UNREGISTER |	\
> @@ -203,6 +204,12 @@ struct uffdio_api {
>   	 *
>   	 * UFFD_FEATURE_WP_HUGETLBFS_SHMEM indicates that userfaultfd
>   	 * write-protection mode is supported on both shmem and hugetlbfs.
> +	 *
> +	 * UFFD_FEATURE_WP_UNPOPULATED indicates that userfaultfd
> +	 * write-protection mode will always apply to unpopulated pages
> +	 * (i.e. empty ptes).  This will be the default behavior for shmem
> +	 * & hugetlbfs, so this flag only affects anonymous memory behavior
> +	 * when userfault write-protection mode is registered.
>   	 */
>   #define UFFD_FEATURE_PAGEFAULT_FLAG_WP		(1<<0)
>   #define UFFD_FEATURE_EVENT_FORK			(1<<1)
> @@ -217,6 +224,7 @@ struct uffdio_api {
>   #define UFFD_FEATURE_MINOR_SHMEM		(1<<10)
>   #define UFFD_FEATURE_EXACT_ADDRESS		(1<<11)
>   #define UFFD_FEATURE_WP_HUGETLBFS_SHMEM		(1<<12)
> +#define UFFD_FEATURE_WP_UNPOPULATED		(1<<13)
>   	__u64 features;
>   
>   	__u64 ioctls;
> @@ -297,6 +305,13 @@ struct uffdio_writeprotect {
>   struct uffdio_continue {
>   	struct uffdio_range range;
>   #define UFFDIO_CONTINUE_MODE_DONTWAKE		((__u64)1<<0)
> +	/*
> +	 * UFFDIO_CONTINUE_MODE_WP will map the page write protected on
> +	 * the fly.  UFFDIO_CONTINUE_MODE_WP is available only if the
> +	 * write protected ioctl is implemented for the range
> +	 * according to the uffdio_register.ioctls.
> +	 */
> +#define UFFDIO_CONTINUE_MODE_WP			((__u64)1<<1)
>   	__u64 mode;
>   
>   	/*
> diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h
> index 4a534edbdcba..2658fda219e8 100644
> --- a/linux-headers/linux/vfio.h
> +++ b/linux-headers/linux/vfio.h
> @@ -646,6 +646,15 @@ enum {
>   	VFIO_CCW_NUM_IRQS
>   };
>   
> +/*
> + * The vfio-ap bus driver makes use of the following IRQ index mapping.
> + * Unimplemented IRQ types return a count of zero.
> + */
> +enum {
> +	VFIO_AP_REQ_IRQ_INDEX,
> +	VFIO_AP_NUM_IRQS
> +};
> +
>   /**
>    * VFIO_DEVICE_GET_PCI_HOT_RESET_INFO - _IOWR(VFIO_TYPE, VFIO_BASE + 12,
>    *					      struct vfio_pci_hot_reset_info)
Anthony Krowiak July 3, 2023, 8:31 p.m. UTC | #2
On 7/3/23 12:31 PM, Cédric Le Goater wrote:
> On 6/2/23 16:11, Tony Krowiak wrote:
>> Note: This is a placeholder patch that includes unmerged uapi changes.
>>
>> Signed-off-by: Tony Krowiak <akrowiak@linux.ibm.com>
>> Link: 
>> https://lore.kernel.org/qemu-devel/20230530225544.280031-1-akrowiak@linux.ibm.com/
> 
> I am preparing a vfio-next tree including these changes plus a 
> linux-headers
> update. I am just waiting for the 6.5-rc1 tag to be pushed.

Good news, thanks.

> 
> Thanks,
> 
> C.
> 
>> ---
>>   include/standard-headers/linux/const.h        |  2 +-
>>   include/standard-headers/linux/virtio_blk.h   | 18 +++----
>>   .../standard-headers/linux/virtio_config.h    |  6 +++
>>   include/standard-headers/linux/virtio_net.h   |  1 +
>>   linux-headers/asm-arm64/kvm.h                 | 33 ++++++++++++
>>   linux-headers/asm-riscv/kvm.h                 | 53 ++++++++++++++++++-
>>   linux-headers/asm-riscv/unistd.h              |  9 ++++
>>   linux-headers/asm-s390/unistd_32.h            |  1 +
>>   linux-headers/asm-s390/unistd_64.h            |  1 +
>>   linux-headers/asm-x86/kvm.h                   |  3 ++
>>   linux-headers/linux/const.h                   |  2 +-
>>   linux-headers/linux/kvm.h                     | 12 +++--
>>   linux-headers/linux/psp-sev.h                 |  7 +++
>>   linux-headers/linux/userfaultfd.h             | 17 +++++-
>>   linux-headers/linux/vfio.h                    |  9 ++++
>>   15 files changed, 158 insertions(+), 16 deletions(-)
>>
>> diff --git a/include/standard-headers/linux/const.h 
>> b/include/standard-headers/linux/const.h
>> index 5e4898725168..1eb84b5087f8 100644
>> --- a/include/standard-headers/linux/const.h
>> +++ b/include/standard-headers/linux/const.h
>> @@ -28,7 +28,7 @@
>>   #define _BITUL(x)    (_UL(1) << (x))
>>   #define _BITULL(x)    (_ULL(1) << (x))
>> -#define __ALIGN_KERNEL(x, a)        __ALIGN_KERNEL_MASK(x, 
>> (typeof(x))(a) - 1)
>> +#define __ALIGN_KERNEL(x, a)        __ALIGN_KERNEL_MASK(x, 
>> (__typeof__(x))(a) - 1)
>>   #define __ALIGN_KERNEL_MASK(x, mask)    (((x) + (mask)) & ~(mask))
>>   #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
>> diff --git a/include/standard-headers/linux/virtio_blk.h 
>> b/include/standard-headers/linux/virtio_blk.h
>> index 7155b1a4701b..d7be3cf5e42f 100644
>> --- a/include/standard-headers/linux/virtio_blk.h
>> +++ b/include/standard-headers/linux/virtio_blk.h
>> @@ -138,11 +138,11 @@ struct virtio_blk_config {
>>       /* Zoned block device characteristics (if VIRTIO_BLK_F_ZONED) */
>>       struct virtio_blk_zoned_characteristics {
>> -        uint32_t zone_sectors;
>> -        uint32_t max_open_zones;
>> -        uint32_t max_active_zones;
>> -        uint32_t max_append_sectors;
>> -        uint32_t write_granularity;
>> +        __virtio32 zone_sectors;
>> +        __virtio32 max_open_zones;
>> +        __virtio32 max_active_zones;
>> +        __virtio32 max_append_sectors;
>> +        __virtio32 write_granularity;
>>           uint8_t model;
>>           uint8_t unused2[3];
>>       } zoned;
>> @@ -239,11 +239,11 @@ struct virtio_blk_outhdr {
>>    */
>>   struct virtio_blk_zone_descriptor {
>>       /* Zone capacity */
>> -    uint64_t z_cap;
>> +    __virtio64 z_cap;
>>       /* The starting sector of the zone */
>> -    uint64_t z_start;
>> +    __virtio64 z_start;
>>       /* Zone write pointer position in sectors */
>> -    uint64_t z_wp;
>> +    __virtio64 z_wp;
>>       /* Zone type */
>>       uint8_t z_type;
>>       /* Zone state */
>> @@ -252,7 +252,7 @@ struct virtio_blk_zone_descriptor {
>>   };
>>   struct virtio_blk_zone_report {
>> -    uint64_t nr_zones;
>> +    __virtio64 nr_zones;
>>       uint8_t reserved[56];
>>       struct virtio_blk_zone_descriptor zones[];
>>   };
>> diff --git a/include/standard-headers/linux/virtio_config.h 
>> b/include/standard-headers/linux/virtio_config.h
>> index 965ee6ae237e..8a7d0dc8b007 100644
>> --- a/include/standard-headers/linux/virtio_config.h
>> +++ b/include/standard-headers/linux/virtio_config.h
>> @@ -97,6 +97,12 @@
>>    */
>>   #define VIRTIO_F_SR_IOV            37
>> +/*
>> + * This feature indicates that the driver passes extra data (besides
>> + * identifying the virtqueue) in its device notifications.
>> + */
>> +#define VIRTIO_F_NOTIFICATION_DATA    38
>> +
>>   /*
>>    * This feature indicates that the driver can reset a queue 
>> individually.
>>    */
>> diff --git a/include/standard-headers/linux/virtio_net.h 
>> b/include/standard-headers/linux/virtio_net.h
>> index c0e797067aae..2325485f2ca8 100644
>> --- a/include/standard-headers/linux/virtio_net.h
>> +++ b/include/standard-headers/linux/virtio_net.h
>> @@ -61,6 +61,7 @@
>>   #define VIRTIO_NET_F_GUEST_USO6    55    /* Guest can handle USOv6 
>> in. */
>>   #define VIRTIO_NET_F_HOST_USO    56    /* Host can handle USO in. */
>>   #define VIRTIO_NET_F_HASH_REPORT  57    /* Supports hash report */
>> +#define VIRTIO_NET_F_GUEST_HDRLEN  59    /* Guest provides the exact 
>> hdr_len value. */
>>   #define VIRTIO_NET_F_RSS      60    /* Supports RSS RX steering */
>>   #define VIRTIO_NET_F_RSC_EXT      61    /* extended coalescing info */
>>   #define VIRTIO_NET_F_STANDBY      62    /* Act as standby for 
>> another device
>> diff --git a/linux-headers/asm-arm64/kvm.h 
>> b/linux-headers/asm-arm64/kvm.h
>> index d7e7bb885e20..38e5957526c2 100644
>> --- a/linux-headers/asm-arm64/kvm.h
>> +++ b/linux-headers/asm-arm64/kvm.h
>> @@ -198,6 +198,15 @@ struct kvm_arm_copy_mte_tags {
>>       __u64 reserved[2];
>>   };
>> +/*
>> + * Counter/Timer offset structure. Describe the virtual/physical offset.
>> + * To be used with KVM_ARM_SET_COUNTER_OFFSET.
>> + */
>> +struct kvm_arm_counter_offset {
>> +    __u64 counter_offset;
>> +    __u64 reserved;
>> +};
>> +
>>   #define KVM_ARM_TAGS_TO_GUEST        0
>>   #define KVM_ARM_TAGS_FROM_GUEST        1
>> @@ -363,6 +372,10 @@ enum {
>>       KVM_REG_ARM_VENDOR_HYP_BIT_PTP        = 1,
>>   };
>> +/* Device Control API on vm fd */
>> +#define KVM_ARM_VM_SMCCC_CTRL        0
>> +#define   KVM_ARM_VM_SMCCC_FILTER    0
>> +
>>   /* Device Control API: ARM VGIC */
>>   #define KVM_DEV_ARM_VGIC_GRP_ADDR    0
>>   #define KVM_DEV_ARM_VGIC_GRP_DIST_REGS    1
>> @@ -402,6 +415,8 @@ enum {
>>   #define KVM_ARM_VCPU_TIMER_CTRL        1
>>   #define   KVM_ARM_VCPU_TIMER_IRQ_VTIMER        0
>>   #define   KVM_ARM_VCPU_TIMER_IRQ_PTIMER        1
>> +#define   KVM_ARM_VCPU_TIMER_IRQ_HVTIMER    2
>> +#define   KVM_ARM_VCPU_TIMER_IRQ_HPTIMER    3
>>   #define KVM_ARM_VCPU_PVTIME_CTRL    2
>>   #define   KVM_ARM_VCPU_PVTIME_IPA    0
>> @@ -458,6 +473,24 @@ enum {
>>   /* run->fail_entry.hardware_entry_failure_reason codes. */
>>   #define KVM_EXIT_FAIL_ENTRY_CPU_UNSUPPORTED    (1ULL << 0)
>> +enum kvm_smccc_filter_action {
>> +    KVM_SMCCC_FILTER_HANDLE = 0,
>> +    KVM_SMCCC_FILTER_DENY,
>> +    KVM_SMCCC_FILTER_FWD_TO_USER,
>> +
>> +};
>> +
>> +struct kvm_smccc_filter {
>> +    __u32 base;
>> +    __u32 nr_functions;
>> +    __u8 action;
>> +    __u8 pad[15];
>> +};
>> +
>> +/* arm64-specific KVM_EXIT_HYPERCALL flags */
>> +#define KVM_HYPERCALL_EXIT_SMC        (1U << 0)
>> +#define KVM_HYPERCALL_EXIT_16BIT    (1U << 1)
>> +
>>   #endif
>>   #endif /* __ARM_KVM_H__ */
>> diff --git a/linux-headers/asm-riscv/kvm.h 
>> b/linux-headers/asm-riscv/kvm.h
>> index 92af6f3f057c..f92790c9481a 100644
>> --- a/linux-headers/asm-riscv/kvm.h
>> +++ b/linux-headers/asm-riscv/kvm.h
>> @@ -12,6 +12,7 @@
>>   #ifndef __ASSEMBLY__
>>   #include <linux/types.h>
>> +#include <asm/bitsperlong.h>
>>   #include <asm/ptrace.h>
>>   #define __KVM_HAVE_READONLY_MEM
>> @@ -52,6 +53,7 @@ struct kvm_riscv_config {
>>       unsigned long mvendorid;
>>       unsigned long marchid;
>>       unsigned long mimpid;
>> +    unsigned long zicboz_block_size;
>>   };
>>   /* CORE registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */
>> @@ -64,7 +66,7 @@ struct kvm_riscv_core {
>>   #define KVM_RISCV_MODE_S    1
>>   #define KVM_RISCV_MODE_U    0
>> -/* CSR registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */
>> +/* General CSR registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */
>>   struct kvm_riscv_csr {
>>       unsigned long sstatus;
>>       unsigned long sie;
>> @@ -78,6 +80,17 @@ struct kvm_riscv_csr {
>>       unsigned long scounteren;
>>   };
>> +/* AIA CSR registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */
>> +struct kvm_riscv_aia_csr {
>> +    unsigned long siselect;
>> +    unsigned long iprio1;
>> +    unsigned long iprio2;
>> +    unsigned long sieh;
>> +    unsigned long siph;
>> +    unsigned long iprio1h;
>> +    unsigned long iprio2h;
>> +};
>> +
>>   /* TIMER registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */
>>   struct kvm_riscv_timer {
>>       __u64 frequency;
>> @@ -105,9 +118,29 @@ enum KVM_RISCV_ISA_EXT_ID {
>>       KVM_RISCV_ISA_EXT_SVINVAL,
>>       KVM_RISCV_ISA_EXT_ZIHINTPAUSE,
>>       KVM_RISCV_ISA_EXT_ZICBOM,
>> +    KVM_RISCV_ISA_EXT_ZICBOZ,
>> +    KVM_RISCV_ISA_EXT_ZBB,
>> +    KVM_RISCV_ISA_EXT_SSAIA,
>>       KVM_RISCV_ISA_EXT_MAX,
>>   };
>> +/*
>> + * SBI extension IDs specific to KVM. This is not the same as the SBI
>> + * extension IDs defined by the RISC-V SBI specification.
>> + */
>> +enum KVM_RISCV_SBI_EXT_ID {
>> +    KVM_RISCV_SBI_EXT_V01 = 0,
>> +    KVM_RISCV_SBI_EXT_TIME,
>> +    KVM_RISCV_SBI_EXT_IPI,
>> +    KVM_RISCV_SBI_EXT_RFENCE,
>> +    KVM_RISCV_SBI_EXT_SRST,
>> +    KVM_RISCV_SBI_EXT_HSM,
>> +    KVM_RISCV_SBI_EXT_PMU,
>> +    KVM_RISCV_SBI_EXT_EXPERIMENTAL,
>> +    KVM_RISCV_SBI_EXT_VENDOR,
>> +    KVM_RISCV_SBI_EXT_MAX,
>> +};
>> +
>>   /* Possible states for kvm_riscv_timer */
>>   #define KVM_RISCV_TIMER_STATE_OFF    0
>>   #define KVM_RISCV_TIMER_STATE_ON    1
>> @@ -118,6 +151,8 @@ enum KVM_RISCV_ISA_EXT_ID {
>>   /* If you need to interpret the index values, here is the key: */
>>   #define KVM_REG_RISCV_TYPE_MASK        0x00000000FF000000
>>   #define KVM_REG_RISCV_TYPE_SHIFT    24
>> +#define KVM_REG_RISCV_SUBTYPE_MASK    0x0000000000FF0000
>> +#define KVM_REG_RISCV_SUBTYPE_SHIFT    16
>>   /* Config registers are mapped as type 1 */
>>   #define KVM_REG_RISCV_CONFIG        (0x01 << KVM_REG_RISCV_TYPE_SHIFT)
>> @@ -131,8 +166,12 @@ enum KVM_RISCV_ISA_EXT_ID {
>>   /* Control and status registers are mapped as type 3 */
>>   #define KVM_REG_RISCV_CSR        (0x03 << KVM_REG_RISCV_TYPE_SHIFT)
>> +#define KVM_REG_RISCV_CSR_GENERAL    (0x0 << 
>> KVM_REG_RISCV_SUBTYPE_SHIFT)
>> +#define KVM_REG_RISCV_CSR_AIA        (0x1 << 
>> KVM_REG_RISCV_SUBTYPE_SHIFT)
>>   #define KVM_REG_RISCV_CSR_REG(name)    \
>>           (offsetof(struct kvm_riscv_csr, name) / sizeof(unsigned long))
>> +#define KVM_REG_RISCV_CSR_AIA_REG(name)    \
>> +    (offsetof(struct kvm_riscv_aia_csr, name) / sizeof(unsigned long))
>>   /* Timer registers are mapped as type 4 */
>>   #define KVM_REG_RISCV_TIMER        (0x04 << KVM_REG_RISCV_TYPE_SHIFT)
>> @@ -152,6 +191,18 @@ enum KVM_RISCV_ISA_EXT_ID {
>>   /* ISA Extension registers are mapped as type 7 */
>>   #define KVM_REG_RISCV_ISA_EXT        (0x07 << KVM_REG_RISCV_TYPE_SHIFT)
>> +/* SBI extension registers are mapped as type 8 */
>> +#define KVM_REG_RISCV_SBI_EXT        (0x08 << KVM_REG_RISCV_TYPE_SHIFT)
>> +#define KVM_REG_RISCV_SBI_SINGLE    (0x0 << KVM_REG_RISCV_SUBTYPE_SHIFT)
>> +#define KVM_REG_RISCV_SBI_MULTI_EN    (0x1 << 
>> KVM_REG_RISCV_SUBTYPE_SHIFT)
>> +#define KVM_REG_RISCV_SBI_MULTI_DIS    (0x2 << 
>> KVM_REG_RISCV_SUBTYPE_SHIFT)
>> +#define KVM_REG_RISCV_SBI_MULTI_REG(__ext_id)    \
>> +        ((__ext_id) / __BITS_PER_LONG)
>> +#define KVM_REG_RISCV_SBI_MULTI_MASK(__ext_id)    \
>> +        (1UL << ((__ext_id) % __BITS_PER_LONG))
>> +#define KVM_REG_RISCV_SBI_MULTI_REG_LAST    \
>> +        KVM_REG_RISCV_SBI_MULTI_REG(KVM_RISCV_SBI_EXT_MAX - 1)
>> +
>>   #endif
>>   #endif /* __LINUX_KVM_RISCV_H */
>> diff --git a/linux-headers/asm-riscv/unistd.h 
>> b/linux-headers/asm-riscv/unistd.h
>> index 73d7cdd2ec49..950ab3fd4409 100644
>> --- a/linux-headers/asm-riscv/unistd.h
>> +++ b/linux-headers/asm-riscv/unistd.h
>> @@ -43,3 +43,12 @@
>>   #define __NR_riscv_flush_icache (__NR_arch_specific_syscall + 15)
>>   #endif
>>   __SYSCALL(__NR_riscv_flush_icache, sys_riscv_flush_icache)
>> +
>> +/*
>> + * Allows userspace to query the kernel for CPU architecture and
>> + * microarchitecture details across a given set of CPUs.
>> + */
>> +#ifndef __NR_riscv_hwprobe
>> +#define __NR_riscv_hwprobe (__NR_arch_specific_syscall + 14)
>> +#endif
>> +__SYSCALL(__NR_riscv_hwprobe, sys_riscv_hwprobe)
>> diff --git a/linux-headers/asm-s390/unistd_32.h 
>> b/linux-headers/asm-s390/unistd_32.h
>> index 8e644d65f571..800f3adb2020 100644
>> --- a/linux-headers/asm-s390/unistd_32.h
>> +++ b/linux-headers/asm-s390/unistd_32.h
>> @@ -419,6 +419,7 @@
>>   #define __NR_landlock_create_ruleset 444
>>   #define __NR_landlock_add_rule 445
>>   #define __NR_landlock_restrict_self 446
>> +#define __NR_memfd_secret 447
>>   #define __NR_process_mrelease 448
>>   #define __NR_futex_waitv 449
>>   #define __NR_set_mempolicy_home_node 450
>> diff --git a/linux-headers/asm-s390/unistd_64.h 
>> b/linux-headers/asm-s390/unistd_64.h
>> index 51da542fec10..399a6059015e 100644
>> --- a/linux-headers/asm-s390/unistd_64.h
>> +++ b/linux-headers/asm-s390/unistd_64.h
>> @@ -367,6 +367,7 @@
>>   #define __NR_landlock_create_ruleset 444
>>   #define __NR_landlock_add_rule 445
>>   #define __NR_landlock_restrict_self 446
>> +#define __NR_memfd_secret 447
>>   #define __NR_process_mrelease 448
>>   #define __NR_futex_waitv 449
>>   #define __NR_set_mempolicy_home_node 450
>> diff --git a/linux-headers/asm-x86/kvm.h b/linux-headers/asm-x86/kvm.h
>> index 2937e7bf6982..2b3a8f7bd2c0 100644
>> --- a/linux-headers/asm-x86/kvm.h
>> +++ b/linux-headers/asm-x86/kvm.h
>> @@ -557,4 +557,7 @@ struct kvm_pmu_event_filter {
>>   #define KVM_VCPU_TSC_CTRL 0 /* control group for the timestamp 
>> counter (TSC) */
>>   #define   KVM_VCPU_TSC_OFFSET 0 /* attribute for the TSC offset */
>> +/* x86-specific KVM_EXIT_HYPERCALL flags. */
>> +#define KVM_EXIT_HYPERCALL_LONG_MODE    BIT(0)
>> +
>>   #endif /* _ASM_X86_KVM_H */
>> diff --git a/linux-headers/linux/const.h b/linux-headers/linux/const.h
>> index 5e4898725168..1eb84b5087f8 100644
>> --- a/linux-headers/linux/const.h
>> +++ b/linux-headers/linux/const.h
>> @@ -28,7 +28,7 @@
>>   #define _BITUL(x)    (_UL(1) << (x))
>>   #define _BITULL(x)    (_ULL(1) << (x))
>> -#define __ALIGN_KERNEL(x, a)        __ALIGN_KERNEL_MASK(x, 
>> (typeof(x))(a) - 1)
>> +#define __ALIGN_KERNEL(x, a)        __ALIGN_KERNEL_MASK(x, 
>> (__typeof__(x))(a) - 1)
>>   #define __ALIGN_KERNEL_MASK(x, mask)    (((x) + (mask)) & ~(mask))
>>   #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
>> diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h
>> index 599de3c6e3aa..65b145b317ac 100644
>> --- a/linux-headers/linux/kvm.h
>> +++ b/linux-headers/linux/kvm.h
>> @@ -341,8 +341,11 @@ struct kvm_run {
>>               __u64 nr;
>>               __u64 args[6];
>>               __u64 ret;
>> -            __u32 longmode;
>> -            __u32 pad;
>> +
>> +            union {
>> +                __u32 longmode;
>> +                __u64 flags;
>> +            };
>>           } hypercall;
>>           /* KVM_EXIT_TPR_ACCESS */
>>           struct {
>> @@ -1182,6 +1185,7 @@ struct kvm_ppc_resize_hpt {
>>   #define KVM_CAP_S390_PROTECTED_ASYNC_DISABLE 224
>>   #define KVM_CAP_DIRTY_LOG_RING_WITH_BITMAP 225
>>   #define KVM_CAP_PMU_EVENT_MASKED_EVENTS 226
>> +#define KVM_CAP_COUNTER_OFFSET 227
>>   #ifdef KVM_CAP_IRQ_ROUTING
>> @@ -1449,7 +1453,7 @@ struct kvm_vfio_spapr_tce {
>>   #define KVM_CREATE_VCPU           _IO(KVMIO,   0x41)
>>   #define KVM_GET_DIRTY_LOG         _IOW(KVMIO,  0x42, struct 
>> kvm_dirty_log)
>>   #define KVM_SET_NR_MMU_PAGES      _IO(KVMIO,   0x44)
>> -#define KVM_GET_NR_MMU_PAGES      _IO(KVMIO,   0x45)
>> +#define KVM_GET_NR_MMU_PAGES      _IO(KVMIO,   0x45)  /* deprecated */
>>   #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46, \
>>                       struct kvm_userspace_memory_region)
>>   #define KVM_SET_TSS_ADDR          _IO(KVMIO,   0x47)
>> @@ -1541,6 +1545,8 @@ struct kvm_s390_ucas_mapping {
>>   #define KVM_SET_PMU_EVENT_FILTER  _IOW(KVMIO,  0xb2, struct 
>> kvm_pmu_event_filter)
>>   #define KVM_PPC_SVM_OFF          _IO(KVMIO,  0xb3)
>>   #define KVM_ARM_MTE_COPY_TAGS      _IOR(KVMIO,  0xb4, struct 
>> kvm_arm_copy_mte_tags)
>> +/* Available with KVM_CAP_COUNTER_OFFSET */
>> +#define KVM_ARM_SET_COUNTER_OFFSET _IOW(KVMIO,  0xb5, struct 
>> kvm_arm_counter_offset)
>>   /* ioctl for vm fd */
>>   #define KVM_CREATE_DEVICE      _IOWR(KVMIO,  0xe0, struct 
>> kvm_create_device)
>> diff --git a/linux-headers/linux/psp-sev.h 
>> b/linux-headers/linux/psp-sev.h
>> index 51d8b3940e14..12ccb70099d4 100644
>> --- a/linux-headers/linux/psp-sev.h
>> +++ b/linux-headers/linux/psp-sev.h
>> @@ -36,6 +36,13 @@ enum {
>>    * SEV Firmware status code
>>    */
>>   typedef enum {
>> +    /*
>> +     * This error code is not in the SEV spec. Its purpose is to 
>> convey that
>> +     * there was an error that prevented the SEV firmware from being 
>> called.
>> +     * The SEV API error codes are 16 bits, so the -1 value will not 
>> overlap
>> +     * with possible values from the specification.
>> +     */
>> +    SEV_RET_NO_FW_CALL = -1,
>>       SEV_RET_SUCCESS = 0,
>>       SEV_RET_INVALID_PLATFORM_STATE,
>>       SEV_RET_INVALID_GUEST_STATE,
>> diff --git a/linux-headers/linux/userfaultfd.h 
>> b/linux-headers/linux/userfaultfd.h
>> index ba5d0df52fb8..14e402263a8a 100644
>> --- a/linux-headers/linux/userfaultfd.h
>> +++ b/linux-headers/linux/userfaultfd.h
>> @@ -38,7 +38,8 @@
>>                  UFFD_FEATURE_MINOR_HUGETLBFS |    \
>>                  UFFD_FEATURE_MINOR_SHMEM |        \
>>                  UFFD_FEATURE_EXACT_ADDRESS |        \
>> -               UFFD_FEATURE_WP_HUGETLBFS_SHMEM)
>> +               UFFD_FEATURE_WP_HUGETLBFS_SHMEM |    \
>> +               UFFD_FEATURE_WP_UNPOPULATED)
>>   #define UFFD_API_IOCTLS                \
>>       ((__u64)1 << _UFFDIO_REGISTER |        \
>>        (__u64)1 << _UFFDIO_UNREGISTER |    \
>> @@ -203,6 +204,12 @@ struct uffdio_api {
>>        *
>>        * UFFD_FEATURE_WP_HUGETLBFS_SHMEM indicates that userfaultfd
>>        * write-protection mode is supported on both shmem and hugetlbfs.
>> +     *
>> +     * UFFD_FEATURE_WP_UNPOPULATED indicates that userfaultfd
>> +     * write-protection mode will always apply to unpopulated pages
>> +     * (i.e. empty ptes).  This will be the default behavior for shmem
>> +     * & hugetlbfs, so this flag only affects anonymous memory behavior
>> +     * when userfault write-protection mode is registered.
>>        */
>>   #define UFFD_FEATURE_PAGEFAULT_FLAG_WP        (1<<0)
>>   #define UFFD_FEATURE_EVENT_FORK            (1<<1)
>> @@ -217,6 +224,7 @@ struct uffdio_api {
>>   #define UFFD_FEATURE_MINOR_SHMEM        (1<<10)
>>   #define UFFD_FEATURE_EXACT_ADDRESS        (1<<11)
>>   #define UFFD_FEATURE_WP_HUGETLBFS_SHMEM        (1<<12)
>> +#define UFFD_FEATURE_WP_UNPOPULATED        (1<<13)
>>       __u64 features;
>>       __u64 ioctls;
>> @@ -297,6 +305,13 @@ struct uffdio_writeprotect {
>>   struct uffdio_continue {
>>       struct uffdio_range range;
>>   #define UFFDIO_CONTINUE_MODE_DONTWAKE        ((__u64)1<<0)
>> +    /*
>> +     * UFFDIO_CONTINUE_MODE_WP will map the page write protected on
>> +     * the fly.  UFFDIO_CONTINUE_MODE_WP is available only if the
>> +     * write protected ioctl is implemented for the range
>> +     * according to the uffdio_register.ioctls.
>> +     */
>> +#define UFFDIO_CONTINUE_MODE_WP            ((__u64)1<<1)
>>       __u64 mode;
>>       /*
>> diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h
>> index 4a534edbdcba..2658fda219e8 100644
>> --- a/linux-headers/linux/vfio.h
>> +++ b/linux-headers/linux/vfio.h
>> @@ -646,6 +646,15 @@ enum {
>>       VFIO_CCW_NUM_IRQS
>>   };
>> +/*
>> + * The vfio-ap bus driver makes use of the following IRQ index mapping.
>> + * Unimplemented IRQ types return a count of zero.
>> + */
>> +enum {
>> +    VFIO_AP_REQ_IRQ_INDEX,
>> +    VFIO_AP_NUM_IRQS
>> +};
>> +
>>   /**
>>    * VFIO_DEVICE_GET_PCI_HOT_RESET_INFO - _IOWR(VFIO_TYPE, VFIO_BASE + 
>> 12,
>>    *                          struct vfio_pci_hot_reset_info)
>
diff mbox series

Patch

diff --git a/include/standard-headers/linux/const.h b/include/standard-headers/linux/const.h
index 5e4898725168..1eb84b5087f8 100644
--- a/include/standard-headers/linux/const.h
+++ b/include/standard-headers/linux/const.h
@@ -28,7 +28,7 @@ 
 #define _BITUL(x)	(_UL(1) << (x))
 #define _BITULL(x)	(_ULL(1) << (x))
 
-#define __ALIGN_KERNEL(x, a)		__ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1)
+#define __ALIGN_KERNEL(x, a)		__ALIGN_KERNEL_MASK(x, (__typeof__(x))(a) - 1)
 #define __ALIGN_KERNEL_MASK(x, mask)	(((x) + (mask)) & ~(mask))
 
 #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
diff --git a/include/standard-headers/linux/virtio_blk.h b/include/standard-headers/linux/virtio_blk.h
index 7155b1a4701b..d7be3cf5e42f 100644
--- a/include/standard-headers/linux/virtio_blk.h
+++ b/include/standard-headers/linux/virtio_blk.h
@@ -138,11 +138,11 @@  struct virtio_blk_config {
 
 	/* Zoned block device characteristics (if VIRTIO_BLK_F_ZONED) */
 	struct virtio_blk_zoned_characteristics {
-		uint32_t zone_sectors;
-		uint32_t max_open_zones;
-		uint32_t max_active_zones;
-		uint32_t max_append_sectors;
-		uint32_t write_granularity;
+		__virtio32 zone_sectors;
+		__virtio32 max_open_zones;
+		__virtio32 max_active_zones;
+		__virtio32 max_append_sectors;
+		__virtio32 write_granularity;
 		uint8_t model;
 		uint8_t unused2[3];
 	} zoned;
@@ -239,11 +239,11 @@  struct virtio_blk_outhdr {
  */
 struct virtio_blk_zone_descriptor {
 	/* Zone capacity */
-	uint64_t z_cap;
+	__virtio64 z_cap;
 	/* The starting sector of the zone */
-	uint64_t z_start;
+	__virtio64 z_start;
 	/* Zone write pointer position in sectors */
-	uint64_t z_wp;
+	__virtio64 z_wp;
 	/* Zone type */
 	uint8_t z_type;
 	/* Zone state */
@@ -252,7 +252,7 @@  struct virtio_blk_zone_descriptor {
 };
 
 struct virtio_blk_zone_report {
-	uint64_t nr_zones;
+	__virtio64 nr_zones;
 	uint8_t reserved[56];
 	struct virtio_blk_zone_descriptor zones[];
 };
diff --git a/include/standard-headers/linux/virtio_config.h b/include/standard-headers/linux/virtio_config.h
index 965ee6ae237e..8a7d0dc8b007 100644
--- a/include/standard-headers/linux/virtio_config.h
+++ b/include/standard-headers/linux/virtio_config.h
@@ -97,6 +97,12 @@ 
  */
 #define VIRTIO_F_SR_IOV			37
 
+/*
+ * This feature indicates that the driver passes extra data (besides
+ * identifying the virtqueue) in its device notifications.
+ */
+#define VIRTIO_F_NOTIFICATION_DATA	38
+
 /*
  * This feature indicates that the driver can reset a queue individually.
  */
diff --git a/include/standard-headers/linux/virtio_net.h b/include/standard-headers/linux/virtio_net.h
index c0e797067aae..2325485f2ca8 100644
--- a/include/standard-headers/linux/virtio_net.h
+++ b/include/standard-headers/linux/virtio_net.h
@@ -61,6 +61,7 @@ 
 #define VIRTIO_NET_F_GUEST_USO6	55	/* Guest can handle USOv6 in. */
 #define VIRTIO_NET_F_HOST_USO	56	/* Host can handle USO in. */
 #define VIRTIO_NET_F_HASH_REPORT  57	/* Supports hash report */
+#define VIRTIO_NET_F_GUEST_HDRLEN  59	/* Guest provides the exact hdr_len value. */
 #define VIRTIO_NET_F_RSS	  60	/* Supports RSS RX steering */
 #define VIRTIO_NET_F_RSC_EXT	  61	/* extended coalescing info */
 #define VIRTIO_NET_F_STANDBY	  62	/* Act as standby for another device
diff --git a/linux-headers/asm-arm64/kvm.h b/linux-headers/asm-arm64/kvm.h
index d7e7bb885e20..38e5957526c2 100644
--- a/linux-headers/asm-arm64/kvm.h
+++ b/linux-headers/asm-arm64/kvm.h
@@ -198,6 +198,15 @@  struct kvm_arm_copy_mte_tags {
 	__u64 reserved[2];
 };
 
+/*
+ * Counter/Timer offset structure. Describe the virtual/physical offset.
+ * To be used with KVM_ARM_SET_COUNTER_OFFSET.
+ */
+struct kvm_arm_counter_offset {
+	__u64 counter_offset;
+	__u64 reserved;
+};
+
 #define KVM_ARM_TAGS_TO_GUEST		0
 #define KVM_ARM_TAGS_FROM_GUEST		1
 
@@ -363,6 +372,10 @@  enum {
 	KVM_REG_ARM_VENDOR_HYP_BIT_PTP		= 1,
 };
 
+/* Device Control API on vm fd */
+#define KVM_ARM_VM_SMCCC_CTRL		0
+#define   KVM_ARM_VM_SMCCC_FILTER	0
+
 /* Device Control API: ARM VGIC */
 #define KVM_DEV_ARM_VGIC_GRP_ADDR	0
 #define KVM_DEV_ARM_VGIC_GRP_DIST_REGS	1
@@ -402,6 +415,8 @@  enum {
 #define KVM_ARM_VCPU_TIMER_CTRL		1
 #define   KVM_ARM_VCPU_TIMER_IRQ_VTIMER		0
 #define   KVM_ARM_VCPU_TIMER_IRQ_PTIMER		1
+#define   KVM_ARM_VCPU_TIMER_IRQ_HVTIMER	2
+#define   KVM_ARM_VCPU_TIMER_IRQ_HPTIMER	3
 #define KVM_ARM_VCPU_PVTIME_CTRL	2
 #define   KVM_ARM_VCPU_PVTIME_IPA	0
 
@@ -458,6 +473,24 @@  enum {
 /* run->fail_entry.hardware_entry_failure_reason codes. */
 #define KVM_EXIT_FAIL_ENTRY_CPU_UNSUPPORTED	(1ULL << 0)
 
+enum kvm_smccc_filter_action {
+	KVM_SMCCC_FILTER_HANDLE = 0,
+	KVM_SMCCC_FILTER_DENY,
+	KVM_SMCCC_FILTER_FWD_TO_USER,
+
+};
+
+struct kvm_smccc_filter {
+	__u32 base;
+	__u32 nr_functions;
+	__u8 action;
+	__u8 pad[15];
+};
+
+/* arm64-specific KVM_EXIT_HYPERCALL flags */
+#define KVM_HYPERCALL_EXIT_SMC		(1U << 0)
+#define KVM_HYPERCALL_EXIT_16BIT	(1U << 1)
+
 #endif
 
 #endif /* __ARM_KVM_H__ */
diff --git a/linux-headers/asm-riscv/kvm.h b/linux-headers/asm-riscv/kvm.h
index 92af6f3f057c..f92790c9481a 100644
--- a/linux-headers/asm-riscv/kvm.h
+++ b/linux-headers/asm-riscv/kvm.h
@@ -12,6 +12,7 @@ 
 #ifndef __ASSEMBLY__
 
 #include <linux/types.h>
+#include <asm/bitsperlong.h>
 #include <asm/ptrace.h>
 
 #define __KVM_HAVE_READONLY_MEM
@@ -52,6 +53,7 @@  struct kvm_riscv_config {
 	unsigned long mvendorid;
 	unsigned long marchid;
 	unsigned long mimpid;
+	unsigned long zicboz_block_size;
 };
 
 /* CORE registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */
@@ -64,7 +66,7 @@  struct kvm_riscv_core {
 #define KVM_RISCV_MODE_S	1
 #define KVM_RISCV_MODE_U	0
 
-/* CSR registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */
+/* General CSR registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */
 struct kvm_riscv_csr {
 	unsigned long sstatus;
 	unsigned long sie;
@@ -78,6 +80,17 @@  struct kvm_riscv_csr {
 	unsigned long scounteren;
 };
 
+/* AIA CSR registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */
+struct kvm_riscv_aia_csr {
+	unsigned long siselect;
+	unsigned long iprio1;
+	unsigned long iprio2;
+	unsigned long sieh;
+	unsigned long siph;
+	unsigned long iprio1h;
+	unsigned long iprio2h;
+};
+
 /* TIMER registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */
 struct kvm_riscv_timer {
 	__u64 frequency;
@@ -105,9 +118,29 @@  enum KVM_RISCV_ISA_EXT_ID {
 	KVM_RISCV_ISA_EXT_SVINVAL,
 	KVM_RISCV_ISA_EXT_ZIHINTPAUSE,
 	KVM_RISCV_ISA_EXT_ZICBOM,
+	KVM_RISCV_ISA_EXT_ZICBOZ,
+	KVM_RISCV_ISA_EXT_ZBB,
+	KVM_RISCV_ISA_EXT_SSAIA,
 	KVM_RISCV_ISA_EXT_MAX,
 };
 
+/*
+ * SBI extension IDs specific to KVM. This is not the same as the SBI
+ * extension IDs defined by the RISC-V SBI specification.
+ */
+enum KVM_RISCV_SBI_EXT_ID {
+	KVM_RISCV_SBI_EXT_V01 = 0,
+	KVM_RISCV_SBI_EXT_TIME,
+	KVM_RISCV_SBI_EXT_IPI,
+	KVM_RISCV_SBI_EXT_RFENCE,
+	KVM_RISCV_SBI_EXT_SRST,
+	KVM_RISCV_SBI_EXT_HSM,
+	KVM_RISCV_SBI_EXT_PMU,
+	KVM_RISCV_SBI_EXT_EXPERIMENTAL,
+	KVM_RISCV_SBI_EXT_VENDOR,
+	KVM_RISCV_SBI_EXT_MAX,
+};
+
 /* Possible states for kvm_riscv_timer */
 #define KVM_RISCV_TIMER_STATE_OFF	0
 #define KVM_RISCV_TIMER_STATE_ON	1
@@ -118,6 +151,8 @@  enum KVM_RISCV_ISA_EXT_ID {
 /* If you need to interpret the index values, here is the key: */
 #define KVM_REG_RISCV_TYPE_MASK		0x00000000FF000000
 #define KVM_REG_RISCV_TYPE_SHIFT	24
+#define KVM_REG_RISCV_SUBTYPE_MASK	0x0000000000FF0000
+#define KVM_REG_RISCV_SUBTYPE_SHIFT	16
 
 /* Config registers are mapped as type 1 */
 #define KVM_REG_RISCV_CONFIG		(0x01 << KVM_REG_RISCV_TYPE_SHIFT)
@@ -131,8 +166,12 @@  enum KVM_RISCV_ISA_EXT_ID {
 
 /* Control and status registers are mapped as type 3 */
 #define KVM_REG_RISCV_CSR		(0x03 << KVM_REG_RISCV_TYPE_SHIFT)
+#define KVM_REG_RISCV_CSR_GENERAL	(0x0 << KVM_REG_RISCV_SUBTYPE_SHIFT)
+#define KVM_REG_RISCV_CSR_AIA		(0x1 << KVM_REG_RISCV_SUBTYPE_SHIFT)
 #define KVM_REG_RISCV_CSR_REG(name)	\
 		(offsetof(struct kvm_riscv_csr, name) / sizeof(unsigned long))
+#define KVM_REG_RISCV_CSR_AIA_REG(name)	\
+	(offsetof(struct kvm_riscv_aia_csr, name) / sizeof(unsigned long))
 
 /* Timer registers are mapped as type 4 */
 #define KVM_REG_RISCV_TIMER		(0x04 << KVM_REG_RISCV_TYPE_SHIFT)
@@ -152,6 +191,18 @@  enum KVM_RISCV_ISA_EXT_ID {
 /* ISA Extension registers are mapped as type 7 */
 #define KVM_REG_RISCV_ISA_EXT		(0x07 << KVM_REG_RISCV_TYPE_SHIFT)
 
+/* SBI extension registers are mapped as type 8 */
+#define KVM_REG_RISCV_SBI_EXT		(0x08 << KVM_REG_RISCV_TYPE_SHIFT)
+#define KVM_REG_RISCV_SBI_SINGLE	(0x0 << KVM_REG_RISCV_SUBTYPE_SHIFT)
+#define KVM_REG_RISCV_SBI_MULTI_EN	(0x1 << KVM_REG_RISCV_SUBTYPE_SHIFT)
+#define KVM_REG_RISCV_SBI_MULTI_DIS	(0x2 << KVM_REG_RISCV_SUBTYPE_SHIFT)
+#define KVM_REG_RISCV_SBI_MULTI_REG(__ext_id)	\
+		((__ext_id) / __BITS_PER_LONG)
+#define KVM_REG_RISCV_SBI_MULTI_MASK(__ext_id)	\
+		(1UL << ((__ext_id) % __BITS_PER_LONG))
+#define KVM_REG_RISCV_SBI_MULTI_REG_LAST	\
+		KVM_REG_RISCV_SBI_MULTI_REG(KVM_RISCV_SBI_EXT_MAX - 1)
+
 #endif
 
 #endif /* __LINUX_KVM_RISCV_H */
diff --git a/linux-headers/asm-riscv/unistd.h b/linux-headers/asm-riscv/unistd.h
index 73d7cdd2ec49..950ab3fd4409 100644
--- a/linux-headers/asm-riscv/unistd.h
+++ b/linux-headers/asm-riscv/unistd.h
@@ -43,3 +43,12 @@ 
 #define __NR_riscv_flush_icache (__NR_arch_specific_syscall + 15)
 #endif
 __SYSCALL(__NR_riscv_flush_icache, sys_riscv_flush_icache)
+
+/*
+ * Allows userspace to query the kernel for CPU architecture and
+ * microarchitecture details across a given set of CPUs.
+ */
+#ifndef __NR_riscv_hwprobe
+#define __NR_riscv_hwprobe (__NR_arch_specific_syscall + 14)
+#endif
+__SYSCALL(__NR_riscv_hwprobe, sys_riscv_hwprobe)
diff --git a/linux-headers/asm-s390/unistd_32.h b/linux-headers/asm-s390/unistd_32.h
index 8e644d65f571..800f3adb2020 100644
--- a/linux-headers/asm-s390/unistd_32.h
+++ b/linux-headers/asm-s390/unistd_32.h
@@ -419,6 +419,7 @@ 
 #define __NR_landlock_create_ruleset 444
 #define __NR_landlock_add_rule 445
 #define __NR_landlock_restrict_self 446
+#define __NR_memfd_secret 447
 #define __NR_process_mrelease 448
 #define __NR_futex_waitv 449
 #define __NR_set_mempolicy_home_node 450
diff --git a/linux-headers/asm-s390/unistd_64.h b/linux-headers/asm-s390/unistd_64.h
index 51da542fec10..399a6059015e 100644
--- a/linux-headers/asm-s390/unistd_64.h
+++ b/linux-headers/asm-s390/unistd_64.h
@@ -367,6 +367,7 @@ 
 #define __NR_landlock_create_ruleset 444
 #define __NR_landlock_add_rule 445
 #define __NR_landlock_restrict_self 446
+#define __NR_memfd_secret 447
 #define __NR_process_mrelease 448
 #define __NR_futex_waitv 449
 #define __NR_set_mempolicy_home_node 450
diff --git a/linux-headers/asm-x86/kvm.h b/linux-headers/asm-x86/kvm.h
index 2937e7bf6982..2b3a8f7bd2c0 100644
--- a/linux-headers/asm-x86/kvm.h
+++ b/linux-headers/asm-x86/kvm.h
@@ -557,4 +557,7 @@  struct kvm_pmu_event_filter {
 #define KVM_VCPU_TSC_CTRL 0 /* control group for the timestamp counter (TSC) */
 #define   KVM_VCPU_TSC_OFFSET 0 /* attribute for the TSC offset */
 
+/* x86-specific KVM_EXIT_HYPERCALL flags. */
+#define KVM_EXIT_HYPERCALL_LONG_MODE	BIT(0)
+
 #endif /* _ASM_X86_KVM_H */
diff --git a/linux-headers/linux/const.h b/linux-headers/linux/const.h
index 5e4898725168..1eb84b5087f8 100644
--- a/linux-headers/linux/const.h
+++ b/linux-headers/linux/const.h
@@ -28,7 +28,7 @@ 
 #define _BITUL(x)	(_UL(1) << (x))
 #define _BITULL(x)	(_ULL(1) << (x))
 
-#define __ALIGN_KERNEL(x, a)		__ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1)
+#define __ALIGN_KERNEL(x, a)		__ALIGN_KERNEL_MASK(x, (__typeof__(x))(a) - 1)
 #define __ALIGN_KERNEL_MASK(x, mask)	(((x) + (mask)) & ~(mask))
 
 #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h
index 599de3c6e3aa..65b145b317ac 100644
--- a/linux-headers/linux/kvm.h
+++ b/linux-headers/linux/kvm.h
@@ -341,8 +341,11 @@  struct kvm_run {
 			__u64 nr;
 			__u64 args[6];
 			__u64 ret;
-			__u32 longmode;
-			__u32 pad;
+
+			union {
+				__u32 longmode;
+				__u64 flags;
+			};
 		} hypercall;
 		/* KVM_EXIT_TPR_ACCESS */
 		struct {
@@ -1182,6 +1185,7 @@  struct kvm_ppc_resize_hpt {
 #define KVM_CAP_S390_PROTECTED_ASYNC_DISABLE 224
 #define KVM_CAP_DIRTY_LOG_RING_WITH_BITMAP 225
 #define KVM_CAP_PMU_EVENT_MASKED_EVENTS 226
+#define KVM_CAP_COUNTER_OFFSET 227
 
 #ifdef KVM_CAP_IRQ_ROUTING
 
@@ -1449,7 +1453,7 @@  struct kvm_vfio_spapr_tce {
 #define KVM_CREATE_VCPU           _IO(KVMIO,   0x41)
 #define KVM_GET_DIRTY_LOG         _IOW(KVMIO,  0x42, struct kvm_dirty_log)
 #define KVM_SET_NR_MMU_PAGES      _IO(KVMIO,   0x44)
-#define KVM_GET_NR_MMU_PAGES      _IO(KVMIO,   0x45)
+#define KVM_GET_NR_MMU_PAGES      _IO(KVMIO,   0x45)  /* deprecated */
 #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46, \
 					struct kvm_userspace_memory_region)
 #define KVM_SET_TSS_ADDR          _IO(KVMIO,   0x47)
@@ -1541,6 +1545,8 @@  struct kvm_s390_ucas_mapping {
 #define KVM_SET_PMU_EVENT_FILTER  _IOW(KVMIO,  0xb2, struct kvm_pmu_event_filter)
 #define KVM_PPC_SVM_OFF		  _IO(KVMIO,  0xb3)
 #define KVM_ARM_MTE_COPY_TAGS	  _IOR(KVMIO,  0xb4, struct kvm_arm_copy_mte_tags)
+/* Available with KVM_CAP_COUNTER_OFFSET */
+#define KVM_ARM_SET_COUNTER_OFFSET _IOW(KVMIO,  0xb5, struct kvm_arm_counter_offset)
 
 /* ioctl for vm fd */
 #define KVM_CREATE_DEVICE	  _IOWR(KVMIO,  0xe0, struct kvm_create_device)
diff --git a/linux-headers/linux/psp-sev.h b/linux-headers/linux/psp-sev.h
index 51d8b3940e14..12ccb70099d4 100644
--- a/linux-headers/linux/psp-sev.h
+++ b/linux-headers/linux/psp-sev.h
@@ -36,6 +36,13 @@  enum {
  * SEV Firmware status code
  */
 typedef enum {
+	/*
+	 * This error code is not in the SEV spec. Its purpose is to convey that
+	 * there was an error that prevented the SEV firmware from being called.
+	 * The SEV API error codes are 16 bits, so the -1 value will not overlap
+	 * with possible values from the specification.
+	 */
+	SEV_RET_NO_FW_CALL = -1,
 	SEV_RET_SUCCESS = 0,
 	SEV_RET_INVALID_PLATFORM_STATE,
 	SEV_RET_INVALID_GUEST_STATE,
diff --git a/linux-headers/linux/userfaultfd.h b/linux-headers/linux/userfaultfd.h
index ba5d0df52fb8..14e402263a8a 100644
--- a/linux-headers/linux/userfaultfd.h
+++ b/linux-headers/linux/userfaultfd.h
@@ -38,7 +38,8 @@ 
 			   UFFD_FEATURE_MINOR_HUGETLBFS |	\
 			   UFFD_FEATURE_MINOR_SHMEM |		\
 			   UFFD_FEATURE_EXACT_ADDRESS |		\
-			   UFFD_FEATURE_WP_HUGETLBFS_SHMEM)
+			   UFFD_FEATURE_WP_HUGETLBFS_SHMEM |	\
+			   UFFD_FEATURE_WP_UNPOPULATED)
 #define UFFD_API_IOCTLS				\
 	((__u64)1 << _UFFDIO_REGISTER |		\
 	 (__u64)1 << _UFFDIO_UNREGISTER |	\
@@ -203,6 +204,12 @@  struct uffdio_api {
 	 *
 	 * UFFD_FEATURE_WP_HUGETLBFS_SHMEM indicates that userfaultfd
 	 * write-protection mode is supported on both shmem and hugetlbfs.
+	 *
+	 * UFFD_FEATURE_WP_UNPOPULATED indicates that userfaultfd
+	 * write-protection mode will always apply to unpopulated pages
+	 * (i.e. empty ptes).  This will be the default behavior for shmem
+	 * & hugetlbfs, so this flag only affects anonymous memory behavior
+	 * when userfault write-protection mode is registered.
 	 */
 #define UFFD_FEATURE_PAGEFAULT_FLAG_WP		(1<<0)
 #define UFFD_FEATURE_EVENT_FORK			(1<<1)
@@ -217,6 +224,7 @@  struct uffdio_api {
 #define UFFD_FEATURE_MINOR_SHMEM		(1<<10)
 #define UFFD_FEATURE_EXACT_ADDRESS		(1<<11)
 #define UFFD_FEATURE_WP_HUGETLBFS_SHMEM		(1<<12)
+#define UFFD_FEATURE_WP_UNPOPULATED		(1<<13)
 	__u64 features;
 
 	__u64 ioctls;
@@ -297,6 +305,13 @@  struct uffdio_writeprotect {
 struct uffdio_continue {
 	struct uffdio_range range;
 #define UFFDIO_CONTINUE_MODE_DONTWAKE		((__u64)1<<0)
+	/*
+	 * UFFDIO_CONTINUE_MODE_WP will map the page write protected on
+	 * the fly.  UFFDIO_CONTINUE_MODE_WP is available only if the
+	 * write protected ioctl is implemented for the range
+	 * according to the uffdio_register.ioctls.
+	 */
+#define UFFDIO_CONTINUE_MODE_WP			((__u64)1<<1)
 	__u64 mode;
 
 	/*
diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h
index 4a534edbdcba..2658fda219e8 100644
--- a/linux-headers/linux/vfio.h
+++ b/linux-headers/linux/vfio.h
@@ -646,6 +646,15 @@  enum {
 	VFIO_CCW_NUM_IRQS
 };
 
+/*
+ * The vfio-ap bus driver makes use of the following IRQ index mapping.
+ * Unimplemented IRQ types return a count of zero.
+ */
+enum {
+	VFIO_AP_REQ_IRQ_INDEX,
+	VFIO_AP_NUM_IRQS
+};
+
 /**
  * VFIO_DEVICE_GET_PCI_HOT_RESET_INFO - _IOWR(VFIO_TYPE, VFIO_BASE + 12,
  *					      struct vfio_pci_hot_reset_info)