mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
KVM: selftests: sev_init2_tests: Derive SEV availability from KVM
The test asserted that the X86_FEATURE_SEV CPUID bit exactly matches whether KVM offers KVM_X86_SEV_VM. That is not an invariant: when all SEV ASIDs are assigned to SEV-SNP, KVM does not offer the SEV VM type even though CPUID reports SEV, so the test aborts on an SNP-only host. Derive SEV availability from KVM_CAP_VM_TYPES (as already done for SEV-ES and SNP), assert only the one-way implication that a type offered by KVM is also reported in CPUID, and TEST_REQUIRE() the SEV VM type so the test skips cleanly when it is unavailable. Reviewed-by: Tycho Andersen (AMD) <tycho@kernel.org> Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> Message-ID: <5d3c345113748f39b7982e365d241abaf3e11086.1784545391.git.dwmw@amazon.co.uk> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
cd76ec58be
commit
f148dd411d
|
|
@ -130,12 +130,18 @@ int main(int argc, char *argv[])
|
|||
KVM_X86_SEV_VMSA_FEATURES,
|
||||
&supported_vmsa_features);
|
||||
|
||||
have_sev = kvm_cpu_has(X86_FEATURE_SEV);
|
||||
TEST_ASSERT(have_sev == !!(kvm_check_cap(KVM_CAP_VM_TYPES) & BIT(KVM_X86_SEV_VM)),
|
||||
"sev: KVM_CAP_VM_TYPES (%x) does not match cpuid (checking %x)",
|
||||
kvm_check_cap(KVM_CAP_VM_TYPES), 1 << KVM_X86_SEV_VM);
|
||||
/*
|
||||
* Whether a VM type is available depends on KVM, not just CPUID: e.g.
|
||||
* when all SEV ASIDs are assigned to SEV-SNP, KVM does not offer the
|
||||
* SEV VM type even though X86_FEATURE_SEV is set. Derive availability
|
||||
* from KVM_CAP_VM_TYPES and only assert the one-way implication that a
|
||||
* type offered by KVM must also be reported in CPUID.
|
||||
*/
|
||||
have_sev = kvm_check_cap(KVM_CAP_VM_TYPES) & BIT(KVM_X86_SEV_VM);
|
||||
TEST_ASSERT(!have_sev || kvm_cpu_has(X86_FEATURE_SEV),
|
||||
"sev: SEV_VM supported without SEV in CPUID");
|
||||
|
||||
TEST_REQUIRE(kvm_check_cap(KVM_CAP_VM_TYPES) & BIT(KVM_X86_SEV_VM));
|
||||
TEST_REQUIRE(have_sev);
|
||||
have_sev_es = kvm_check_cap(KVM_CAP_VM_TYPES) & BIT(KVM_X86_SEV_ES_VM);
|
||||
|
||||
TEST_ASSERT(!have_sev_es || kvm_cpu_has(X86_FEATURE_SEV_ES),
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user