From: Ashish Kalra <Ashish.Kalra@amd.com>
To: <seanjc@google.com>, <pbonzini@redhat.com>, <tglx@linutronix.de>,
<mingo@redhat.com>, <bp@alien8.de>, <dave.hansen@linux.intel.com>,
<x86@kernel.org>, <hpa@zytor.com>, <thomas.lendacky@amd.com>,
<john.allen@amd.com>, <herbert@gondor.apana.org.au>
Cc: <michael.roth@amd.com>, <dionnaglaze@google.com>,
<nikunj@amd.com>, <ardb@kernel.org>, <kevinloughlin@google.com>,
<Neeraj.Upadhyay@amd.com>, <aik@amd.com>, <kvm@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <linux-crypto@vger.kernel.org>,
<linux-coco@lists.linux.dev>
Subject: [PATCH v7 0/8] Move initializing SEV/SNP functionality to KVM
Date: Mon, 24 Mar 2025 21:13:41 +0000 [thread overview]
Message-ID: <cover.1742850400.git.ashish.kalra@amd.com> (raw)
From: Ashish Kalra <ashish.kalra@amd.com>
Remove initializing SEV/SNP functionality from PSP driver and instead add
support to KVM to explicitly initialize the PSP if KVM wants to use
SEV/SNP functionality.
This removes SEV/SNP initialization at PSP module probe time and does
on-demand SEV/SNP initialization when KVM really wants to use
SEV/SNP functionality. This will allow running legacy non-confidential
VMs without initializating SEV functionality.
The patch-set includes the fix to not continue with SEV INIT if SNP
INIT fails as RMP table must be initialized before calling SEV INIT
if host SNP support is enabled.
This will assist in adding SNP CipherTextHiding support and SEV firmware
hotloading support in KVM without sharing SEV ASID management and SNP
guest context support between PSP driver and KVM and keeping all that
support only in KVM.
To support SEV firmware hotloading, SEV Shutdown will be done explicitly
prior to DOWNLOAD_FIRMWARE_EX and SEV INIT post it to work with the
requirement of SEV to be in UNINIT state for DOWNLOAD_FIRMWARE_EX.
NOTE: SEV firmware hotloading will only be supported if there are no
active SEV/SEV-ES guests.
v7:
- Drop the Fixes: tag for patch 01, as continuing with SEV INIT
after SNP INIT(_EX) failure will still cause SEV INIT to fail,
we are simply aborting here after SNP INIT(_EX) failure.
- Fix commit logs.
- Add additional reviewed-by's.
v6:
- Add fix to not continue with SEV INIT if SNP INIT fails as RMP table
must be initialized before calling SEV INIT if host SNP support is enabled.
- Ensure that for SEV IOCTLs requiring SEV to be initialized,
_sev_platform_init_locked() is called instead of __sev_platform_init_locked()
to ensure that both implicit SNP and SEV INIT is done for these ioctls and
followed by __sev_firmware_shutdown() to do both SEV and SNP shutdown.
- Refactor doing SEV and SNP INIT implicitly for specific SEV and SNP
ioctls into sev_move_to_init_state() and snp_move_to_init_state().
- Ensure correct error code is returned from sev_ioctl_do_pdh_export()
if platform is not in INIT state.
- Remove dev_info() from sev_pci_init() because this would have printed
a duplicate message.
v5:
- To maintain 1-to-1 mapping between the ioctl commands and the SEV/SNP commands,
handle the implicit INIT in the same way as SHUTDOWN, which is to use a local error
for INIT and in case of implicit INIT failures, let the error logs from
__sev_platform_init_locked() OR __sev_snp_init_locked() be printed and always return
INVALID_PLATFORM_STATE as error back to the caller.
- Add better error logging for SEV/SNP INIT and SHUTDOWN commands.
- Fix commit logs.
- Add more acked-by's, reviewed-by's, suggested-by's.
v4:
- Rebase on linux-next which has the fix for SNP broken with kvm_amd
module built-in.
- Fix commit logs.
- Add explicit SEV/SNP initialization and shutdown error logs instead
of using a common exit point.
- Move SEV/SNP shutdown error logs from callers into __sev_platform_shutdown_locked()
and __sev_snp_shutdown_locked().
- Make sure that we continue to support both the probe field and psp_init_on_probe
module parameter for PSP module to support SEV INIT_EX.
- Add reviewed-by's.
v3:
- Move back to do both SNP and SEV platform initialization at KVM module
load time instead of SEV initialization on demand at SEV/SEV-ES VM launch
to prevent breaking QEMU which has a check for SEV to be initialized
prior to launching SEV/SEV-ES VMs.
- As both SNP and SEV platform initialization and shutdown is now done at
KVM module load and unload time remove patches for separate SEV and SNP
platform initialization and shutdown.
v2:
- Added support for separate SEV and SNP platform initalization, while
SNP platform initialization is done at KVM module load time, SEV
platform initialization is done on demand at SEV/SEV-ES VM launch.
- Added support for separate SEV and SNP platform shutdown, both
SEV and SNP shutdown done at KVM module unload time, only SEV
shutdown down when all SEV/SEV-ES VMs have been destroyed, this
allows SEV firmware hotloading support anytime during system lifetime.
- Updated commit messages for couple of patches in the series with
reference to the feedback received on v1 patches.
Ashish Kalra (8):
crypto: ccp: Abort doing SEV INIT if SNP INIT fails
crypto: ccp: Move dev_info/err messages for SEV/SNP init and shutdown
crypto: ccp: Ensure implicit SEV/SNP init and shutdown in ioctls
crypto: ccp: Reset TMR size at SNP Shutdown
crypto: ccp: Register SNP panic notifier only if SNP is enabled
crypto: ccp: Add new SEV/SNP platform shutdown API
KVM: SVM: Add support to initialize SEV/SNP functionality in KVM
crypto: ccp: Move SEV/SNP Platform initialization to KVM
arch/x86/kvm/svm/sev.c | 12 ++
drivers/crypto/ccp/sev-dev.c | 245 +++++++++++++++++++++++++----------
include/linux/psp-sev.h | 3 +
3 files changed, 194 insertions(+), 66 deletions(-)
--
2.34.1
next reply other threads:[~2025-03-24 21:13 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-24 21:13 Ashish Kalra [this message]
2025-03-24 21:13 ` [PATCH v7 1/8] crypto: ccp: Abort doing SEV INIT if SNP INIT fails Ashish Kalra
2025-03-24 21:14 ` [PATCH v7 2/8] crypto: ccp: Move dev_info/err messages for SEV/SNP init and shutdown Ashish Kalra
2025-03-24 21:14 ` [PATCH v7 3/8] crypto: ccp: Ensure implicit SEV/SNP init and shutdown in ioctls Ashish Kalra
2025-03-24 21:14 ` [PATCH v7 4/8] crypto: ccp: Reset TMR size at SNP Shutdown Ashish Kalra
2025-03-24 21:15 ` [PATCH v7 5/8] crypto: ccp: Register SNP panic notifier only if SNP is enabled Ashish Kalra
2025-03-24 21:15 ` [PATCH v7 6/8] crypto: ccp: Add new SEV/SNP platform shutdown API Ashish Kalra
2025-03-24 21:15 ` [PATCH v7 7/8] KVM: SVM: Add support to initialize SEV/SNP functionality in KVM Ashish Kalra
2025-03-24 21:15 ` [PATCH v7 8/8] crypto: ccp: Move SEV/SNP Platform initialization to KVM Ashish Kalra
2025-04-07 5:05 ` [PATCH v7 0/8] Move initializing SEV/SNP functionality " Herbert Xu
2025-04-07 7:53 ` Paolo Bonzini
2025-04-08 6:08 ` Herbert Xu
2025-04-08 8:10 ` Herbert Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1742850400.git.ashish.kalra@amd.com \
--to=ashish.kalra@amd.com \
--cc=Neeraj.Upadhyay@amd.com \
--cc=aik@amd.com \
--cc=ardb@kernel.org \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=dionnaglaze@google.com \
--cc=herbert@gondor.apana.org.au \
--cc=hpa@zytor.com \
--cc=john.allen@amd.com \
--cc=kevinloughlin@google.com \
--cc=kvm@vger.kernel.org \
--cc=linux-coco@lists.linux.dev \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=michael.roth@amd.com \
--cc=mingo@redhat.com \
--cc=nikunj@amd.com \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=tglx@linutronix.de \
--cc=thomas.lendacky@amd.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).