hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/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,6 +188,7 @@
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;
192193 __u32 pad1;
193194 union {
....@@ -203,6 +204,15 @@
203204 __u64 result;
204205 __u64 params[2];
205206 } 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;
206216 } u;
207217 };
208218
....@@ -237,6 +247,9 @@
237247 #define KVM_EXIT_S390_STSI 25
238248 #define KVM_EXIT_IOAPIC_EOI 26
239249 #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
240253
241254 /* For KVM_EXIT_INTERNAL_ERROR */
242255 /* Emulate instruction failed. */
....@@ -245,6 +258,8 @@
245258 #define KVM_INTERNAL_ERROR_SIMUL_EX 2
246259 /* Encounter unexpected vm-exit due to delivery event. */
247260 #define KVM_INTERNAL_ERROR_DELIVERY_EV 3
261
+/* Encounter unexpected vm-exit reason */
262
+#define KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON 4
248263
249264 /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
250265 struct kvm_run {
....@@ -276,6 +291,7 @@
276291 /* KVM_EXIT_FAIL_ENTRY */
277292 struct {
278293 __u64 hardware_entry_failure_reason;
294
+ __u32 cpu;
279295 } fail_entry;
280296 /* KVM_EXIT_EXCEPTION */
281297 struct {
....@@ -394,6 +410,22 @@
394410 } eoi;
395411 /* KVM_EXIT_HYPERV */
396412 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;
397429 /* Fix the size of the union. */
398430 char padding[256];
399431 };
....@@ -422,13 +454,19 @@
422454 struct kvm_coalesced_mmio_zone {
423455 __u64 addr;
424456 __u32 size;
425
- __u32 pad;
457
+ union {
458
+ __u32 pad;
459
+ __u32 pio;
460
+ };
426461 };
427462
428463 struct kvm_coalesced_mmio {
429464 __u64 phys_addr;
430465 __u32 len;
431
- __u32 pad;
466
+ union {
467
+ __u32 pad;
468
+ __u32 pio;
469
+ };
432470 __u8 data[8];
433471 };
434472
....@@ -462,12 +500,17 @@
462500 __u32 size; /* amount of bytes */
463501 __u32 op; /* type of operation */
464502 __u64 buf; /* buffer in userspace */
465
- __u8 ar; /* the access register number */
466
- __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
+ };
467508 };
468509 /* types for kvm_s390_mem_op->op */
469510 #define KVM_S390_MEMOP_LOGICAL_READ 0
470511 #define KVM_S390_MEMOP_LOGICAL_WRITE 1
512
+#define KVM_S390_MEMOP_SIDA_READ 2
513
+#define KVM_S390_MEMOP_SIDA_WRITE 3
471514 /* flags for kvm_s390_mem_op->flags */
472515 #define KVM_S390_MEMOP_F_CHECK_ONLY (1ULL << 0)
473516 #define KVM_S390_MEMOP_F_INJECT_EXCEPTION (1ULL << 1)
....@@ -482,6 +525,17 @@
482525 struct kvm_dirty_log {
483526 __u32 slot;
484527 __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;
485539 union {
486540 void __user *dirty_bitmap; /* one bit per page */
487541 __u64 padding2;
....@@ -681,9 +735,11 @@
681735 #define KVM_X86_DISABLE_EXITS_MWAIT (1 << 0)
682736 #define KVM_X86_DISABLE_EXITS_HLT (1 << 1)
683737 #define KVM_X86_DISABLE_EXITS_PAUSE (1 << 2)
738
+#define KVM_X86_DISABLE_EXITS_CSTATE (1 << 3)
684739 #define KVM_X86_DISABLE_VALID_EXITS (KVM_X86_DISABLE_EXITS_MWAIT | \
685740 KVM_X86_DISABLE_EXITS_HLT | \
686
- KVM_X86_DISABLE_EXITS_PAUSE)
741
+ KVM_X86_DISABLE_EXITS_PAUSE | \
742
+ KVM_X86_DISABLE_EXITS_CSTATE)
687743
688744 /* for KVM_ENABLE_CAP */
689745 struct kvm_enable_cap {
....@@ -721,6 +777,7 @@
721777
722778 #define KVM_PPC_PAGE_SIZES_REAL 0x00000001
723779 #define KVM_PPC_1T_SEGMENTS 0x00000002
780
+#define KVM_PPC_NO_HASH 0x00000004
724781
725782 struct kvm_ppc_smmu_info {
726783 __u64 flags;
....@@ -753,6 +810,15 @@
753810
754811 #define KVM_S390_SIE_PAGE_OFFSET 1
755812
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)
756822 /*
757823 * ioctls for /dev/kvm fds:
758824 */
....@@ -956,6 +1022,37 @@
9561022 #define KVM_CAP_NESTED_STATE 157
9571023 #define KVM_CAP_ARM_INJECT_SERROR_ESR 158
9581024 #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
9591056
9601057 #ifdef KVM_CAP_IRQ_ROUTING
9611058
....@@ -1046,7 +1143,7 @@
10461143 *
10471144 * KVM_IRQFD_FLAG_RESAMPLE indicates resamplefd is valid and specifies
10481145 * the irqfd to operate in resampling mode for level triggered interrupt
1049
- * emulation. See Documentation/virtual/kvm/api.txt.
1146
+ * emulation. See Documentation/virt/kvm/api.rst.
10501147 */
10511148 #define KVM_IRQFD_FLAG_RESAMPLE (1 << 1)
10521149
....@@ -1102,6 +1199,7 @@
11021199 #define KVM_REG_S390 0x5000000000000000ULL
11031200 #define KVM_REG_ARM64 0x6000000000000000ULL
11041201 #define KVM_REG_MIPS 0x7000000000000000ULL
1202
+#define KVM_REG_RISCV 0x8000000000000000ULL
11051203
11061204 #define KVM_REG_SIZE_SHIFT 52
11071205 #define KVM_REG_SIZE_MASK 0x00f0000000000000ULL
....@@ -1113,6 +1211,7 @@
11131211 #define KVM_REG_SIZE_U256 0x0050000000000000ULL
11141212 #define KVM_REG_SIZE_U512 0x0060000000000000ULL
11151213 #define KVM_REG_SIZE_U1024 0x0070000000000000ULL
1214
+#define KVM_REG_SIZE_U2048 0x0080000000000000ULL
11161215
11171216 struct kvm_reg_list {
11181217 __u64 n; /* number of regs */
....@@ -1179,6 +1278,10 @@
11791278 #define KVM_DEV_TYPE_ARM_VGIC_V3 KVM_DEV_TYPE_ARM_VGIC_V3
11801279 KVM_DEV_TYPE_ARM_VGIC_ITS,
11811280 #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
11821285 KVM_DEV_TYPE_MAX,
11831286 };
11841287
....@@ -1287,6 +1390,9 @@
12871390 #define KVM_PPC_GET_RMMU_INFO _IOW(KVMIO, 0xb0, struct kvm_ppc_rmmu_info)
12881391 /* Available with KVM_CAP_PPC_GET_CPU_CHAR */
12891392 #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)
12901396
12911397 /* ioctl for vm fd */
12921398 #define KVM_CREATE_DEVICE _IOWR(KVMIO, 0xe0, struct kvm_create_device)
....@@ -1401,6 +1507,55 @@
14011507 /* Available with KVM_CAP_NESTED_STATE */
14021508 #define KVM_GET_NESTED_STATE _IOWR(KVMIO, 0xbe, struct kvm_nested_state)
14031509 #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)
14041559
14051560 /* Secure Encrypted Virtualization command */
14061561 enum sev_cmd_id {
....@@ -1552,4 +1707,7 @@
15521707 #define KVM_HYPERV_CONN_ID_MASK 0x00ffffff
15531708 #define KVM_HYPERV_EVENTFD_DEASSIGN (1 << 0)
15541709
1710
+#define KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE (1 << 0)
1711
+#define KVM_DIRTY_LOG_INITIALLY_SET (1 << 1)
1712
+
15551713 #endif /* __LINUX_KVM_H */