hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/tools/arch/x86/include/uapi/asm/kvm.h
....@@ -192,6 +192,26 @@
192192 __u32 indices[0];
193193 };
194194
195
+/* Maximum size of any access bitmap in bytes */
196
+#define KVM_MSR_FILTER_MAX_BITMAP_SIZE 0x600
197
+
198
+/* for KVM_X86_SET_MSR_FILTER */
199
+struct kvm_msr_filter_range {
200
+#define KVM_MSR_FILTER_READ (1 << 0)
201
+#define KVM_MSR_FILTER_WRITE (1 << 1)
202
+ __u32 flags;
203
+ __u32 nmsrs; /* number of msrs in bitmap */
204
+ __u32 base; /* MSR index the bitmap starts at */
205
+ __u8 *bitmap; /* a 1 bit allows the operations in flags, 0 denies */
206
+};
207
+
208
+#define KVM_MSR_FILTER_MAX_RANGES 16
209
+struct kvm_msr_filter {
210
+#define KVM_MSR_FILTER_DEFAULT_ALLOW (0 << 0)
211
+#define KVM_MSR_FILTER_DEFAULT_DENY (1 << 0)
212
+ __u32 flags;
213
+ struct kvm_msr_filter_range ranges[KVM_MSR_FILTER_MAX_RANGES];
214
+};
195215
196216 struct kvm_cpuid_entry {
197217 __u32 function;
....@@ -288,6 +308,7 @@
288308 #define KVM_VCPUEVENT_VALID_SIPI_VECTOR 0x00000002
289309 #define KVM_VCPUEVENT_VALID_SHADOW 0x00000004
290310 #define KVM_VCPUEVENT_VALID_SMM 0x00000008
311
+#define KVM_VCPUEVENT_VALID_PAYLOAD 0x00000010
291312
292313 /* Interrupt shadow states */
293314 #define KVM_X86_SHADOW_INT_MOV_SS 0x01
....@@ -299,7 +320,7 @@
299320 __u8 injected;
300321 __u8 nr;
301322 __u8 has_error_code;
302
- __u8 pad;
323
+ __u8 pending;
303324 __u32 error_code;
304325 } exception;
305326 struct {
....@@ -322,7 +343,9 @@
322343 __u8 smm_inside_nmi;
323344 __u8 latched_init;
324345 } smi;
325
- __u32 reserved[9];
346
+ __u8 reserved[27];
347
+ __u8 exception_has_payload;
348
+ __u64 exception_payload;
326349 };
327350
328351 /* for KVM_GET/SET_DEBUGREGS */
....@@ -375,45 +398,92 @@
375398 struct kvm_vcpu_events events;
376399 };
377400
378
-#define KVM_X86_QUIRK_LINT0_REENABLED (1 << 0)
379
-#define KVM_X86_QUIRK_CD_NW_CLEARED (1 << 1)
380
-#define KVM_X86_QUIRK_LAPIC_MMIO_HOLE (1 << 2)
401
+#define KVM_X86_QUIRK_LINT0_REENABLED (1 << 0)
402
+#define KVM_X86_QUIRK_CD_NW_CLEARED (1 << 1)
403
+#define KVM_X86_QUIRK_LAPIC_MMIO_HOLE (1 << 2)
404
+#define KVM_X86_QUIRK_OUT_7E_INC_RIP (1 << 3)
405
+#define KVM_X86_QUIRK_MISC_ENABLE_NO_MWAIT (1 << 4)
406
+
407
+#define KVM_STATE_NESTED_FORMAT_VMX 0
408
+#define KVM_STATE_NESTED_FORMAT_SVM 1
381409
382410 #define KVM_STATE_NESTED_GUEST_MODE 0x00000001
383411 #define KVM_STATE_NESTED_RUN_PENDING 0x00000002
412
+#define KVM_STATE_NESTED_EVMCS 0x00000004
413
+#define KVM_STATE_NESTED_MTF_PENDING 0x00000008
414
+#define KVM_STATE_NESTED_GIF_SET 0x00000100
384415
385416 #define KVM_STATE_NESTED_SMM_GUEST_MODE 0x00000001
386417 #define KVM_STATE_NESTED_SMM_VMXON 0x00000002
387418
388
-struct kvm_vmx_nested_state {
419
+#define KVM_STATE_NESTED_VMX_VMCS_SIZE 0x1000
420
+
421
+#define KVM_STATE_NESTED_SVM_VMCB_SIZE 0x1000
422
+
423
+#define KVM_STATE_VMX_PREEMPTION_TIMER_DEADLINE 0x00000001
424
+
425
+struct kvm_vmx_nested_state_data {
426
+ __u8 vmcs12[KVM_STATE_NESTED_VMX_VMCS_SIZE];
427
+ __u8 shadow_vmcs12[KVM_STATE_NESTED_VMX_VMCS_SIZE];
428
+};
429
+
430
+struct kvm_vmx_nested_state_hdr {
389431 __u64 vmxon_pa;
390
- __u64 vmcs_pa;
432
+ __u64 vmcs12_pa;
391433
392434 struct {
393435 __u16 flags;
394436 } smm;
437
+
438
+ __u32 flags;
439
+ __u64 preemption_timer_deadline;
440
+};
441
+
442
+struct kvm_svm_nested_state_data {
443
+ /* Save area only used if KVM_STATE_NESTED_RUN_PENDING. */
444
+ __u8 vmcb12[KVM_STATE_NESTED_SVM_VMCB_SIZE];
445
+};
446
+
447
+struct kvm_svm_nested_state_hdr {
448
+ __u64 vmcb_pa;
395449 };
396450
397451 /* for KVM_CAP_NESTED_STATE */
398452 struct kvm_nested_state {
399
- /* KVM_STATE_* flags */
400453 __u16 flags;
401
-
402
- /* 0 for VMX, 1 for SVM. */
403454 __u16 format;
404
-
405
- /* 128 for SVM, 128 + VMCS size for VMX. */
406455 __u32 size;
407456
408457 union {
409
- /* VMXON, VMCS */
410
- struct kvm_vmx_nested_state vmx;
458
+ struct kvm_vmx_nested_state_hdr vmx;
459
+ struct kvm_svm_nested_state_hdr svm;
411460
412461 /* Pad the header to 128 bytes. */
413462 __u8 pad[120];
414
- };
463
+ } hdr;
415464
416
- __u8 data[0];
465
+ /*
466
+ * Define data region as 0 bytes to preserve backwards-compatability
467
+ * to old definition of kvm_nested_state in order to avoid changing
468
+ * KVM_{GET,PUT}_NESTED_STATE ioctl values.
469
+ */
470
+ union {
471
+ struct kvm_vmx_nested_state_data vmx[0];
472
+ struct kvm_svm_nested_state_data svm[0];
473
+ } data;
417474 };
418475
476
+/* for KVM_CAP_PMU_EVENT_FILTER */
477
+struct kvm_pmu_event_filter {
478
+ __u32 action;
479
+ __u32 nevents;
480
+ __u32 fixed_counter_bitmap;
481
+ __u32 flags;
482
+ __u32 pad[4];
483
+ __u64 events[0];
484
+};
485
+
486
+#define KVM_PMU_EVENT_ALLOW 0
487
+#define KVM_PMU_EVENT_DENY 1
488
+
419489 #endif /* _ASM_X86_KVM_H */