* Initial infrastructure for shadow stage-2 MMUs, as part of nested virtualization enablement * Support for userspace changes to the guest CTR_EL0 value, enabling (in part) migration of VMs between heterogenous hardware * Fixes + improvements to pKVM's FF-A proxy, adding support for v1.1 of the protocol * FPSIMD/SVE support for nested, including merged trap configuration and exception routing * New command-line parameter to control the WFx trap behavior under KVM * Introduce kCFI hardening in the EL2 hypervisor * Fixes + cleanups for handling presence/absence of FEAT_TCRX * Miscellaneous fixes + documentation updates LoongArch: * Add paravirt steal time support. * Add support for KVM_DIRTY_LOG_INITIALLY_SET. * Add perf kvm-stat support for loongarch. RISC-V: * Redirect AMO load/store access fault traps to guest * perf kvm stat support * Use guest files for IMSIC virtualization, when available ONE_REG support for the Zimop, Zcmop, Zca, Zcf, Zcd, Zcb and Zawrs ISA extensions is coming through the RISC-V tree. s390: * Assortment of tiny fixes which are not time critical x86: * Fixes for Xen emulation. * Add a global struct to consolidate tracking of host values, e.g. EFER * Add KVM_CAP_X86_APIC_BUS_CYCLES_NS to allow configuring the effective APIC bus frequency, because TDX. * Print the name of the APICv/AVIC inhibits in the relevant tracepoint. * Clean up KVM's handling of vendor specific emulation to consistently act on "compatible with Intel/AMD", versus checking for a specific vendor. * Drop MTRR virtualization, and instead always honor guest PAT on CPUs that support self-snoop. * Update to the newfangled Intel CPU FMS infrastructure. * Don't advertise IA32_PERF_GLOBAL_OVF_CTRL as an MSR-to-be-saved, as it reads '0' and writes from userspace are ignored. * Misc cleanups x86 - MMU: * Small cleanups, renames and refactoring extracted from the upcoming Intel TDX support. * Don't allocate kvm_mmu_page.shadowed_translation for shadow pages that can't hold leafs SPTEs. * Unconditionally drop mmu_lock when allocating TDP MMU page tables for eager page splitting, to avoid stalling vCPUs when splitting huge pages. * Bug the VM instead of simply warning if KVM tries to split a SPTE that is non-present or not-huge. KVM is guaranteed to end up in a broken state because the callers fully expect a valid SPTE, it's all but dangerous to let more MMU changes happen afterwards. x86 - AMD: * Make per-CPU save_area allocations NUMA-aware. * Force sev_es_host_save_area() to be inlined to avoid calling into an instrumentable function from noinstr code. * Base support for running SEV-SNP guests. API-wise, this includes a new KVM_X86_SNP_VM type, encrypting/measure the initial image into guest memory, and finalizing it before launching it. Internally, there are some gmem/mmu hooks needed to prepare gmem-allocated pages before mapping them into guest private memory ranges. This includes basic support for attestation guest requests, enough to say that KVM supports the GHCB 2.0 specification. There is no support yet for loading into the firmware those signing keys to be used for attestation requests, and therefore no need yet for the host to provide certificate data for those keys. To support fetching certificate data from userspace, a new KVM exit type will be needed to handle fetching the certificate from userspace. An attempt to define a new KVM_EXIT_COCO/KVM_EXIT_COCO_REQ_CERTS exit type to handle this was introduced in v1 of this patchset, but is still being discussed by community, so for now this patchset only implements a stub version of SNP Extended Guest Requests that does not provide certificate data. x86 - Intel: * Remove an unnecessary EPT TLB flush when enabling hardware. * Fix a series of bugs that cause KVM to fail to detect nested pending posted interrupts as valid wake eents for a vCPU executing HLT in L2 (with HLT-exiting disable by L1). * KVM: x86: Suppress MMIO that is triggered during task switch emulation Explicitly suppress userspace emulated MMIO exits that are triggered when emulating a task switch as KVM doesn't support userspace MMIO during complex (multi-step) emulation. Silently ignoring the exit request can result in the WARN_ON_ONCE(vcpu->mmio_needed) firing if KVM exits to userspace for some other reason prior to purging mmio_needed. See commit0dc902267c("KVM: x86: Suppress pending MMIO write exits if emulator detects exception") for more details on KVM's limitations with respect to emulated MMIO during complex emulator flows. Generic: * Rename the AS_UNMOVABLE flag that was introduced for KVM to AS_INACCESSIBLE, because the special casing needed by these pages is not due to just unmovability (and in fact they are only unmovable because the CPU cannot access them). * New ioctl to populate the KVM page tables in advance, which is useful to mitigate KVM page faults during guest boot or after live migration. The code will also be used by TDX, but (probably) not through the ioctl. * Enable halt poll shrinking by default, as Intel found it to be a clear win. * Setup empty IRQ routing when creating a VM to avoid having to synchronize SRCU when creating a split IRQCHIP on x86. * Rework the sched_in/out() paths to replace kvm_arch_sched_in() with a flag that arch code can use for hooking both sched_in() and sched_out(). * Take the vCPU @id as an "unsigned long" instead of "u32" to avoid truncating a bogus value from userspace, e.g. to help userspace detect bugs. * Mark a vCPU as preempted if and only if it's scheduled out while in the KVM_RUN loop, e.g. to avoid marking it preempted and thus writing guest memory when retrieving guest state during live migration blackout. Selftests: * Remove dead code in the memslot modification stress test. * Treat "branch instructions retired" as supported on all AMD Family 17h+ CPUs. * Print the guest pseudo-RNG seed only when it changes, to avoid spamming the log for tests that create lots of VMs. * Make the PMU counters test less flaky when counting LLC cache misses by doing CLFLUSH{OPT} in every loop iteration. -----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmaZQB0UHHBib256aW5p QHJlZGhhdC5jb20ACgkQv/vSX3jHroNkZwf/bv2jiENaLFNGPe/VqTKMQ6PHQLMG +sNHx6fJPP35gTM8Jqf0/7/ummZXcSuC1mWrzYbecZm7Oeg3vwNXHZ4LquwwX6Dv 8dKcUzLbWDAC4WA3SKhi8C8RV2v6E7ohy69NtAJmFWTc7H95dtIQm6cduV2osTC3 OEuHe1i8d9umk6couL9Qhm8hk3i9v2KgCsrfyNrQgLtS3hu7q6yOTR8nT0iH6sJR KE5A8prBQgLmF34CuvYDw4Hu6E4j+0QmIqodovg2884W1gZQ9LmcVqYPaRZGsG8S iDdbkualLKwiR1TpRr3HJGKWSFdc7RblbsnHRvHIZgFsMQiimh4HrBSCyQ== =zepX -----END PGP SIGNATURE----- Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm Pull kvm updates from Paolo Bonzini: "ARM: - Initial infrastructure for shadow stage-2 MMUs, as part of nested virtualization enablement - Support for userspace changes to the guest CTR_EL0 value, enabling (in part) migration of VMs between heterogenous hardware - Fixes + improvements to pKVM's FF-A proxy, adding support for v1.1 of the protocol - FPSIMD/SVE support for nested, including merged trap configuration and exception routing - New command-line parameter to control the WFx trap behavior under KVM - Introduce kCFI hardening in the EL2 hypervisor - Fixes + cleanups for handling presence/absence of FEAT_TCRX - Miscellaneous fixes + documentation updates LoongArch: - Add paravirt steal time support - Add support for KVM_DIRTY_LOG_INITIALLY_SET - Add perf kvm-stat support for loongarch RISC-V: - Redirect AMO load/store access fault traps to guest - perf kvm stat support - Use guest files for IMSIC virtualization, when available s390: - Assortment of tiny fixes which are not time critical x86: - Fixes for Xen emulation - Add a global struct to consolidate tracking of host values, e.g. EFER - Add KVM_CAP_X86_APIC_BUS_CYCLES_NS to allow configuring the effective APIC bus frequency, because TDX - Print the name of the APICv/AVIC inhibits in the relevant tracepoint - Clean up KVM's handling of vendor specific emulation to consistently act on "compatible with Intel/AMD", versus checking for a specific vendor - Drop MTRR virtualization, and instead always honor guest PAT on CPUs that support self-snoop - Update to the newfangled Intel CPU FMS infrastructure - Don't advertise IA32_PERF_GLOBAL_OVF_CTRL as an MSR-to-be-saved, as it reads '0' and writes from userspace are ignored - Misc cleanups x86 - MMU: - Small cleanups, renames and refactoring extracted from the upcoming Intel TDX support - Don't allocate kvm_mmu_page.shadowed_translation for shadow pages that can't hold leafs SPTEs - Unconditionally drop mmu_lock when allocating TDP MMU page tables for eager page splitting, to avoid stalling vCPUs when splitting huge pages - Bug the VM instead of simply warning if KVM tries to split a SPTE that is non-present or not-huge. KVM is guaranteed to end up in a broken state because the callers fully expect a valid SPTE, it's all but dangerous to let more MMU changes happen afterwards x86 - AMD: - Make per-CPU save_area allocations NUMA-aware - Force sev_es_host_save_area() to be inlined to avoid calling into an instrumentable function from noinstr code - Base support for running SEV-SNP guests. API-wise, this includes a new KVM_X86_SNP_VM type, encrypting/measure the initial image into guest memory, and finalizing it before launching it. Internally, there are some gmem/mmu hooks needed to prepare gmem-allocated pages before mapping them into guest private memory ranges This includes basic support for attestation guest requests, enough to say that KVM supports the GHCB 2.0 specification There is no support yet for loading into the firmware those signing keys to be used for attestation requests, and therefore no need yet for the host to provide certificate data for those keys. To support fetching certificate data from userspace, a new KVM exit type will be needed to handle fetching the certificate from userspace. An attempt to define a new KVM_EXIT_COCO / KVM_EXIT_COCO_REQ_CERTS exit type to handle this was introduced in v1 of this patchset, but is still being discussed by community, so for now this patchset only implements a stub version of SNP Extended Guest Requests that does not provide certificate data x86 - Intel: - Remove an unnecessary EPT TLB flush when enabling hardware - Fix a series of bugs that cause KVM to fail to detect nested pending posted interrupts as valid wake eents for a vCPU executing HLT in L2 (with HLT-exiting disable by L1) - KVM: x86: Suppress MMIO that is triggered during task switch emulation Explicitly suppress userspace emulated MMIO exits that are triggered when emulating a task switch as KVM doesn't support userspace MMIO during complex (multi-step) emulation Silently ignoring the exit request can result in the WARN_ON_ONCE(vcpu->mmio_needed) firing if KVM exits to userspace for some other reason prior to purging mmio_needed See commit0dc902267c("KVM: x86: Suppress pending MMIO write exits if emulator detects exception") for more details on KVM's limitations with respect to emulated MMIO during complex emulator flows Generic: - Rename the AS_UNMOVABLE flag that was introduced for KVM to AS_INACCESSIBLE, because the special casing needed by these pages is not due to just unmovability (and in fact they are only unmovable because the CPU cannot access them) - New ioctl to populate the KVM page tables in advance, which is useful to mitigate KVM page faults during guest boot or after live migration. The code will also be used by TDX, but (probably) not through the ioctl - Enable halt poll shrinking by default, as Intel found it to be a clear win - Setup empty IRQ routing when creating a VM to avoid having to synchronize SRCU when creating a split IRQCHIP on x86 - Rework the sched_in/out() paths to replace kvm_arch_sched_in() with a flag that arch code can use for hooking both sched_in() and sched_out() - Take the vCPU @id as an "unsigned long" instead of "u32" to avoid truncating a bogus value from userspace, e.g. to help userspace detect bugs - Mark a vCPU as preempted if and only if it's scheduled out while in the KVM_RUN loop, e.g. to avoid marking it preempted and thus writing guest memory when retrieving guest state during live migration blackout Selftests: - Remove dead code in the memslot modification stress test - Treat "branch instructions retired" as supported on all AMD Family 17h+ CPUs - Print the guest pseudo-RNG seed only when it changes, to avoid spamming the log for tests that create lots of VMs - Make the PMU counters test less flaky when counting LLC cache misses by doing CLFLUSH{OPT} in every loop iteration" * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (227 commits) crypto: ccp: Add the SNP_VLEK_LOAD command KVM: x86/pmu: Add kvm_pmu_call() to simplify static calls of kvm_pmu_ops KVM: x86: Introduce kvm_x86_call() to simplify static calls of kvm_x86_ops KVM: x86: Replace static_call_cond() with static_call() KVM: SEV: Provide support for SNP_EXTENDED_GUEST_REQUEST NAE event x86/sev: Move sev_guest.h into common SEV header KVM: SEV: Provide support for SNP_GUEST_REQUEST NAE event KVM: x86: Suppress MMIO that is triggered during task switch emulation KVM: x86/mmu: Clean up make_huge_page_split_spte() definition and intro KVM: x86/mmu: Bug the VM if KVM tries to split a !hugepage SPTE KVM: selftests: x86: Add test for KVM_PRE_FAULT_MEMORY KVM: x86: Implement kvm_arch_vcpu_pre_fault_memory() KVM: x86/mmu: Make kvm_mmu_do_page_fault() return mapped level KVM: x86/mmu: Account pf_{fixed,emulate,spurious} in callers of "do page fault" KVM: x86/mmu: Bump pf_taken stat only in the "real" page fault handler KVM: Add KVM_PRE_FAULT_MEMORY vcpu ioctl to pre-populate guest memory KVM: Document KVM_PRE_FAULT_MEMORY ioctl mm, virt: merge AS_UNMOVABLE and AS_INACCESSIBLE perf kvm: Add kvm-stat for loongarch64 LoongArch: KVM: Add PV steal time support in guest side ...
223 lines
6.8 KiB
C
223 lines
6.8 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* AMD SEV header common between the guest and the hypervisor.
|
|
*
|
|
* Author: Brijesh Singh <brijesh.singh@amd.com>
|
|
*/
|
|
|
|
#ifndef __ASM_X86_SEV_COMMON_H
|
|
#define __ASM_X86_SEV_COMMON_H
|
|
|
|
#define GHCB_MSR_INFO_POS 0
|
|
#define GHCB_DATA_LOW 12
|
|
#define GHCB_MSR_INFO_MASK (BIT_ULL(GHCB_DATA_LOW) - 1)
|
|
|
|
#define GHCB_DATA(v) \
|
|
(((unsigned long)(v) & ~GHCB_MSR_INFO_MASK) >> GHCB_DATA_LOW)
|
|
|
|
/* SEV Information Request/Response */
|
|
#define GHCB_MSR_SEV_INFO_RESP 0x001
|
|
#define GHCB_MSR_SEV_INFO_REQ 0x002
|
|
|
|
#define GHCB_MSR_SEV_INFO(_max, _min, _cbit) \
|
|
/* GHCBData[63:48] */ \
|
|
((((_max) & 0xffff) << 48) | \
|
|
/* GHCBData[47:32] */ \
|
|
(((_min) & 0xffff) << 32) | \
|
|
/* GHCBData[31:24] */ \
|
|
(((_cbit) & 0xff) << 24) | \
|
|
GHCB_MSR_SEV_INFO_RESP)
|
|
|
|
#define GHCB_MSR_INFO(v) ((v) & 0xfffUL)
|
|
#define GHCB_MSR_PROTO_MAX(v) (((v) >> 48) & 0xffff)
|
|
#define GHCB_MSR_PROTO_MIN(v) (((v) >> 32) & 0xffff)
|
|
|
|
/* CPUID Request/Response */
|
|
#define GHCB_MSR_CPUID_REQ 0x004
|
|
#define GHCB_MSR_CPUID_RESP 0x005
|
|
#define GHCB_MSR_CPUID_FUNC_POS 32
|
|
#define GHCB_MSR_CPUID_FUNC_MASK 0xffffffff
|
|
#define GHCB_MSR_CPUID_VALUE_POS 32
|
|
#define GHCB_MSR_CPUID_VALUE_MASK 0xffffffff
|
|
#define GHCB_MSR_CPUID_REG_POS 30
|
|
#define GHCB_MSR_CPUID_REG_MASK 0x3
|
|
#define GHCB_CPUID_REQ_EAX 0
|
|
#define GHCB_CPUID_REQ_EBX 1
|
|
#define GHCB_CPUID_REQ_ECX 2
|
|
#define GHCB_CPUID_REQ_EDX 3
|
|
#define GHCB_CPUID_REQ(fn, reg) \
|
|
/* GHCBData[11:0] */ \
|
|
(GHCB_MSR_CPUID_REQ | \
|
|
/* GHCBData[31:12] */ \
|
|
(((unsigned long)(reg) & 0x3) << 30) | \
|
|
/* GHCBData[63:32] */ \
|
|
(((unsigned long)fn) << 32))
|
|
|
|
/* AP Reset Hold */
|
|
#define GHCB_MSR_AP_RESET_HOLD_REQ 0x006
|
|
#define GHCB_MSR_AP_RESET_HOLD_RESP 0x007
|
|
#define GHCB_MSR_AP_RESET_HOLD_RESULT_POS 12
|
|
#define GHCB_MSR_AP_RESET_HOLD_RESULT_MASK GENMASK_ULL(51, 0)
|
|
|
|
/* Preferred GHCB GPA Request */
|
|
#define GHCB_MSR_PREF_GPA_REQ 0x010
|
|
#define GHCB_MSR_GPA_VALUE_POS 12
|
|
#define GHCB_MSR_GPA_VALUE_MASK GENMASK_ULL(51, 0)
|
|
|
|
#define GHCB_MSR_PREF_GPA_RESP 0x011
|
|
#define GHCB_MSR_PREF_GPA_NONE 0xfffffffffffff
|
|
|
|
/* GHCB GPA Register */
|
|
#define GHCB_MSR_REG_GPA_REQ 0x012
|
|
#define GHCB_MSR_REG_GPA_REQ_VAL(v) \
|
|
/* GHCBData[63:12] */ \
|
|
(((u64)((v) & GENMASK_ULL(51, 0)) << 12) | \
|
|
/* GHCBData[11:0] */ \
|
|
GHCB_MSR_REG_GPA_REQ)
|
|
|
|
#define GHCB_MSR_REG_GPA_RESP 0x013
|
|
#define GHCB_MSR_REG_GPA_RESP_VAL(v) \
|
|
/* GHCBData[63:12] */ \
|
|
(((u64)(v) & GENMASK_ULL(63, 12)) >> 12)
|
|
|
|
/*
|
|
* SNP Page State Change Operation
|
|
*
|
|
* GHCBData[55:52] - Page operation:
|
|
* 0x0001 Page assignment, Private
|
|
* 0x0002 Page assignment, Shared
|
|
*/
|
|
enum psc_op {
|
|
SNP_PAGE_STATE_PRIVATE = 1,
|
|
SNP_PAGE_STATE_SHARED,
|
|
};
|
|
|
|
#define GHCB_MSR_PSC_REQ 0x014
|
|
#define GHCB_MSR_PSC_REQ_GFN(gfn, op) \
|
|
/* GHCBData[55:52] */ \
|
|
(((u64)((op) & 0xf) << 52) | \
|
|
/* GHCBData[51:12] */ \
|
|
((u64)((gfn) & GENMASK_ULL(39, 0)) << 12) | \
|
|
/* GHCBData[11:0] */ \
|
|
GHCB_MSR_PSC_REQ)
|
|
|
|
#define GHCB_MSR_PSC_REQ_TO_GFN(msr) (((msr) & GENMASK_ULL(51, 12)) >> 12)
|
|
#define GHCB_MSR_PSC_REQ_TO_OP(msr) (((msr) & GENMASK_ULL(55, 52)) >> 52)
|
|
|
|
#define GHCB_MSR_PSC_RESP 0x015
|
|
#define GHCB_MSR_PSC_RESP_VAL(val) \
|
|
/* GHCBData[63:32] */ \
|
|
(((u64)(val) & GENMASK_ULL(63, 32)) >> 32)
|
|
|
|
/* Set highest bit as a generic error response */
|
|
#define GHCB_MSR_PSC_RESP_ERROR (BIT_ULL(63) | GHCB_MSR_PSC_RESP)
|
|
|
|
/* GHCB Run at VMPL Request/Response */
|
|
#define GHCB_MSR_VMPL_REQ 0x016
|
|
#define GHCB_MSR_VMPL_REQ_LEVEL(v) \
|
|
/* GHCBData[39:32] */ \
|
|
(((u64)(v) & GENMASK_ULL(7, 0) << 32) | \
|
|
/* GHCBDdata[11:0] */ \
|
|
GHCB_MSR_VMPL_REQ)
|
|
|
|
#define GHCB_MSR_VMPL_RESP 0x017
|
|
#define GHCB_MSR_VMPL_RESP_VAL(v) \
|
|
/* GHCBData[63:32] */ \
|
|
(((u64)(v) & GENMASK_ULL(63, 32)) >> 32)
|
|
|
|
/* GHCB Hypervisor Feature Request/Response */
|
|
#define GHCB_MSR_HV_FT_REQ 0x080
|
|
#define GHCB_MSR_HV_FT_RESP 0x081
|
|
#define GHCB_MSR_HV_FT_POS 12
|
|
#define GHCB_MSR_HV_FT_MASK GENMASK_ULL(51, 0)
|
|
#define GHCB_MSR_HV_FT_RESP_VAL(v) \
|
|
/* GHCBData[63:12] */ \
|
|
(((u64)(v) & GENMASK_ULL(63, 12)) >> 12)
|
|
|
|
#define GHCB_HV_FT_SNP BIT_ULL(0)
|
|
#define GHCB_HV_FT_SNP_AP_CREATION BIT_ULL(1)
|
|
#define GHCB_HV_FT_SNP_MULTI_VMPL BIT_ULL(5)
|
|
|
|
/*
|
|
* SNP Page State Change NAE event
|
|
* The VMGEXIT_PSC_MAX_ENTRY determines the size of the PSC structure, which
|
|
* is a local stack variable in set_pages_state(). Do not increase this value
|
|
* without evaluating the impact to stack usage.
|
|
*
|
|
* Use VMGEXIT_PSC_MAX_COUNT in cases where the actual GHCB-defined max value
|
|
* is needed, such as when processing GHCB requests on the hypervisor side.
|
|
*/
|
|
#define VMGEXIT_PSC_MAX_ENTRY 64
|
|
#define VMGEXIT_PSC_MAX_COUNT 253
|
|
|
|
#define VMGEXIT_PSC_ERROR_GENERIC (0x100UL << 32)
|
|
#define VMGEXIT_PSC_ERROR_INVALID_HDR ((1UL << 32) | 1)
|
|
#define VMGEXIT_PSC_ERROR_INVALID_ENTRY ((1UL << 32) | 2)
|
|
|
|
#define VMGEXIT_PSC_OP_PRIVATE 1
|
|
#define VMGEXIT_PSC_OP_SHARED 2
|
|
|
|
struct psc_hdr {
|
|
u16 cur_entry;
|
|
u16 end_entry;
|
|
u32 reserved;
|
|
} __packed;
|
|
|
|
struct psc_entry {
|
|
u64 cur_page : 12,
|
|
gfn : 40,
|
|
operation : 4,
|
|
pagesize : 1,
|
|
reserved : 7;
|
|
} __packed;
|
|
|
|
struct snp_psc_desc {
|
|
struct psc_hdr hdr;
|
|
struct psc_entry entries[VMGEXIT_PSC_MAX_ENTRY];
|
|
} __packed;
|
|
|
|
#define GHCB_MSR_TERM_REQ 0x100
|
|
#define GHCB_MSR_TERM_REASON_SET_POS 12
|
|
#define GHCB_MSR_TERM_REASON_SET_MASK 0xf
|
|
#define GHCB_MSR_TERM_REASON_POS 16
|
|
#define GHCB_MSR_TERM_REASON_MASK 0xff
|
|
|
|
#define GHCB_SEV_TERM_REASON(reason_set, reason_val) \
|
|
/* GHCBData[15:12] */ \
|
|
(((((u64)reason_set) & 0xf) << 12) | \
|
|
/* GHCBData[23:16] */ \
|
|
((((u64)reason_val) & 0xff) << 16))
|
|
|
|
/* Error codes from reason set 0 */
|
|
#define SEV_TERM_SET_GEN 0
|
|
#define GHCB_SEV_ES_GEN_REQ 0
|
|
#define GHCB_SEV_ES_PROT_UNSUPPORTED 1
|
|
#define GHCB_SNP_UNSUPPORTED 2
|
|
|
|
/* Linux-specific reason codes (used with reason set 1) */
|
|
#define SEV_TERM_SET_LINUX 1
|
|
#define GHCB_TERM_REGISTER 0 /* GHCB GPA registration failure */
|
|
#define GHCB_TERM_PSC 1 /* Page State Change failure */
|
|
#define GHCB_TERM_PVALIDATE 2 /* Pvalidate failure */
|
|
#define GHCB_TERM_NOT_VMPL0 3 /* SNP guest is not running at VMPL-0 */
|
|
#define GHCB_TERM_CPUID 4 /* CPUID-validation failure */
|
|
#define GHCB_TERM_CPUID_HV 5 /* CPUID failure during hypervisor fallback */
|
|
#define GHCB_TERM_SECRETS_PAGE 6 /* Secrets page failure */
|
|
#define GHCB_TERM_NO_SVSM 7 /* SVSM is not advertised in the secrets page */
|
|
#define GHCB_TERM_SVSM_VMPL0 8 /* SVSM is present but has set VMPL to 0 */
|
|
#define GHCB_TERM_SVSM_CAA 9 /* SVSM is present but CAA is not page aligned */
|
|
|
|
#define GHCB_RESP_CODE(v) ((v) & GHCB_MSR_INFO_MASK)
|
|
|
|
/*
|
|
* Error codes related to GHCB input that can be communicated back to the guest
|
|
* by setting the lower 32-bits of the GHCB SW_EXITINFO1 field to 2.
|
|
*/
|
|
#define GHCB_ERR_NOT_REGISTERED 1
|
|
#define GHCB_ERR_INVALID_USAGE 2
|
|
#define GHCB_ERR_INVALID_SCRATCH_AREA 3
|
|
#define GHCB_ERR_MISSING_INPUT 4
|
|
#define GHCB_ERR_INVALID_INPUT 5
|
|
#define GHCB_ERR_INVALID_EVENT 6
|
|
|
|
#endif
|