Re: [PATCH v4 4/7] crypto: ccp: Register SNP panic notifier only if SNP is enabled

From: Tom Lendacky
Date: Thu Feb 20 2025 - 14:09:29 EST


On 2/19/25 14:53, Ashish Kalra wrote:
> From: Ashish Kalra <ashish.kalra@xxxxxxx>
>
> Register the SNP panic notifier if and only if SNP is actually
> initialized and deregistering the notifier when shutting down

/deregistering/unregister/

> SNP in PSP driver when KVM module is unloaded.

s/SNP.*/SNP./

The PSP driver and KVM reference isn't needed.

>
> Currently the SNP panic notifier is being registered

s/being//

> irrespective of SNP being enabled/initialized and with this

s/intialized.*/intialized./

> change the SNP panic notifier is registered only if SNP
> support is enabled and initialized.

This paragraph should actually be the first paragraph of the commit
message, followed by the other paragraph. So something like...

Currently, the SNP panic notifier is registered on module
initialization, regardless of whether SNP is enabled or initialized.

Instead, register the SNP panic notifier only when SNP is actually
initialized and unregister the notifier when SNP is shutdown.

Thanks,
Tom

>
> Reviewed-by: Dionna Glaze <dionnaglaze@xxxxxxxxxx>
> Reviewed-by: Alexey Kardashevskiy <aik@xxxxxxx>
> Signed-off-by: Ashish Kalra <ashish.kalra@xxxxxxx>
> ---
> drivers/crypto/ccp/sev-dev.c | 22 +++++++++++++---------
> 1 file changed, 13 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/crypto/ccp/sev-dev.c b/drivers/crypto/ccp/sev-dev.c
> index be8a84ce24c7..582304638319 100644
> --- a/drivers/crypto/ccp/sev-dev.c
> +++ b/drivers/crypto/ccp/sev-dev.c
> @@ -109,6 +109,13 @@ static void *sev_init_ex_buffer;
> */
> static struct sev_data_range_list *snp_range_list;
>
> +static int snp_shutdown_on_panic(struct notifier_block *nb,
> + unsigned long reason, void *arg);
> +
> +static struct notifier_block snp_panic_notifier = {
> + .notifier_call = snp_shutdown_on_panic,
> +};
> +
> static inline bool sev_version_greater_or_equal(u8 maj, u8 min)
> {
> struct sev_device *sev = psp_master->sev_data;
> @@ -1197,6 +1204,9 @@ static int __sev_snp_init_locked(int *error)
> dev_info(sev->dev, "SEV-SNP API:%d.%d build:%d\n", sev->api_major,
> sev->api_minor, sev->build);
>
> + atomic_notifier_chain_register(&panic_notifier_list,
> + &snp_panic_notifier);
> +
> sev_es_tmr_size = SNP_TMR_SIZE;
>
> return 0;
> @@ -1751,6 +1761,9 @@ static int __sev_snp_shutdown_locked(int *error, bool panic)
> sev->snp_initialized = false;
> dev_dbg(sev->dev, "SEV-SNP firmware shutdown\n");
>
> + atomic_notifier_chain_unregister(&panic_notifier_list,
> + &snp_panic_notifier);
> +
> /* Reset TMR size back to default */
> sev_es_tmr_size = SEV_TMR_SIZE;
>
> @@ -2466,10 +2479,6 @@ static int snp_shutdown_on_panic(struct notifier_block *nb,
> return NOTIFY_DONE;
> }
>
> -static struct notifier_block snp_panic_notifier = {
> - .notifier_call = snp_shutdown_on_panic,
> -};
> -
> int sev_issue_cmd_external_user(struct file *filep, unsigned int cmd,
> void *data, int *error)
> {
> @@ -2518,8 +2527,6 @@ void sev_pci_init(void)
> 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;
>
> err:
> @@ -2536,7 +2543,4 @@ void sev_pci_exit(void)
> return;
>
> sev_firmware_shutdown(sev);
> -
> - atomic_notifier_chain_unregister(&panic_notifier_list,
> - &snp_panic_notifier);
> }