hc
2023-12-11 1f93a7dfd1f8d5ff7a5c53246c7534fe2332d6f4
kernel/tools/include/uapi/linux/kvm.h
....@@ -116,7 +116,7 @@
116116 * ACPI gsi notion of irq.
117117 * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47..
118118 * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23..
119
- * For ARM: See Documentation/virtual/kvm/api.txt
119
+ * For ARM: See Documentation/virt/kvm/api.rst
120120 */
121121 union {
122122 __u32 irq;
....@@ -188,10 +188,13 @@
188188 struct kvm_hyperv_exit {
189189 #define KVM_EXIT_HYPERV_SYNIC 1
190190 #define KVM_EXIT_HYPERV_HCALL 2
191
+#define KVM_EXIT_HYPERV_SYNDBG 3
191192 __u32 type;
193
+ __u32 pad1;
192194 union {
193195 struct {
194196 __u32 msr;
197
+ __u32 pad2;
195198 __u64 control;
196199 __u64 evt_page;
197200 __u64 msg_page;
....@@ -201,6 +204,15 @@
201204 __u64 result;
202205 __u64 params[2];
203206 } hcall;
207
+ struct {
208
+ __u32 msr;
209
+ __u32 pad2;
210
+ __u64 control;
211
+ __u64 status;
212
+ __u64 send_page;
213
+ __u64 recv_page;
214
+ __u64 pending_page;
215
+ } syndbg;
204216 } u;
205217 };
206218
....@@ -235,6 +247,9 @@
235247 #define KVM_EXIT_S390_STSI 25
236248 #define KVM_EXIT_IOAPIC_EOI 26
237249 #define KVM_EXIT_HYPERV 27
250
+#define KVM_EXIT_ARM_NISV 28
251
+#define KVM_EXIT_X86_RDMSR 29
252
+#define KVM_EXIT_X86_WRMSR 30
238253
239254 /* For KVM_EXIT_INTERNAL_ERROR */
240255 /* Emulate instruction failed. */
....@@ -243,6 +258,8 @@
243258 #define KVM_INTERNAL_ERROR_SIMUL_EX 2
244259 /* Encounter unexpected vm-exit due to delivery event. */
245260 #define KVM_INTERNAL_ERROR_DELIVERY_EV 3
261
+/* Encounter unexpected vm-exit reason */
262
+#define KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON 4
246263
247264 /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
248265 struct kvm_run {
....@@ -274,6 +291,7 @@
274291 /* KVM_EXIT_FAIL_ENTRY */
275292 struct {
276293 __u64 hardware_entry_failure_reason;
294
+ __u32 cpu;
277295 } fail_entry;
278296 /* KVM_EXIT_EXCEPTION */
279297 struct {
....@@ -392,6 +410,22 @@
392410 } eoi;
393411 /* KVM_EXIT_HYPERV */
394412 struct kvm_hyperv_exit hyperv;
413
+ /* KVM_EXIT_ARM_NISV */
414
+ struct {
415
+ __u64 esr_iss;
416
+ __u64 fault_ipa;
417
+ } arm_nisv;
418
+ /* KVM_EXIT_X86_RDMSR / KVM_EXIT_X86_WRMSR */
419
+ struct {
420
+ __u8 error; /* user -> kernel */
421
+ __u8 pad[7];
422
+#define KVM_MSR_EXIT_REASON_INVAL (1 << 0)
423
+#define KVM_MSR_EXIT_REASON_UNKNOWN (1 << 1)
424
+#define KVM_MSR_EXIT_REASON_FILTER (1 << 2)
425
+ __u32 reason; /* kernel -> user */
426
+ __u32 index; /* kernel -> user */
427
+ __u64 data; /* kernel <-> user */
428
+ } msr;
395429 /* Fix the size of the union. */
396430 char padding[256];
397431 };
....@@ -420,13 +454,19 @@
420454 struct kvm_coalesced_mmio_zone {
421455 __u64 addr;
422456 __u32 size;
423
- __u32 pad;
457
+ union {
458
+ __u32 pad;
459
+ __u32 pio;
460
+ };
424461 };
425462
426463 struct kvm_coalesced_mmio {
427464 __u64 phys_addr;
428465 __u32 len;
429
- __u32 pad;
466
+ union {
467
+ __u32 pad;
468
+ __u32 pio;
469
+ };
430470 __u8 data[8];
431471 };
432472
....@@ -460,12 +500,17 @@
460500 __u32 size; /* amount of bytes */
461501 __u32 op; /* type of operation */
462502 __u64 buf; /* buffer in userspace */
463
- __u8 ar; /* the access register number */
464
- __u8 reserved[31]; /* should be set to 0 */
503
+ union {
504
+ __u8 ar; /* the access register number */
505
+ __u32 sida_offset; /* offset into the sida */
506
+ __u8 reserved[32]; /* should be set to 0 */
507
+ };
465508 };
466509 /* types for kvm_s390_mem_op->op */
467510 #define KVM_S390_MEMOP_LOGICAL_READ 0
468511 #define KVM_S390_MEMOP_LOGICAL_WRITE 1
512
+#define KVM_S390_MEMOP_SIDA_READ 2
513
+#define KVM_S390_MEMOP_SIDA_WRITE 3
469514 /* flags for kvm_s390_mem_op->flags */
470515 #define KVM_S390_MEMOP_F_CHECK_ONLY (1ULL << 0)
471516 #define KVM_S390_MEMOP_F_INJECT_EXCEPTION (1ULL << 1)
....@@ -480,6 +525,17 @@
480525 struct kvm_dirty_log {
481526 __u32 slot;
482527 __u32 padding1;
528
+ union {
529
+ void __user *dirty_bitmap; /* one bit per page */
530
+ __u64 padding2;
531
+ };
532
+};
533
+
534
+/* for KVM_CLEAR_DIRTY_LOG */
535
+struct kvm_clear_dirty_log {
536
+ __u32 slot;
537
+ __u32 num_pages;
538
+ __u64 first_page;
483539 union {
484540 void __user *dirty_bitmap; /* one bit per page */
485541 __u64 padding2;
....@@ -679,9 +735,11 @@
679735 #define KVM_X86_DISABLE_EXITS_MWAIT (1 << 0)
680736 #define KVM_X86_DISABLE_EXITS_HLT (1 << 1)
681737 #define KVM_X86_DISABLE_EXITS_PAUSE (1 << 2)
738
+#define KVM_X86_DISABLE_EXITS_CSTATE (1 << 3)
682739 #define KVM_X86_DISABLE_VALID_EXITS (KVM_X86_DISABLE_EXITS_MWAIT | \
683740 KVM_X86_DISABLE_EXITS_HLT | \
684
- KVM_X86_DISABLE_EXITS_PAUSE)
741
+ KVM_X86_DISABLE_EXITS_PAUSE | \
742
+ KVM_X86_DISABLE_EXITS_CSTATE)
685743
686744 /* for KVM_ENABLE_CAP */
687745 struct kvm_enable_cap {
....@@ -719,6 +777,7 @@
719777
720778 #define KVM_PPC_PAGE_SIZES_REAL 0x00000001
721779 #define KVM_PPC_1T_SEGMENTS 0x00000002
780
+#define KVM_PPC_NO_HASH 0x00000004
722781
723782 struct kvm_ppc_smmu_info {
724783 __u64 flags;
....@@ -744,12 +803,22 @@
744803 #define KVM_VM_PPC_HV 1
745804 #define KVM_VM_PPC_PR 2
746805
747
-/* on MIPS, 0 forces trap & emulate, 1 forces VZ ASE */
748
-#define KVM_VM_MIPS_TE 0
806
+/* on MIPS, 0 indicates auto, 1 forces VZ ASE, 2 forces trap & emulate */
807
+#define KVM_VM_MIPS_AUTO 0
749808 #define KVM_VM_MIPS_VZ 1
809
+#define KVM_VM_MIPS_TE 2
750810
751811 #define KVM_S390_SIE_PAGE_OFFSET 1
752812
813
+/*
814
+ * On arm64, machine type can be used to request the physical
815
+ * address size for the VM. Bits[7-0] are reserved for the guest
816
+ * PA size shift (i.e, log2(PA_Size)). For backward compatibility,
817
+ * value 0 implies the default IPA size, 40bits.
818
+ */
819
+#define KVM_VM_TYPE_ARM_IPA_SIZE_MASK 0xffULL
820
+#define KVM_VM_TYPE_ARM_IPA_SIZE(x) \
821
+ ((x) & KVM_VM_TYPE_ARM_IPA_SIZE_MASK)
753822 /*
754823 * ioctls for /dev/kvm fds:
755824 */
....@@ -953,6 +1022,37 @@
9531022 #define KVM_CAP_NESTED_STATE 157
9541023 #define KVM_CAP_ARM_INJECT_SERROR_ESR 158
9551024 #define KVM_CAP_MSR_PLATFORM_INFO 159
1025
+#define KVM_CAP_PPC_NESTED_HV 160
1026
+#define KVM_CAP_HYPERV_SEND_IPI 161
1027
+#define KVM_CAP_COALESCED_PIO 162
1028
+#define KVM_CAP_HYPERV_ENLIGHTENED_VMCS 163
1029
+#define KVM_CAP_EXCEPTION_PAYLOAD 164
1030
+#define KVM_CAP_ARM_VM_IPA_SIZE 165
1031
+#define KVM_CAP_MANUAL_DIRTY_LOG_PROTECT 166 /* Obsolete */
1032
+#define KVM_CAP_HYPERV_CPUID 167
1033
+#define KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2 168
1034
+#define KVM_CAP_PPC_IRQ_XIVE 169
1035
+#define KVM_CAP_ARM_SVE 170
1036
+#define KVM_CAP_ARM_PTRAUTH_ADDRESS 171
1037
+#define KVM_CAP_ARM_PTRAUTH_GENERIC 172
1038
+#define KVM_CAP_PMU_EVENT_FILTER 173
1039
+#define KVM_CAP_ARM_IRQ_LINE_LAYOUT_2 174
1040
+#define KVM_CAP_HYPERV_DIRECT_TLBFLUSH 175
1041
+#define KVM_CAP_PPC_GUEST_DEBUG_SSTEP 176
1042
+#define KVM_CAP_ARM_NISV_TO_USER 177
1043
+#define KVM_CAP_ARM_INJECT_EXT_DABT 178
1044
+#define KVM_CAP_S390_VCPU_RESETS 179
1045
+#define KVM_CAP_S390_PROTECTED 180
1046
+#define KVM_CAP_PPC_SECURE_GUEST 181
1047
+#define KVM_CAP_HALT_POLL 182
1048
+#define KVM_CAP_ASYNC_PF_INT 183
1049
+#define KVM_CAP_LAST_CPU 184
1050
+#define KVM_CAP_SMALLER_MAXPHYADDR 185
1051
+#define KVM_CAP_S390_DIAG318 186
1052
+#define KVM_CAP_STEAL_TIME 187
1053
+#define KVM_CAP_X86_USER_SPACE_MSR 188
1054
+#define KVM_CAP_X86_MSR_FILTER 189
1055
+#define KVM_CAP_ENFORCE_PV_FEATURE_CPUID 190
9561056
9571057 #ifdef KVM_CAP_IRQ_ROUTING
9581058
....@@ -1043,7 +1143,7 @@
10431143 *
10441144 * KVM_IRQFD_FLAG_RESAMPLE indicates resamplefd is valid and specifies
10451145 * the irqfd to operate in resampling mode for level triggered interrupt
1046
- * emulation. See Documentation/virtual/kvm/api.txt.
1146
+ * emulation. See Documentation/virt/kvm/api.rst.
10471147 */
10481148 #define KVM_IRQFD_FLAG_RESAMPLE (1 << 1)
10491149
....@@ -1099,6 +1199,7 @@
10991199 #define KVM_REG_S390 0x5000000000000000ULL
11001200 #define KVM_REG_ARM64 0x6000000000000000ULL
11011201 #define KVM_REG_MIPS 0x7000000000000000ULL
1202
+#define KVM_REG_RISCV 0x8000000000000000ULL
11021203
11031204 #define KVM_REG_SIZE_SHIFT 52
11041205 #define KVM_REG_SIZE_MASK 0x00f0000000000000ULL
....@@ -1110,6 +1211,7 @@
11101211 #define KVM_REG_SIZE_U256 0x0050000000000000ULL
11111212 #define KVM_REG_SIZE_U512 0x0060000000000000ULL
11121213 #define KVM_REG_SIZE_U1024 0x0070000000000000ULL
1214
+#define KVM_REG_SIZE_U2048 0x0080000000000000ULL
11131215
11141216 struct kvm_reg_list {
11151217 __u64 n; /* number of regs */
....@@ -1176,6 +1278,10 @@
11761278 #define KVM_DEV_TYPE_ARM_VGIC_V3 KVM_DEV_TYPE_ARM_VGIC_V3
11771279 KVM_DEV_TYPE_ARM_VGIC_ITS,
11781280 #define KVM_DEV_TYPE_ARM_VGIC_ITS KVM_DEV_TYPE_ARM_VGIC_ITS
1281
+ KVM_DEV_TYPE_XIVE,
1282
+#define KVM_DEV_TYPE_XIVE KVM_DEV_TYPE_XIVE
1283
+ KVM_DEV_TYPE_ARM_PV_TIME,
1284
+#define KVM_DEV_TYPE_ARM_PV_TIME KVM_DEV_TYPE_ARM_PV_TIME
11791285 KVM_DEV_TYPE_MAX,
11801286 };
11811287
....@@ -1284,6 +1390,9 @@
12841390 #define KVM_PPC_GET_RMMU_INFO _IOW(KVMIO, 0xb0, struct kvm_ppc_rmmu_info)
12851391 /* Available with KVM_CAP_PPC_GET_CPU_CHAR */
12861392 #define KVM_PPC_GET_CPU_CHAR _IOR(KVMIO, 0xb1, struct kvm_ppc_cpu_char)
1393
+/* Available with KVM_CAP_PMU_EVENT_FILTER */
1394
+#define KVM_SET_PMU_EVENT_FILTER _IOW(KVMIO, 0xb2, struct kvm_pmu_event_filter)
1395
+#define KVM_PPC_SVM_OFF _IO(KVMIO, 0xb3)
12871396
12881397 /* ioctl for vm fd */
12891398 #define KVM_CREATE_DEVICE _IOWR(KVMIO, 0xe0, struct kvm_create_device)
....@@ -1398,6 +1507,55 @@
13981507 /* Available with KVM_CAP_NESTED_STATE */
13991508 #define KVM_GET_NESTED_STATE _IOWR(KVMIO, 0xbe, struct kvm_nested_state)
14001509 #define KVM_SET_NESTED_STATE _IOW(KVMIO, 0xbf, struct kvm_nested_state)
1510
+
1511
+/* Available with KVM_CAP_MANUAL_DIRTY_LOG_PROTECT_2 */
1512
+#define KVM_CLEAR_DIRTY_LOG _IOWR(KVMIO, 0xc0, struct kvm_clear_dirty_log)
1513
+
1514
+/* Available with KVM_CAP_HYPERV_CPUID */
1515
+#define KVM_GET_SUPPORTED_HV_CPUID _IOWR(KVMIO, 0xc1, struct kvm_cpuid2)
1516
+
1517
+/* Available with KVM_CAP_ARM_SVE */
1518
+#define KVM_ARM_VCPU_FINALIZE _IOW(KVMIO, 0xc2, int)
1519
+
1520
+/* Available with KVM_CAP_S390_VCPU_RESETS */
1521
+#define KVM_S390_NORMAL_RESET _IO(KVMIO, 0xc3)
1522
+#define KVM_S390_CLEAR_RESET _IO(KVMIO, 0xc4)
1523
+
1524
+struct kvm_s390_pv_sec_parm {
1525
+ __u64 origin;
1526
+ __u64 length;
1527
+};
1528
+
1529
+struct kvm_s390_pv_unp {
1530
+ __u64 addr;
1531
+ __u64 size;
1532
+ __u64 tweak;
1533
+};
1534
+
1535
+enum pv_cmd_id {
1536
+ KVM_PV_ENABLE,
1537
+ KVM_PV_DISABLE,
1538
+ KVM_PV_SET_SEC_PARMS,
1539
+ KVM_PV_UNPACK,
1540
+ KVM_PV_VERIFY,
1541
+ KVM_PV_PREP_RESET,
1542
+ KVM_PV_UNSHARE_ALL,
1543
+};
1544
+
1545
+struct kvm_pv_cmd {
1546
+ __u32 cmd; /* Command to be executed */
1547
+ __u16 rc; /* Ultravisor return code */
1548
+ __u16 rrc; /* Ultravisor return reason code */
1549
+ __u64 data; /* Data or address */
1550
+ __u32 flags; /* flags for future extensions. Must be 0 for now */
1551
+ __u32 reserved[3];
1552
+};
1553
+
1554
+/* Available with KVM_CAP_S390_PROTECTED */
1555
+#define KVM_S390_PV_COMMAND _IOWR(KVMIO, 0xc5, struct kvm_pv_cmd)
1556
+
1557
+/* Available with KVM_CAP_X86_MSR_FILTER */
1558
+#define KVM_X86_SET_MSR_FILTER _IOW(KVMIO, 0xc6, struct kvm_msr_filter)
14011559
14021560 /* Secure Encrypted Virtualization command */
14031561 enum sev_cmd_id {
....@@ -1549,4 +1707,7 @@
15491707 #define KVM_HYPERV_CONN_ID_MASK 0x00ffffff
15501708 #define KVM_HYPERV_EVENTFD_DEASSIGN (1 << 0)
15511709
1710
+#define KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE (1 << 0)
1711
+#define KVM_DIRTY_LOG_INITIALLY_SET (1 << 1)
1712
+
15521713 #endif /* __LINUX_KVM_H */