mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-03 18:20:25 +02:00 
			
		
		
		
	tools headers UAPI: Sync linux/kvm.h with the kernel sources
To pick the changes in:19238e75bd("kvm: x86: Allow userspace to handle emulation errors")cb082bfab5("KVM: stats: Add fd-based API to read binary stats data")b87cc116c7("KVM: PPC: Book3S HV: Add KVM_CAP_PPC_RPT_INVALIDATE capability")f0376edb1d("KVM: arm64: Add ioctl to fetch/store tags in a guest")0dbb112304("KVM: X86: Introduce KVM_HC_MAP_GPA_RANGE hypercall")6dba940352("KVM: x86: Introduce KVM_GET_SREGS2 / KVM_SET_SREGS2")644f706719("KVM: x86: hyper-v: Introduce KVM_CAP_HYPERV_ENFORCE_CPUID") That automatically adds support for these new ioctls: $ tools/perf/trace/beauty/kvm_ioctl.sh > before $ cp include/uapi/linux/kvm.h tools/include/uapi/linux/kvm.h $ tools/perf/trace/beauty/kvm_ioctl.sh > after $ diff -u before after --- before 2021-07-01 13:42:07.006387354 -0300 +++ after 2021-07-01 13:45:16.051649301 -0300 @@ -95,6 +95,9 @@ [0xc9] = "XEN_HVM_SET_ATTR", [0xca] = "XEN_VCPU_GET_ATTR", [0xcb] = "XEN_VCPU_SET_ATTR", + [0xcc] = "GET_SREGS2", + [0xcd] = "SET_SREGS2", + [0xce] = "GET_STATS_FD", [0xe0] = "CREATE_DEVICE", [0xe1] = "SET_DEVICE_ATTR", [0xe2] = "GET_DEVICE_ATTR", $ This silences these perf build warning: Warning: Kernel ABI header at 'tools/arch/x86/include/uapi/asm/kvm.h' differs from latest version at 'arch/x86/include/uapi/asm/kvm.h' diff -u tools/arch/x86/include/uapi/asm/kvm.h arch/x86/include/uapi/asm/kvm.h Warning: Kernel ABI header at 'tools/include/uapi/linux/kvm.h' differs from latest version at 'include/uapi/linux/kvm.h' diff -u tools/include/uapi/linux/kvm.h include/uapi/linux/kvm.h Cc: Aaron Lewis <aaronlewis@google.com> Cc: Ashish Kalra <ashish.kalra@amd.com> Cc: Bharata B Rao <bharata@linux.ibm.com> Cc: Jing Zhang <jingzhangos@google.com> Cc: Marc Zyngier <maz@kernel.org> Cc: Maxim Levitsky <mlevitsk@redhat.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Steven Price <steven.price@arm.com> Cc: Vitaly Kuznetsov <vkuznets@redhat.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
		
							parent
							
								
									cc200a7de9
								
							
						
					
					
						commit
						e48f62aece
					
				
					 2 changed files with 118 additions and 0 deletions
				
			
		| 
						 | 
					@ -159,6 +159,19 @@ struct kvm_sregs {
 | 
				
			||||||
	__u64 interrupt_bitmap[(KVM_NR_INTERRUPTS + 63) / 64];
 | 
						__u64 interrupt_bitmap[(KVM_NR_INTERRUPTS + 63) / 64];
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct kvm_sregs2 {
 | 
				
			||||||
 | 
						/* out (KVM_GET_SREGS2) / in (KVM_SET_SREGS2) */
 | 
				
			||||||
 | 
						struct kvm_segment cs, ds, es, fs, gs, ss;
 | 
				
			||||||
 | 
						struct kvm_segment tr, ldt;
 | 
				
			||||||
 | 
						struct kvm_dtable gdt, idt;
 | 
				
			||||||
 | 
						__u64 cr0, cr2, cr3, cr4, cr8;
 | 
				
			||||||
 | 
						__u64 efer;
 | 
				
			||||||
 | 
						__u64 apic_base;
 | 
				
			||||||
 | 
						__u64 flags;
 | 
				
			||||||
 | 
						__u64 pdptrs[4];
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					#define KVM_SREGS2_FLAGS_PDPTRS_VALID 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* for KVM_GET_FPU and KVM_SET_FPU */
 | 
					/* for KVM_GET_FPU and KVM_SET_FPU */
 | 
				
			||||||
struct kvm_fpu {
 | 
					struct kvm_fpu {
 | 
				
			||||||
	__u8  fpr[8][16];
 | 
						__u8  fpr[8][16];
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -280,6 +280,9 @@ struct kvm_xen_exit {
 | 
				
			||||||
/* Encounter unexpected vm-exit reason */
 | 
					/* Encounter unexpected vm-exit reason */
 | 
				
			||||||
#define KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON	4
 | 
					#define KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON	4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Flags that describe what fields in emulation_failure hold valid data. */
 | 
				
			||||||
 | 
					#define KVM_INTERNAL_ERROR_EMULATION_FLAG_INSTRUCTION_BYTES (1ULL << 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
 | 
					/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
 | 
				
			||||||
struct kvm_run {
 | 
					struct kvm_run {
 | 
				
			||||||
	/* in */
 | 
						/* in */
 | 
				
			||||||
| 
						 | 
					@ -383,6 +386,25 @@ struct kvm_run {
 | 
				
			||||||
			__u32 ndata;
 | 
								__u32 ndata;
 | 
				
			||||||
			__u64 data[16];
 | 
								__u64 data[16];
 | 
				
			||||||
		} internal;
 | 
							} internal;
 | 
				
			||||||
 | 
							/*
 | 
				
			||||||
 | 
							 * KVM_INTERNAL_ERROR_EMULATION
 | 
				
			||||||
 | 
							 *
 | 
				
			||||||
 | 
							 * "struct emulation_failure" is an overlay of "struct internal"
 | 
				
			||||||
 | 
							 * that is used for the KVM_INTERNAL_ERROR_EMULATION sub-type of
 | 
				
			||||||
 | 
							 * KVM_EXIT_INTERNAL_ERROR.  Note, unlike other internal error
 | 
				
			||||||
 | 
							 * sub-types, this struct is ABI!  It also needs to be backwards
 | 
				
			||||||
 | 
							 * compatible with "struct internal".  Take special care that
 | 
				
			||||||
 | 
							 * "ndata" is correct, that new fields are enumerated in "flags",
 | 
				
			||||||
 | 
							 * and that each flag enumerates fields that are 64-bit aligned
 | 
				
			||||||
 | 
							 * and sized (so that ndata+internal.data[] is valid/accurate).
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							struct {
 | 
				
			||||||
 | 
								__u32 suberror;
 | 
				
			||||||
 | 
								__u32 ndata;
 | 
				
			||||||
 | 
								__u64 flags;
 | 
				
			||||||
 | 
								__u8  insn_size;
 | 
				
			||||||
 | 
								__u8  insn_bytes[15];
 | 
				
			||||||
 | 
							} emulation_failure;
 | 
				
			||||||
		/* KVM_EXIT_OSI */
 | 
							/* KVM_EXIT_OSI */
 | 
				
			||||||
		struct {
 | 
							struct {
 | 
				
			||||||
			__u64 gprs[32];
 | 
								__u64 gprs[32];
 | 
				
			||||||
| 
						 | 
					@ -1083,6 +1105,13 @@ struct kvm_ppc_resize_hpt {
 | 
				
			||||||
#define KVM_CAP_SGX_ATTRIBUTE 196
 | 
					#define KVM_CAP_SGX_ATTRIBUTE 196
 | 
				
			||||||
#define KVM_CAP_VM_COPY_ENC_CONTEXT_FROM 197
 | 
					#define KVM_CAP_VM_COPY_ENC_CONTEXT_FROM 197
 | 
				
			||||||
#define KVM_CAP_PTP_KVM 198
 | 
					#define KVM_CAP_PTP_KVM 198
 | 
				
			||||||
 | 
					#define KVM_CAP_HYPERV_ENFORCE_CPUID 199
 | 
				
			||||||
 | 
					#define KVM_CAP_SREGS2 200
 | 
				
			||||||
 | 
					#define KVM_CAP_EXIT_HYPERCALL 201
 | 
				
			||||||
 | 
					#define KVM_CAP_PPC_RPT_INVALIDATE 202
 | 
				
			||||||
 | 
					#define KVM_CAP_BINARY_STATS_FD 203
 | 
				
			||||||
 | 
					#define KVM_CAP_EXIT_ON_EMULATION_FAILURE 204
 | 
				
			||||||
 | 
					#define KVM_CAP_ARM_MTE 205
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef KVM_CAP_IRQ_ROUTING
 | 
					#ifdef KVM_CAP_IRQ_ROUTING
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1428,6 +1457,7 @@ struct kvm_s390_ucas_mapping {
 | 
				
			||||||
/* Available with KVM_CAP_PMU_EVENT_FILTER */
 | 
					/* Available with KVM_CAP_PMU_EVENT_FILTER */
 | 
				
			||||||
#define KVM_SET_PMU_EVENT_FILTER  _IOW(KVMIO,  0xb2, struct kvm_pmu_event_filter)
 | 
					#define KVM_SET_PMU_EVENT_FILTER  _IOW(KVMIO,  0xb2, struct kvm_pmu_event_filter)
 | 
				
			||||||
#define KVM_PPC_SVM_OFF		  _IO(KVMIO,  0xb3)
 | 
					#define KVM_PPC_SVM_OFF		  _IO(KVMIO,  0xb3)
 | 
				
			||||||
 | 
					#define KVM_ARM_MTE_COPY_TAGS	  _IOR(KVMIO,  0xb4, struct kvm_arm_copy_mte_tags)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ioctl for vm fd */
 | 
					/* ioctl for vm fd */
 | 
				
			||||||
#define KVM_CREATE_DEVICE	  _IOWR(KVMIO,  0xe0, struct kvm_create_device)
 | 
					#define KVM_CREATE_DEVICE	  _IOWR(KVMIO,  0xe0, struct kvm_create_device)
 | 
				
			||||||
| 
						 | 
					@ -1621,6 +1651,9 @@ struct kvm_xen_hvm_attr {
 | 
				
			||||||
#define KVM_XEN_VCPU_GET_ATTR	_IOWR(KVMIO, 0xca, struct kvm_xen_vcpu_attr)
 | 
					#define KVM_XEN_VCPU_GET_ATTR	_IOWR(KVMIO, 0xca, struct kvm_xen_vcpu_attr)
 | 
				
			||||||
#define KVM_XEN_VCPU_SET_ATTR	_IOW(KVMIO,  0xcb, struct kvm_xen_vcpu_attr)
 | 
					#define KVM_XEN_VCPU_SET_ATTR	_IOW(KVMIO,  0xcb, struct kvm_xen_vcpu_attr)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define KVM_GET_SREGS2             _IOR(KVMIO,  0xcc, struct kvm_sregs2)
 | 
				
			||||||
 | 
					#define KVM_SET_SREGS2             _IOW(KVMIO,  0xcd, struct kvm_sregs2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct kvm_xen_vcpu_attr {
 | 
					struct kvm_xen_vcpu_attr {
 | 
				
			||||||
	__u16 type;
 | 
						__u16 type;
 | 
				
			||||||
	__u16 pad[3];
 | 
						__u16 pad[3];
 | 
				
			||||||
| 
						 | 
					@ -1899,4 +1932,76 @@ struct kvm_dirty_gfn {
 | 
				
			||||||
#define KVM_BUS_LOCK_DETECTION_OFF             (1 << 0)
 | 
					#define KVM_BUS_LOCK_DETECTION_OFF             (1 << 0)
 | 
				
			||||||
#define KVM_BUS_LOCK_DETECTION_EXIT            (1 << 1)
 | 
					#define KVM_BUS_LOCK_DETECTION_EXIT            (1 << 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * struct kvm_stats_header - Header of per vm/vcpu binary statistics data.
 | 
				
			||||||
 | 
					 * @flags: Some extra information for header, always 0 for now.
 | 
				
			||||||
 | 
					 * @name_size: The size in bytes of the memory which contains statistics
 | 
				
			||||||
 | 
					 *             name string including trailing '\0'. The memory is allocated
 | 
				
			||||||
 | 
					 *             at the send of statistics descriptor.
 | 
				
			||||||
 | 
					 * @num_desc: The number of statistics the vm or vcpu has.
 | 
				
			||||||
 | 
					 * @id_offset: The offset of the vm/vcpu stats' id string in the file pointed
 | 
				
			||||||
 | 
					 *             by vm/vcpu stats fd.
 | 
				
			||||||
 | 
					 * @desc_offset: The offset of the vm/vcpu stats' descriptor block in the file
 | 
				
			||||||
 | 
					 *               pointd by vm/vcpu stats fd.
 | 
				
			||||||
 | 
					 * @data_offset: The offset of the vm/vcpu stats' data block in the file
 | 
				
			||||||
 | 
					 *               pointed by vm/vcpu stats fd.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This is the header userspace needs to read from stats fd before any other
 | 
				
			||||||
 | 
					 * readings. It is used by userspace to discover all the information about the
 | 
				
			||||||
 | 
					 * vm/vcpu's binary statistics.
 | 
				
			||||||
 | 
					 * Userspace reads this header from the start of the vm/vcpu's stats fd.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct kvm_stats_header {
 | 
				
			||||||
 | 
						__u32 flags;
 | 
				
			||||||
 | 
						__u32 name_size;
 | 
				
			||||||
 | 
						__u32 num_desc;
 | 
				
			||||||
 | 
						__u32 id_offset;
 | 
				
			||||||
 | 
						__u32 desc_offset;
 | 
				
			||||||
 | 
						__u32 data_offset;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define KVM_STATS_TYPE_SHIFT		0
 | 
				
			||||||
 | 
					#define KVM_STATS_TYPE_MASK		(0xF << KVM_STATS_TYPE_SHIFT)
 | 
				
			||||||
 | 
					#define KVM_STATS_TYPE_CUMULATIVE	(0x0 << KVM_STATS_TYPE_SHIFT)
 | 
				
			||||||
 | 
					#define KVM_STATS_TYPE_INSTANT		(0x1 << KVM_STATS_TYPE_SHIFT)
 | 
				
			||||||
 | 
					#define KVM_STATS_TYPE_PEAK		(0x2 << KVM_STATS_TYPE_SHIFT)
 | 
				
			||||||
 | 
					#define KVM_STATS_TYPE_MAX		KVM_STATS_TYPE_PEAK
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define KVM_STATS_UNIT_SHIFT		4
 | 
				
			||||||
 | 
					#define KVM_STATS_UNIT_MASK		(0xF << KVM_STATS_UNIT_SHIFT)
 | 
				
			||||||
 | 
					#define KVM_STATS_UNIT_NONE		(0x0 << KVM_STATS_UNIT_SHIFT)
 | 
				
			||||||
 | 
					#define KVM_STATS_UNIT_BYTES		(0x1 << KVM_STATS_UNIT_SHIFT)
 | 
				
			||||||
 | 
					#define KVM_STATS_UNIT_SECONDS		(0x2 << KVM_STATS_UNIT_SHIFT)
 | 
				
			||||||
 | 
					#define KVM_STATS_UNIT_CYCLES		(0x3 << KVM_STATS_UNIT_SHIFT)
 | 
				
			||||||
 | 
					#define KVM_STATS_UNIT_MAX		KVM_STATS_UNIT_CYCLES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define KVM_STATS_BASE_SHIFT		8
 | 
				
			||||||
 | 
					#define KVM_STATS_BASE_MASK		(0xF << KVM_STATS_BASE_SHIFT)
 | 
				
			||||||
 | 
					#define KVM_STATS_BASE_POW10		(0x0 << KVM_STATS_BASE_SHIFT)
 | 
				
			||||||
 | 
					#define KVM_STATS_BASE_POW2		(0x1 << KVM_STATS_BASE_SHIFT)
 | 
				
			||||||
 | 
					#define KVM_STATS_BASE_MAX		KVM_STATS_BASE_POW2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * struct kvm_stats_desc - Descriptor of a KVM statistics.
 | 
				
			||||||
 | 
					 * @flags: Annotations of the stats, like type, unit, etc.
 | 
				
			||||||
 | 
					 * @exponent: Used together with @flags to determine the unit.
 | 
				
			||||||
 | 
					 * @size: The number of data items for this stats.
 | 
				
			||||||
 | 
					 *        Every data item is of type __u64.
 | 
				
			||||||
 | 
					 * @offset: The offset of the stats to the start of stat structure in
 | 
				
			||||||
 | 
					 *          struture kvm or kvm_vcpu.
 | 
				
			||||||
 | 
					 * @unused: Unused field for future usage. Always 0 for now.
 | 
				
			||||||
 | 
					 * @name: The name string for the stats. Its size is indicated by the
 | 
				
			||||||
 | 
					 *        &kvm_stats_header->name_size.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct kvm_stats_desc {
 | 
				
			||||||
 | 
						__u32 flags;
 | 
				
			||||||
 | 
						__s16 exponent;
 | 
				
			||||||
 | 
						__u16 size;
 | 
				
			||||||
 | 
						__u32 offset;
 | 
				
			||||||
 | 
						__u32 unused;
 | 
				
			||||||
 | 
						char name[];
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define KVM_GET_STATS_FD  _IO(KVMIO,  0xce)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* __LINUX_KVM_H */
 | 
					#endif /* __LINUX_KVM_H */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue