]> www.infradead.org Git - linux.git/commitdiff
tools/include: Sync uapi/linux/kvm.h with the kernel sources
authorNamhyung Kim <namhyung@kernel.org>
Tue, 6 Aug 2024 19:07:50 +0000 (12:07 -0700)
committerNamhyung Kim <namhyung@kernel.org>
Tue, 6 Aug 2024 19:30:32 +0000 (12:30 -0700)
And other arch-specific UAPI headers to pick up changes from:

  4b23e0c199b2 KVM: Ensure new code that references immediate_exit gets extra scrutiny
  85542adb65ec KVM: x86: Add KVM_RUN_X86_GUEST_MODE kvm_run flag
  6fef518594bc KVM: x86: Add a capability to configure bus frequency for APIC timer
  34ff65901735 x86/sev: Use kernel provided SVSM Calling Areas
  5dcc1e76144f Merge tag 'kvm-x86-misc-6.11' of https://github.com/kvm-x86/linux into HEAD
  9a0d2f4995dd KVM: PPC: Book3S HV: Add one-reg interface for HASHPKEYR register
  e9eb790b2557 KVM: PPC: Book3S HV: Add one-reg interface for HASHKEYR register
  1a1e6865f516 KVM: PPC: Book3S HV: Add one-reg interface for DEXCR register

This should be used to beautify KVM syscall arguments and it addresses
these tools/perf build warnings:

  Warning: Kernel ABI header differences:
  diff -u tools/include/uapi/linux/kvm.h include/uapi/linux/kvm.h
  diff -u tools/arch/x86/include/uapi/asm/kvm.h arch/x86/include/uapi/asm/kvm.h
  diff -u tools/arch/x86/include/uapi/asm/svm.h arch/x86/include/uapi/asm/svm.h
  diff -u tools/arch/powerpc/include/uapi/asm/kvm.h arch/powerpc/include/uapi/asm/kvm.h

Please see tools/include/uapi/README for details (it's in the first patch
of this series).

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: kvm@vger.kernel.org
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/arch/powerpc/include/uapi/asm/kvm.h
tools/arch/x86/include/uapi/asm/kvm.h
tools/arch/x86/include/uapi/asm/svm.h
tools/include/uapi/linux/kvm.h

index 1691297a766a9c1a4df9384c4ff02ecd8ce21b92..eaeda001784ebb6f21c4e64bad3b632c2b292031 100644 (file)
@@ -645,6 +645,9 @@ struct kvm_ppc_cpu_char {
 #define KVM_REG_PPC_SIER3      (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc3)
 #define KVM_REG_PPC_DAWR1      (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc4)
 #define KVM_REG_PPC_DAWRX1     (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc5)
+#define KVM_REG_PPC_DEXCR      (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc6)
+#define KVM_REG_PPC_HASHKEYR   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc7)
+#define KVM_REG_PPC_HASHPKEYR  (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc8)
 
 /* Transactional Memory checkpointed state:
  * This is all GPRs, all VSX regs and a subset of SPRs
index 9fae1b73b529caf53c5c7dd1823fd7a3f320637c..bf57a824f72281218a7c145e44587f3845a50aad 100644 (file)
@@ -106,6 +106,7 @@ struct kvm_ioapic_state {
 
 #define KVM_RUN_X86_SMM                 (1 << 0)
 #define KVM_RUN_X86_BUS_LOCK     (1 << 1)
+#define KVM_RUN_X86_GUEST_MODE   (1 << 2)
 
 /* for KVM_GET_REGS and KVM_SET_REGS */
 struct kvm_regs {
@@ -697,6 +698,11 @@ enum sev_cmd_id {
        /* Second time is the charm; improved versions of the above ioctls.  */
        KVM_SEV_INIT2,
 
+       /* SNP-specific commands */
+       KVM_SEV_SNP_LAUNCH_START = 100,
+       KVM_SEV_SNP_LAUNCH_UPDATE,
+       KVM_SEV_SNP_LAUNCH_FINISH,
+
        KVM_SEV_NR_MAX,
 };
 
@@ -824,6 +830,48 @@ struct kvm_sev_receive_update_data {
        __u32 pad2;
 };
 
+struct kvm_sev_snp_launch_start {
+       __u64 policy;
+       __u8 gosvw[16];
+       __u16 flags;
+       __u8 pad0[6];
+       __u64 pad1[4];
+};
+
+/* Kept in sync with firmware values for simplicity. */
+#define KVM_SEV_SNP_PAGE_TYPE_NORMAL           0x1
+#define KVM_SEV_SNP_PAGE_TYPE_ZERO             0x3
+#define KVM_SEV_SNP_PAGE_TYPE_UNMEASURED       0x4
+#define KVM_SEV_SNP_PAGE_TYPE_SECRETS          0x5
+#define KVM_SEV_SNP_PAGE_TYPE_CPUID            0x6
+
+struct kvm_sev_snp_launch_update {
+       __u64 gfn_start;
+       __u64 uaddr;
+       __u64 len;
+       __u8 type;
+       __u8 pad0;
+       __u16 flags;
+       __u32 pad1;
+       __u64 pad2[4];
+};
+
+#define KVM_SEV_SNP_ID_BLOCK_SIZE      96
+#define KVM_SEV_SNP_ID_AUTH_SIZE       4096
+#define KVM_SEV_SNP_FINISH_DATA_SIZE   32
+
+struct kvm_sev_snp_launch_finish {
+       __u64 id_block_uaddr;
+       __u64 id_auth_uaddr;
+       __u8 id_block_en;
+       __u8 auth_key_en;
+       __u8 vcek_disabled;
+       __u8 host_data[KVM_SEV_SNP_FINISH_DATA_SIZE];
+       __u8 pad0[3];
+       __u16 flags;
+       __u64 pad1[4];
+};
+
 #define KVM_X2APIC_API_USE_32BIT_IDS            (1ULL << 0)
 #define KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK  (1ULL << 1)
 
@@ -874,5 +922,6 @@ struct kvm_hyperv_eventfd {
 #define KVM_X86_SW_PROTECTED_VM        1
 #define KVM_X86_SEV_VM         2
 #define KVM_X86_SEV_ES_VM      3
+#define KVM_X86_SNP_VM         4
 
 #endif /* _ASM_X86_KVM_H */
index 80e1df482337dfe064d809966a309cecd0930070..1814b413fd5783d295a7c85bf67f27835467a4ce 100644 (file)
 #define SVM_VMGEXIT_AP_CREATE_ON_INIT          0
 #define SVM_VMGEXIT_AP_CREATE                  1
 #define SVM_VMGEXIT_AP_DESTROY                 2
+#define SVM_VMGEXIT_SNP_RUN_VMPL               0x80000018
 #define SVM_VMGEXIT_HV_FEATURES                        0x8000fffd
 #define SVM_VMGEXIT_TERM_REQUEST               0x8000fffe
 #define SVM_VMGEXIT_TERM_REASON(reason_set, reason_code)       \
index e5af8c692dc063de39a083db4c8694376de4f3f1..637efc05514534ca635671f64f84bfd65a1b8ea1 100644 (file)
@@ -192,11 +192,24 @@ struct kvm_xen_exit {
 /* Flags that describe what fields in emulation_failure hold valid data. */
 #define KVM_INTERNAL_ERROR_EMULATION_FLAG_INSTRUCTION_BYTES (1ULL << 0)
 
+/*
+ * struct kvm_run can be modified by userspace at any time, so KVM must be
+ * careful to avoid TOCTOU bugs. In order to protect KVM, HINT_UNSAFE_IN_KVM()
+ * renames fields in struct kvm_run from <symbol> to <symbol>__unsafe when
+ * compiled into the kernel, ensuring that any use within KVM is obvious and
+ * gets extra scrutiny.
+ */
+#ifdef __KERNEL__
+#define HINT_UNSAFE_IN_KVM(_symbol) _symbol##__unsafe
+#else
+#define HINT_UNSAFE_IN_KVM(_symbol) _symbol
+#endif
+
 /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
 struct kvm_run {
        /* in */
        __u8 request_interrupt_window;
-       __u8 immediate_exit;
+       __u8 HINT_UNSAFE_IN_KVM(immediate_exit);
        __u8 padding1[6];
 
        /* out */
@@ -918,6 +931,8 @@ struct kvm_enable_cap {
 #define KVM_CAP_GUEST_MEMFD 234
 #define KVM_CAP_VM_TYPES 235
 #define KVM_CAP_PRE_FAULT_MEMORY 236
+#define KVM_CAP_X86_APIC_BUS_CYCLES_NS 237
+#define KVM_CAP_X86_GUEST_MODE 238
 
 struct kvm_irq_routing_irqchip {
        __u32 irqchip;