mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-28 09:22:08 +00:00
crypto: ccp - Move dev_info/err messages for SEV/SNP init and shutdown
Move dev_info and dev_err messages related to SEV/SNP initialization and shutdown into __sev_platform_init_locked(), __sev_snp_init_locked() and __sev_platform_shutdown_locked(), __sev_snp_shutdown_locked() so that they don't need to be issued from callers. This allows both _sev_platform_init_locked() and various SEV/SNP ioctls to call __sev_platform_init_locked(), __sev_snp_init_locked() and __sev_platform_shutdown_locked(), __sev_snp_shutdown_locked() for implicit SEV/SNP initialization and shutdown without additionally printing any errors/success messages. Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com> Signed-off-by: Ashish Kalra <ashish.kalra@amd.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
6131e119f5
commit
9770b428b1
@ -1176,21 +1176,31 @@ static int __sev_snp_init_locked(int *error)
|
||||
wbinvd_on_all_cpus();
|
||||
|
||||
rc = __sev_do_cmd_locked(cmd, arg, error);
|
||||
if (rc)
|
||||
if (rc) {
|
||||
dev_err(sev->dev, "SEV-SNP: %s failed rc %d, error %#x\n",
|
||||
cmd == SEV_CMD_SNP_INIT_EX ? "SNP_INIT_EX" : "SNP_INIT",
|
||||
rc, *error);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Prepare for first SNP guest launch after INIT. */
|
||||
wbinvd_on_all_cpus();
|
||||
rc = __sev_do_cmd_locked(SEV_CMD_SNP_DF_FLUSH, NULL, error);
|
||||
if (rc)
|
||||
if (rc) {
|
||||
dev_err(sev->dev, "SEV-SNP: SNP_DF_FLUSH failed rc %d, error %#x\n",
|
||||
rc, *error);
|
||||
return rc;
|
||||
}
|
||||
|
||||
sev->snp_initialized = true;
|
||||
dev_dbg(sev->dev, "SEV-SNP firmware initialized\n");
|
||||
|
||||
dev_info(sev->dev, "SEV-SNP API:%d.%d build:%d\n", sev->api_major,
|
||||
sev->api_minor, sev->build);
|
||||
|
||||
sev_es_tmr_size = SNP_TMR_SIZE;
|
||||
|
||||
return rc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __sev_platform_init_handle_tmr(struct sev_device *sev)
|
||||
@ -1287,16 +1297,22 @@ static int __sev_platform_init_locked(int *error)
|
||||
if (error)
|
||||
*error = psp_ret;
|
||||
|
||||
if (rc)
|
||||
if (rc) {
|
||||
dev_err(sev->dev, "SEV: %s failed %#x, rc %d\n",
|
||||
sev_init_ex_buffer ? "INIT_EX" : "INIT", psp_ret, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
sev->state = SEV_STATE_INIT;
|
||||
|
||||
/* Prepare for first SEV guest launch after INIT */
|
||||
wbinvd_on_all_cpus();
|
||||
rc = __sev_do_cmd_locked(SEV_CMD_DF_FLUSH, NULL, error);
|
||||
if (rc)
|
||||
if (rc) {
|
||||
dev_err(sev->dev, "SEV: DF_FLUSH failed %#x, rc %d\n",
|
||||
*error, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
dev_dbg(sev->dev, "SEV firmware initialized\n");
|
||||
|
||||
@ -1324,11 +1340,8 @@ static int _sev_platform_init_locked(struct sev_platform_init_args *args)
|
||||
* so perform SEV-SNP initialization at probe time.
|
||||
*/
|
||||
rc = __sev_snp_init_locked(&args->error);
|
||||
if (rc && rc != -ENODEV) {
|
||||
dev_err(sev->dev, "SEV-SNP: failed to INIT rc %d, error %#x\n",
|
||||
rc, args->error);
|
||||
if (rc && rc != -ENODEV)
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Defer legacy SEV/SEV-ES support if allowed by caller/module. */
|
||||
if (args->probe && !psp_init_on_probe)
|
||||
@ -1364,8 +1377,11 @@ static int __sev_platform_shutdown_locked(int *error)
|
||||
return 0;
|
||||
|
||||
ret = __sev_do_cmd_locked(SEV_CMD_SHUTDOWN, NULL, error);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
dev_err(sev->dev, "SEV: failed to SHUTDOWN error %#x, rc %d\n",
|
||||
*error, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
sev->state = SEV_STATE_UNINIT;
|
||||
dev_dbg(sev->dev, "SEV firmware shutdown\n");
|
||||
@ -1679,9 +1695,12 @@ static int __sev_snp_shutdown_locked(int *error, bool panic)
|
||||
ret = __sev_do_cmd_locked(SEV_CMD_SNP_SHUTDOWN_EX, &data, error);
|
||||
/* SHUTDOWN may require DF_FLUSH */
|
||||
if (*error == SEV_RET_DFFLUSH_REQUIRED) {
|
||||
ret = __sev_do_cmd_locked(SEV_CMD_SNP_DF_FLUSH, NULL, NULL);
|
||||
int dfflush_error;
|
||||
|
||||
ret = __sev_do_cmd_locked(SEV_CMD_SNP_DF_FLUSH, NULL, &dfflush_error);
|
||||
if (ret) {
|
||||
dev_err(sev->dev, "SEV-SNP DF_FLUSH failed\n");
|
||||
dev_err(sev->dev, "SEV-SNP DF_FLUSH failed, ret = %d, error = %#x\n",
|
||||
ret, dfflush_error);
|
||||
return ret;
|
||||
}
|
||||
/* reissue the shutdown command */
|
||||
@ -1689,7 +1708,8 @@ static int __sev_snp_shutdown_locked(int *error, bool panic)
|
||||
error);
|
||||
}
|
||||
if (ret) {
|
||||
dev_err(sev->dev, "SEV-SNP firmware shutdown failed\n");
|
||||
dev_err(sev->dev, "SEV-SNP firmware shutdown failed, rc %d, error %#x\n",
|
||||
ret, *error);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -2419,9 +2439,6 @@ void sev_pci_init(void)
|
||||
dev_err(sev->dev, "SEV: failed to INIT error %#x, rc %d\n",
|
||||
args.error, rc);
|
||||
|
||||
dev_info(sev->dev, "SEV%s API:%d.%d build:%d\n", sev->snp_initialized ?
|
||||
"-SNP" : "", sev->api_major, sev->api_minor, sev->build);
|
||||
|
||||
atomic_notifier_chain_register(&panic_notifier_list,
|
||||
&snp_panic_notifier);
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user