On Mon, Dec 16, 2024 at 3:58 PM Ashish Kalra <Ashish.Kalra@xxxxxxx> 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 > SNP in PSP driver when KVM module is unloaded. > > Currently the SNP panic notifier is being registered > irrespective of SNP being enabled/initialized and with this > change the SNP panic notifier is registered only if SNP > support is enabled and initialized. > > Signed-off-by: Ashish Kalra <ashish.kalra@xxxxxxx> > --- > drivers/crypto/ccp/sev-dev.c | 21 +++++++++++++-------- > 1 file changed, 13 insertions(+), 8 deletions(-) > > diff --git a/drivers/crypto/ccp/sev-dev.c b/drivers/crypto/ccp/sev-dev.c > index 9632a9a5c92e..7c15dec55f58 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; > @@ -1191,6 +1198,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; > > @@ -2490,10 +2503,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) > { > @@ -2542,8 +2551,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: > @@ -2561,6 +2568,4 @@ void sev_pci_exit(void) > > sev_firmware_shutdown(sev); > > - atomic_notifier_chain_unregister(&panic_notifier_list, > - &snp_panic_notifier); > } > -- > 2.34.1 > Reviewed-by: Dionna Glaze <dionnaglaze@xxxxxxxxxx> -- -Dionna Glaze, PhD, CISSP, CCSP (she/her)