On 2/25/25 15:00, Ashish Kalra wrote: > From: Ashish Kalra <ashish.kalra@xxxxxxx> > > Currently, the SNP panic notifier is registered on module initialization > regardless of whether SNP is being enabled or initialized. > > Instead, register the SNP panic notifier only when SNP is actually > initialized and unregister the notifier when SNP is shutdown. > > Reviewed-by: Dionna Glaze <dionnaglaze@xxxxxxxxxx> > Reviewed-by: Alexey Kardashevskiy <aik@xxxxxxx> > Signed-off-by: Ashish Kalra <ashish.kalra@xxxxxxx> Reviewed-by: Tom Lendacky <thomas.lendacky@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 c784de6c77c3..b3479a2896d0 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; > @@ -1198,6 +1205,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; > @@ -1754,6 +1764,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; > > @@ -2481,10 +2494,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) > { > @@ -2533,8 +2542,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: > @@ -2551,7 +2558,4 @@ void sev_pci_exit(void) > return; > > sev_firmware_shutdown(sev); > - > - atomic_notifier_chain_unregister(&panic_notifier_list, > - &snp_panic_notifier); > }