Commit 6f1d5a35 authored by Ashish Kalra's avatar Ashish Kalra Committed by Herbert Xu
Browse files

KVM: SVM: Add support to initialize SEV/SNP functionality in KVM



Move platform initialization of SEV/SNP from CCP driver probe time to
KVM module load time so that KVM can do SEV/SNP platform initialization
explicitly if it actually wants to use SEV/SNP functionality.

Add support for KVM to explicitly call into the CCP driver at load time
to initialize SEV/SNP. If required, this behavior can be altered with KVM
module parameters to not do SEV/SNP platform initialization at module load
time. Additionally, a corresponding SEV/SNP platform shutdown is invoked
during KVM module unload time.

Continue to support SEV deferred initialization as the user may have the
file containing SEV persistent data for SEV INIT_EX available only later
after module load/init.

Suggested-by: default avatarSean Christopherson <seanjc@google.com>
Reviewed-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: default avatarAshish Kalra <ashish.kalra@amd.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent d23fce15
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -2933,6 +2933,7 @@ void __init sev_set_cpu_caps(void)
void __init sev_hardware_setup(void)
{
	unsigned int eax, ebx, ecx, edx, sev_asid_count, sev_es_asid_count;
	struct sev_platform_init_args init_args = {0};
	bool sev_snp_supported = false;
	bool sev_es_supported = false;
	bool sev_supported = false;
@@ -3059,6 +3060,15 @@ void __init sev_hardware_setup(void)
	sev_supported_vmsa_features = 0;
	if (sev_es_debug_swap_enabled)
		sev_supported_vmsa_features |= SVM_SEV_FEAT_DEBUG_SWAP;

	if (!sev_enabled)
		return;

	/*
	 * Do both SNP and SEV initialization at KVM module load.
	 */
	init_args.probe = true;
	sev_platform_init(&init_args);
}

void sev_hardware_unsetup(void)
@@ -3074,6 +3084,8 @@ void sev_hardware_unsetup(void)

	misc_cg_set_capacity(MISC_CG_RES_SEV, 0);
	misc_cg_set_capacity(MISC_CG_RES_SEV_ES, 0);

	sev_platform_shutdown();
}

int sev_cpu_init(struct svm_cpu_data *sd)