Re: [PATCH v4 1/9] mmc: add basic support for inline encryption

Eric Biggers
2021-01-15T17:56:57Z

On Fri, Jan 15, 2021 at 10:22:03AM +0100, Ulf Hansson wrote:
> On Mon, 4 Jan 2021 at 19:48, Eric Biggers <ebiggers@kernel.org> wrote:
> >
> > From: Eric Biggers <ebiggers@google.com>
> >
> > In preparation for adding CQHCI crypto engine (inline encryption)
> > support, add the code required to make mmc_core and mmc_block aware of
> > inline encryption. Specifically:
> >
> > - Add a capability flag MMC_CAP2_CRYPTO to struct mmc_host. Drivers
> > will set this if the host and driver support inline encryption.
> >
> > - Embed a blk_keyslot_manager in struct mmc_host. Drivers will
> > initialize this if the host and driver support inline encryption.
> > mmc_block registers this keyslot manager with the request_queue of any
> > MMC card attached to the host. mmc_core destroys this keyslot manager
> > when freeing the mmc_host.
> >
> > - Make mmc_block copy the crypto keyslot and crypto data unit number
> > from struct request to struct mmc_request, so that drivers will have
> > access to them.
> >
> > - If the MMC host is reset, reprogram all the keyslots to ensure that
> > the software state stays in sync with the hardware state.
> >
> > Co-developed-by: Satya Tangirala <satyat@google.com>
> > Signed-off-by: Satya Tangirala <satyat@google.com>
> > Acked-by: Adrian Hunter <adrian.hunter@intel.com>
> > Reviewed-by: Satya Tangirala <satyat@google.com>
> > Reviewed-and-tested-by: Peng Zhou <peng.zhou@mediatek.com>
> > Signed-off-by: Eric Biggers <ebiggers@google.com>
>
> Eric, again, my apologies for the delay. Overall, I think this looks good.
>
> My only hesitation to merge this as is, is that I want to make sure
> you have thought of the life cycle issues for the struct
> blk_keyslot_manager ksm. It's being used both from the mmc core/block
> device driver and the mmc host driver. I am looking at this right now
> and will get back to you very soon, if I find some issues with it.
>
> If you have some time, feel free to elaborate around how this is
> intended to work.
>
> Kind regards
> Uffe

The blk_keyslot_manager is initialized early on when the other host structures
(struct mmc_host, struct cqhci_host, struct sdhci_host, struct sdhci_msm_host)
are initialized, prior to mmc_add_host().

It is destroyed when the struct mmc_host is freed by mmc_free_host().

So it should just work; it's the same lifecycle as the existing host structures.
Is there something you think I'm overlooking?

- Eric