Message ID | 3751510d09c0811811e46e857942bf238aa52d05.1739997129.git.ashish.kalra@amd.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Move initializing SEV/SNP functionality to KVM | expand |
On 2/19/25 14:54, Ashish Kalra wrote: > From: Ashish Kalra <ashish.kalra@amd.com> > > Add new API interface to do SEV/SNP platform shutdown when KVM module > is unloaded. Just a nit below if you have to respin. Otherwise: Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com> > > Reviewed-by: Dionna Glaze <dionnaglaze@google.com> > Signed-off-by: Ashish Kalra <ashish.kalra@amd.com> > --- > drivers/crypto/ccp/sev-dev.c | 13 +++++++++++++ > include/linux/psp-sev.h | 3 +++ > 2 files changed, 16 insertions(+) > > diff --git a/drivers/crypto/ccp/sev-dev.c b/drivers/crypto/ccp/sev-dev.c > index 582304638319..f0f3e6d29200 100644 > --- a/drivers/crypto/ccp/sev-dev.c > +++ b/drivers/crypto/ccp/sev-dev.c > @@ -2445,6 +2445,19 @@ static void sev_firmware_shutdown(struct sev_device *sev) > mutex_unlock(&sev_cmd_mutex); > } > > +void sev_platform_shutdown(void) > +{ > + struct sev_device *sev; > + > + if (!psp_master || !psp_master->sev_data) > + return; > + > + sev = psp_master->sev_data; > + > + sev_firmware_shutdown(sev); sev_firmware_shutdown(psp->master->sev_data); and then you can get rid of the sev variable. Thanks, Tom > +} > +EXPORT_SYMBOL_GPL(sev_platform_shutdown); > + > void sev_dev_destroy(struct psp_device *psp) > { > struct sev_device *sev = psp->sev_data; > diff --git a/include/linux/psp-sev.h b/include/linux/psp-sev.h > index f3cad182d4ef..0b3a36bdaa90 100644 > --- a/include/linux/psp-sev.h > +++ b/include/linux/psp-sev.h > @@ -954,6 +954,7 @@ int sev_do_cmd(int cmd, void *data, int *psp_ret); > void *psp_copy_user_blob(u64 uaddr, u32 len); > void *snp_alloc_firmware_page(gfp_t mask); > void snp_free_firmware_page(void *addr); > +void sev_platform_shutdown(void); > > #else /* !CONFIG_CRYPTO_DEV_SP_PSP */ > > @@ -988,6 +989,8 @@ static inline void *snp_alloc_firmware_page(gfp_t mask) > > static inline void snp_free_firmware_page(void *addr) { } > > +static inline void sev_platform_shutdown(void) { } > + > #endif /* CONFIG_CRYPTO_DEV_SP_PSP */ > > #endif /* __PSP_SEV_H__ */
diff --git a/drivers/crypto/ccp/sev-dev.c b/drivers/crypto/ccp/sev-dev.c index 582304638319..f0f3e6d29200 100644 --- a/drivers/crypto/ccp/sev-dev.c +++ b/drivers/crypto/ccp/sev-dev.c @@ -2445,6 +2445,19 @@ static void sev_firmware_shutdown(struct sev_device *sev) mutex_unlock(&sev_cmd_mutex); } +void sev_platform_shutdown(void) +{ + struct sev_device *sev; + + if (!psp_master || !psp_master->sev_data) + return; + + sev = psp_master->sev_data; + + sev_firmware_shutdown(sev); +} +EXPORT_SYMBOL_GPL(sev_platform_shutdown); + void sev_dev_destroy(struct psp_device *psp) { struct sev_device *sev = psp->sev_data; diff --git a/include/linux/psp-sev.h b/include/linux/psp-sev.h index f3cad182d4ef..0b3a36bdaa90 100644 --- a/include/linux/psp-sev.h +++ b/include/linux/psp-sev.h @@ -954,6 +954,7 @@ int sev_do_cmd(int cmd, void *data, int *psp_ret); void *psp_copy_user_blob(u64 uaddr, u32 len); void *snp_alloc_firmware_page(gfp_t mask); void snp_free_firmware_page(void *addr); +void sev_platform_shutdown(void); #else /* !CONFIG_CRYPTO_DEV_SP_PSP */ @@ -988,6 +989,8 @@ static inline void *snp_alloc_firmware_page(gfp_t mask) static inline void snp_free_firmware_page(void *addr) { } +static inline void sev_platform_shutdown(void) { } + #endif /* CONFIG_CRYPTO_DEV_SP_PSP */ #endif /* __PSP_SEV_H__ */