Sync (copy) the following v4.12 kernel headers to the tooling headers: arch/x86/include/asm/disabled-features.h: arch/x86/include/uapi/asm/kvm.h: arch/powerpc/include/uapi/asm/kvm.h: arch/s390/include/uapi/asm/kvm.h: arch/arm/include/uapi/asm/kvm.h: arch/arm64/include/uapi/asm/kvm.h: - 'struct kvm_sync_regs' got changed in an ABI-incompatible way, fortunately none of the (in-kernel) tooling relied on it - new KVM_DEV calls added arch/x86/include/asm/required-features.h: - 5-level paging hardware ABI detail added arch/x86/include/asm/cpufeatures.h: - new CPU feature added arch/x86/include/uapi/asm/vmx.h: - new VMX exit conditions None of the changes requires fixes in the tooling source code. This addresses the following warnings: Warning: include/uapi/linux/stat.h differs from kernel Warning: arch/x86/include/asm/disabled-features.h differs from kernel Warning: arch/x86/include/asm/required-features.h differs from kernel Warning: arch/x86/include/asm/cpufeatures.h differs from kernel Warning: arch/x86/include/uapi/asm/kvm.h differs from kernel Warning: arch/x86/include/uapi/asm/vmx.h differs from kernel Warning: arch/powerpc/include/uapi/asm/kvm.h differs from kernel Warning: arch/s390/include/uapi/asm/kvm.h differs from kernel Warning: arch/arm/include/uapi/asm/kvm.h differs from kernel Warning: arch/arm64/include/uapi/asm/kvm.h differs from kernel
Unified · Split
| @@ -27,6 +27,8 @@ · 26 unmodified lines | ||
| 27 | 27 | #define __KVM_HAVE_IRQ_LINE |
| 28 | 28 | #define __KVM_HAVE_READONLY_MEM |
| 29 | 29 | |
| 30 | +#define KVM_COALESCED_MMIO_PAGE_OFFSET 1 | |
| 31 | + | |
| 30 | 32 | #define KVM_REG_SIZE(id) \ |
| 31 | 33 | (1U << (((id) & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT)) |
| 32 | 34 | |
| @@ -114,6 +116,8 @@ struct kvm_debug_exit_arch { · 81 unmodified lines | ||
| 114 | 116 | }; |
| 115 | 117 | |
| 116 | 118 | struct kvm_sync_regs { |
| 119 | + /* Used with KVM_CAP_ARM_USER_IRQ */ | |
| 120 | + __u64 device_irq_level; | |
| 117 | 121 | }; |
| 118 | 122 | |
| 119 | 123 | struct kvm_arch_memory_slot { |
| @@ -192,13 +196,17 @@ struct kvm_arch_memory_slot { · 72 unmodified lines | ||
| 192 | 196 | #define KVM_DEV_ARM_VGIC_GRP_REDIST_REGS 5 |
| 193 | 197 | #define KVM_DEV_ARM_VGIC_GRP_CPU_SYSREGS 6 |
| 194 | 198 | #define KVM_DEV_ARM_VGIC_GRP_LEVEL_INFO 7 |
| 199 | +#define KVM_DEV_ARM_VGIC_GRP_ITS_REGS 8 | |
| 195 | 200 | #define KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_SHIFT 10 |
| 196 | 201 | #define KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_MASK \ |
| 197 | 202 | (0x3fffffULL << KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_SHIFT) |
| 198 | 203 | #define KVM_DEV_ARM_VGIC_LINE_LEVEL_INTID_MASK 0x3ff |
| 199 | 204 | #define VGIC_LEVEL_INFO_LINE_LEVEL 0 |
| 200 | 205 | |
| 201 | −#define KVM_DEV_ARM_VGIC_CTRL_INIT 0 | |
| 206 | +#define KVM_DEV_ARM_VGIC_CTRL_INIT 0 | |
| 207 | +#define KVM_DEV_ARM_ITS_SAVE_TABLES 1 | |
| 208 | +#define KVM_DEV_ARM_ITS_RESTORE_TABLES 2 | |
| 209 | +#define KVM_DEV_ARM_VGIC_SAVE_PENDING_TABLES 3 | |
| 202 | 210 | |
| 203 | 211 | /* KVM_IRQ_LINE irq field index values */ |
| 204 | 212 | #define KVM_ARM_IRQ_TYPE_SHIFT 24 |
| @@ -39,6 +39,8 @@ · 38 unmodified lines | ||
| 39 | 39 | #define __KVM_HAVE_IRQ_LINE |
| 40 | 40 | #define __KVM_HAVE_READONLY_MEM |
| 41 | 41 | |
| 42 | +#define KVM_COALESCED_MMIO_PAGE_OFFSET 1 | |
| 43 | + | |
| 42 | 44 | #define KVM_REG_SIZE(id) \ |
| 43 | 45 | (1U << (((id) & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT)) |
| 44 | 46 | |
| @@ -143,6 +145,8 @@ struct kvm_debug_exit_arch { · 98 unmodified lines | ||
| 143 | 145 | #define KVM_GUESTDBG_USE_HW (1 << 17) |
| 144 | 146 | |
| 145 | 147 | struct kvm_sync_regs { |
| 148 | + /* Used with KVM_CAP_ARM_USER_IRQ */ | |
| 149 | + __u64 device_irq_level; | |
| 146 | 150 | }; |
| 147 | 151 | |
| 148 | 152 | struct kvm_arch_memory_slot { |
| @@ -212,13 +216,17 @@ struct kvm_arch_memory_slot { · 63 unmodified lines | ||
| 212 | 216 | #define KVM_DEV_ARM_VGIC_GRP_REDIST_REGS 5 |
| 213 | 217 | #define KVM_DEV_ARM_VGIC_GRP_CPU_SYSREGS 6 |
| 214 | 218 | #define KVM_DEV_ARM_VGIC_GRP_LEVEL_INFO 7 |
| 219 | +#define KVM_DEV_ARM_VGIC_GRP_ITS_REGS 8 | |
| 215 | 220 | #define KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_SHIFT 10 |
| 216 | 221 | #define KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_MASK \ |
| 217 | 222 | (0x3fffffULL << KVM_DEV_ARM_VGIC_LINE_LEVEL_INFO_SHIFT) |
| 218 | 223 | #define KVM_DEV_ARM_VGIC_LINE_LEVEL_INTID_MASK 0x3ff |
| 219 | 224 | #define VGIC_LEVEL_INFO_LINE_LEVEL 0 |
| 220 | 225 | |
| 221 | −#define KVM_DEV_ARM_VGIC_CTRL_INIT 0 | |
| 226 | +#define KVM_DEV_ARM_VGIC_CTRL_INIT 0 | |
| 227 | +#define KVM_DEV_ARM_ITS_SAVE_TABLES 1 | |
| 228 | +#define KVM_DEV_ARM_ITS_RESTORE_TABLES 2 | |
| 229 | +#define KVM_DEV_ARM_VGIC_SAVE_PENDING_TABLES 3 | |
| 222 | 230 | |
| 223 | 231 | /* Device Control API on vcpu fd */ |
| 224 | 232 | #define KVM_ARM_VCPU_PMU_V3_CTRL 0 |
| @@ -29,6 +29,9 @@ · 28 unmodified lines | ||
| 29 | 29 | #define __KVM_HAVE_IRQ_LINE |
| 30 | 30 | #define __KVM_HAVE_GUEST_DEBUG |
| 31 | 31 | |
| 32 | +/* Not always available, but if it is, this is the correct offset. */ | |
| 33 | +#define KVM_COALESCED_MMIO_PAGE_OFFSET 1 | |
| 34 | + | |
| 32 | 35 | struct kvm_regs { |
| 33 | 36 | __u64 pc; |
| 34 | 37 | __u64 cr; |
| @@ -26,6 +26,8 @@ · 25 unmodified lines | ||
| 26 | 26 | #define KVM_DEV_FLIC_ADAPTER_REGISTER 6 |
| 27 | 27 | #define KVM_DEV_FLIC_ADAPTER_MODIFY 7 |
| 28 | 28 | #define KVM_DEV_FLIC_CLEAR_IO_IRQ 8 |
| 29 | +#define KVM_DEV_FLIC_AISM 9 | |
| 30 | +#define KVM_DEV_FLIC_AIRQ_INJECT 10 | |
| 29 | 31 | /* |
| 30 | 32 | * We can have up to 4*64k pending subchannels + 8 adapter interrupts, |
| 31 | 33 | * as well as up to ASYNC_PF_PER_VCPU*KVM_MAX_VCPUS pfault done interrupts. |
| @@ -41,7 +43,14 @@ struct kvm_s390_io_adapter { · 9 unmodified lines | ||
| 41 | 43 | __u8 isc; |
| 42 | 44 | __u8 maskable; |
| 43 | 45 | __u8 swap; |
| 44 | − __u8 pad; | |
| 46 | + __u8 flags; | |
| 47 | +}; | |
| 48 | + | |
| 49 | +#define KVM_S390_ADAPTER_SUPPRESSIBLE 0x01 | |
| 50 | + | |
| 51 | +struct kvm_s390_ais_req { | |
| 52 | + __u8 isc; | |
| 53 | + __u16 mode; | |
| 45 | 54 | }; |
| 46 | 55 | |
| 47 | 56 | #define KVM_S390_IO_ADAPTER_MASK 1 |
| @@ -110,6 +119,7 @@ struct kvm_s390_vm_cpu_machine { · 62 unmodified lines | ||
| 110 | 119 | #define KVM_S390_VM_CPU_FEAT_CMMA 10 |
| 111 | 120 | #define KVM_S390_VM_CPU_FEAT_PFMFI 11 |
| 112 | 121 | #define KVM_S390_VM_CPU_FEAT_SIGPIF 12 |
| 122 | +#define KVM_S390_VM_CPU_FEAT_KSS 13 | |
| 113 | 123 | struct kvm_s390_vm_cpu_feat { |
| 114 | 124 | __u64 feat[16]; |
| 115 | 125 | }; |
| @@ -198,6 +208,10 @@ struct kvm_guest_debug_arch { · 82 unmodified lines | ||
| 198 | 208 | #define KVM_SYNC_VRS (1UL << 6) |
| 199 | 209 | #define KVM_SYNC_RICCB (1UL << 7) |
| 200 | 210 | #define KVM_SYNC_FPRS (1UL << 8) |
| 211 | +#define KVM_SYNC_GSCB (1UL << 9) | |
| 212 | +/* length and alignment of the sdnx as a power of two */ | |
| 213 | +#define SDNXC 8 | |
| 214 | +#define SDNXL (1UL << SDNXC) | |
| 201 | 215 | /* definition of registers in kvm_run */ |
| 202 | 216 | struct kvm_sync_regs { |
| 203 | 217 | __u64 prefix; /* prefix register */ |
| @@ -218,8 +232,16 @@ struct kvm_sync_regs { · 14 unmodified lines | ||
| 218 | 232 | }; |
| 219 | 233 | __u8 reserved[512]; /* for future vector expansion */ |
| 220 | 234 | __u32 fpc; /* valid on KVM_SYNC_VRS or KVM_SYNC_FPRS */ |
| 221 | − __u8 padding[52]; /* riccb needs to be 64byte aligned */ | |
| 235 | + __u8 padding1[52]; /* riccb needs to be 64byte aligned */ | |
| 222 | 236 | __u8 riccb[64]; /* runtime instrumentation controls block */ |
| 237 | + __u8 padding2[192]; /* sdnx needs to be 256byte aligned */ | |
| 238 | + union { | |
| 239 | + __u8 sdnx[SDNXL]; /* state description annex */ | |
| 240 | + struct { | |
| 241 | + __u64 reserved1[2]; | |
| 242 | + __u64 gscb[4]; | |
| 243 | + }; | |
| 244 | + }; | |
| 223 | 245 | }; |
| 224 | 246 | |
| 225 | 247 | #define KVM_REG_S390_TODPR (KVM_REG_S390 | KVM_REG_SIZE_U32 | 0x1) |
| @@ -202,6 +202,8 @@ · 201 unmodified lines | ||
| 202 | 202 | #define X86_FEATURE_AVX512_4VNNIW (7*32+16) /* AVX-512 Neural Network Instructions */ |
| 203 | 203 | #define X86_FEATURE_AVX512_4FMAPS (7*32+17) /* AVX-512 Multiply Accumulation Single precision */ |
| 204 | 204 | |
| 205 | +#define X86_FEATURE_MBA ( 7*32+18) /* Memory Bandwidth Allocation */ | |
| 206 | + | |
| 205 | 207 | /* Virtualization flags: Linux defined, word 8 */ |
| 206 | 208 | #define X86_FEATURE_TPR_SHADOW ( 8*32+ 0) /* Intel TPR Shadow */ |
| 207 | 209 | #define X86_FEATURE_VNMI ( 8*32+ 1) /* Intel Virtual NMI */ |
| @@ -36,6 +36,12 @@ · 35 unmodified lines | ||
| 36 | 36 | # define DISABLE_OSPKE (1<<(X86_FEATURE_OSPKE & 31)) |
| 37 | 37 | #endif /* CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS */ |
| 38 | 38 | |
| 39 | +#ifdef CONFIG_X86_5LEVEL | |
| 40 | +# define DISABLE_LA57 0 | |
| 41 | +#else | |
| 42 | +# define DISABLE_LA57 (1<<(X86_FEATURE_LA57 & 31)) | |
| 43 | +#endif | |
| 44 | + | |
| 39 | 45 | /* |
| 40 | 46 | * Make sure to add features to the correct mask |
| 41 | 47 | */ |
| @@ -55,7 +61,7 @@ · 13 unmodified lines | ||
| 55 | 61 | #define DISABLED_MASK13 0 |
| 56 | 62 | #define DISABLED_MASK14 0 |
| 57 | 63 | #define DISABLED_MASK15 0 |
| 58 | −#define DISABLED_MASK16 (DISABLE_PKU|DISABLE_OSPKE) | |
| 64 | +#define DISABLED_MASK16 (DISABLE_PKU|DISABLE_OSPKE|DISABLE_LA57) | |
| 59 | 65 | #define DISABLED_MASK17 0 |
| 60 | 66 | #define DISABLED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 18) |
| 61 | 67 | |
| @@ -53,6 +53,12 @@ · 52 unmodified lines | ||
| 53 | 53 | # define NEED_MOVBE 0 |
| 54 | 54 | #endif |
| 55 | 55 | |
| 56 | +#ifdef CONFIG_X86_5LEVEL | |
| 57 | +# define NEED_LA57 (1<<(X86_FEATURE_LA57 & 31)) | |
| 58 | +#else | |
| 59 | +# define NEED_LA57 0 | |
| 60 | +#endif | |
| 61 | + | |
| 56 | 62 | #ifdef CONFIG_X86_64 |
| 57 | 63 | #ifdef CONFIG_PARAVIRT |
| 58 | 64 | /* Paravirtualized systems may not have PSE or PGE available */ |
| @@ -98,7 +104,7 @@ · 39 unmodified lines | ||
| 98 | 104 | #define REQUIRED_MASK13 0 |
| 99 | 105 | #define REQUIRED_MASK14 0 |
| 100 | 106 | #define REQUIRED_MASK15 0 |
| 101 | −#define REQUIRED_MASK16 0 | |
| 107 | +#define REQUIRED_MASK16 (NEED_LA57) | |
| 102 | 108 | #define REQUIRED_MASK17 0 |
| 103 | 109 | #define REQUIRED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 18) |
| 104 | 110 | |
| @@ -9,6 +9,9 @@ · 8 unmodified lines | ||
| 9 | 9 | #include <linux/types.h> |
| 10 | 10 | #include <linux/ioctl.h> |
| 11 | 11 | |
| 12 | +#define KVM_PIO_PAGE_OFFSET 1 | |
| 13 | +#define KVM_COALESCED_MMIO_PAGE_OFFSET 2 | |
| 14 | + | |
| 12 | 15 | #define DE_VECTOR 0 |
| 13 | 16 | #define DB_VECTOR 1 |
| 14 | 17 | #define BP_VECTOR 3 |
| @@ -76,7 +76,11 @@ · 75 unmodified lines | ||
| 76 | 76 | #define EXIT_REASON_WBINVD 54 |
| 77 | 77 | #define EXIT_REASON_XSETBV 55 |
| 78 | 78 | #define EXIT_REASON_APIC_WRITE 56 |
| 79 | +#define EXIT_REASON_RDRAND 57 | |
| 79 | 80 | #define EXIT_REASON_INVPCID 58 |
| 81 | +#define EXIT_REASON_VMFUNC 59 | |
| 82 | +#define EXIT_REASON_ENCLS 60 | |
| 83 | +#define EXIT_REASON_RDSEED 61 | |
| 80 | 84 | #define EXIT_REASON_PML_FULL 62 |
| 81 | 85 | #define EXIT_REASON_XSAVES 63 |
| 82 | 86 | #define EXIT_REASON_XRSTORS 64 |
| @@ -90,6 +94,7 @@ · 7 unmodified lines | ||
| 90 | 94 | { EXIT_REASON_TASK_SWITCH, "TASK_SWITCH" }, \ |
| 91 | 95 | { EXIT_REASON_CPUID, "CPUID" }, \ |
| 92 | 96 | { EXIT_REASON_HLT, "HLT" }, \ |
| 97 | + { EXIT_REASON_INVD, "INVD" }, \ | |
| 93 | 98 | { EXIT_REASON_INVLPG, "INVLPG" }, \ |
| 94 | 99 | { EXIT_REASON_RDPMC, "RDPMC" }, \ |
| 95 | 100 | { EXIT_REASON_RDTSC, "RDTSC" }, \ |
| @@ -108,6 +113,8 @@ · 12 unmodified lines | ||
| 108 | 113 | { EXIT_REASON_IO_INSTRUCTION, "IO_INSTRUCTION" }, \ |
| 109 | 114 | { EXIT_REASON_MSR_READ, "MSR_READ" }, \ |
| 110 | 115 | { EXIT_REASON_MSR_WRITE, "MSR_WRITE" }, \ |
| 116 | + { EXIT_REASON_INVALID_STATE, "INVALID_STATE" }, \ | |
| 117 | + { EXIT_REASON_MSR_LOAD_FAIL, "MSR_LOAD_FAIL" }, \ | |
| 111 | 118 | { EXIT_REASON_MWAIT_INSTRUCTION, "MWAIT_INSTRUCTION" }, \ |
| 112 | 119 | { EXIT_REASON_MONITOR_TRAP_FLAG, "MONITOR_TRAP_FLAG" }, \ |
| 113 | 120 | { EXIT_REASON_MONITOR_INSTRUCTION, "MONITOR_INSTRUCTION" }, \ |
| @@ -115,20 +122,24 @@ · 1 unmodified line | ||
| 115 | 122 | { EXIT_REASON_MCE_DURING_VMENTRY, "MCE_DURING_VMENTRY" }, \ |
| 116 | 123 | { EXIT_REASON_TPR_BELOW_THRESHOLD, "TPR_BELOW_THRESHOLD" }, \ |
| 117 | 124 | { EXIT_REASON_APIC_ACCESS, "APIC_ACCESS" }, \ |
| 118 | − { EXIT_REASON_GDTR_IDTR, "GDTR_IDTR" }, \ | |
| 119 | − { EXIT_REASON_LDTR_TR, "LDTR_TR" }, \ | |
| 125 | + { EXIT_REASON_EOI_INDUCED, "EOI_INDUCED" }, \ | |
| 126 | + { EXIT_REASON_GDTR_IDTR, "GDTR_IDTR" }, \ | |
| 127 | + { EXIT_REASON_LDTR_TR, "LDTR_TR" }, \ | |
| 120 | 128 | { EXIT_REASON_EPT_VIOLATION, "EPT_VIOLATION" }, \ |
| 121 | 129 | { EXIT_REASON_EPT_MISCONFIG, "EPT_MISCONFIG" }, \ |
| 122 | 130 | { EXIT_REASON_INVEPT, "INVEPT" }, \ |
| 131 | + { EXIT_REASON_RDTSCP, "RDTSCP" }, \ | |
| 123 | 132 | { EXIT_REASON_PREEMPTION_TIMER, "PREEMPTION_TIMER" }, \ |
| 133 | + { EXIT_REASON_INVVPID, "INVVPID" }, \ | |
| 124 | 134 | { EXIT_REASON_WBINVD, "WBINVD" }, \ |
| 135 | + { EXIT_REASON_XSETBV, "XSETBV" }, \ | |
| 125 | 136 | { EXIT_REASON_APIC_WRITE, "APIC_WRITE" }, \ |
| 126 | − { EXIT_REASON_EOI_INDUCED, "EOI_INDUCED" }, \ | |
| 127 | − { EXIT_REASON_INVALID_STATE, "INVALID_STATE" }, \ | |
| 128 | − { EXIT_REASON_MSR_LOAD_FAIL, "MSR_LOAD_FAIL" }, \ | |
| 129 | − { EXIT_REASON_INVD, "INVD" }, \ | |
| 130 | − { EXIT_REASON_INVVPID, "INVVPID" }, \ | |
| 137 | + { EXIT_REASON_RDRAND, "RDRAND" }, \ | |
| 131 | 138 | { EXIT_REASON_INVPCID, "INVPCID" }, \ |
| 139 | + { EXIT_REASON_VMFUNC, "VMFUNC" }, \ | |
| 140 | + { EXIT_REASON_ENCLS, "ENCLS" }, \ | |
| 141 | + { EXIT_REASON_RDSEED, "RDSEED" }, \ | |
| 142 | + { EXIT_REASON_PML_FULL, "PML_FULL" }, \ | |
| 132 | 143 | { EXIT_REASON_XSAVES, "XSAVES" }, \ |
| 133 | 144 | { EXIT_REASON_XRSTORS, "XRSTORS" } |
| 134 | 145 | |
| @@ -48,17 +48,13 @@ · 47 unmodified lines | ||
| 48 | 48 | * tv_sec holds the number of seconds before (negative) or after (positive) |
| 49 | 49 | * 00:00:00 1st January 1970 UTC. |
| 50 | 50 | * |
| 51 | − * tv_nsec holds a number of nanoseconds before (0..-999,999,999 if tv_sec is | |
| 52 | − * negative) or after (0..999,999,999 if tv_sec is positive) the tv_sec time. | |
| 53 | − * | |
| 54 | − * Note that if both tv_sec and tv_nsec are non-zero, then the two values must | |
| 55 | − * either be both positive or both negative. | |
| 51 | + * tv_nsec holds a number of nanoseconds (0..999,999,999) after the tv_sec time. | |
| 56 | 52 | * |
| 57 | 53 | * __reserved is held in case we need a yet finer resolution. |
| 58 | 54 | */ |
| 59 | 55 | struct statx_timestamp { |
| 60 | 56 | __s64 tv_sec; |
| 61 | − __s32 tv_nsec; | |
| 57 | + __u32 tv_nsec; | |
| 62 | 58 | __s32 __reserved; |
| 63 | 59 | }; |
| 64 | 60 | |