Re: [PATCH v8 08/11] tpm, tpm: Implement usage counter for locality

From: Jarkko Sakkinen
Date: Mon Oct 31 2022 - 21:07:06 EST


On Tue, Oct 25, 2022 at 02:25:39AM +0200, Lino Sanfilippo wrote:
>
>
> On 23.10.22 07:26, Jarkko Sakkinen wrote:
> > On Tue, Oct 18, 2022 at 08:25:08AM +0200, Lukas Wunner wrote:
> >> On Tue, Oct 18, 2022 at 01:57:29AM +0200, Lino Sanfilippo wrote:
> >>> Implement a usage counter for the (default) locality used by the TPM TIS
> >>> driver:
> >>> Request the locality from the TPM if it has not been claimed yet, otherwise
> >>> only increment the counter. Also release the locality if the counter is 0
> >>> otherwise only decrement the counter. Ensure thread-safety by protecting
> >>> the counter with a mutex.
> >>>
> >>> This allows to request and release the locality from a thread and the
> >>> interrupt handler at the same time without the danger to interfere with
> >>> each other.
> >> [...]
> >>> +static int tpm_tis_release_locality(struct tpm_chip *chip, int l)
> >>> {
> >>> struct tpm_tis_data *priv = dev_get_drvdata(&chip->dev);
> >>>
> >>> - tpm_tis_write8(priv, TPM_ACCESS(l), TPM_ACCESS_ACTIVE_LOCALITY);
> >>> + mutex_lock(&priv->locality_count_mutex);
> >>> + priv->locality_count--;
> >>> + if (priv->locality_count == 0)
> >>> + tpm_tis_release_locality_locked(priv, l);
> >>> + mutex_unlock(&priv->locality_count_mutex);
> >>>
> >>> return 0;
> >>> }
> >>
> >> Hm, any reason not to use struct kref for the locality counter?
> >> Provides correct memory ordering (no mutex needed) and allows for
> >> calling a release function too upon reaching 0.
> >
> > I proposed for last version kref. I have no idea why this is still
> > using mutex. And now I apparently have proposed rcu for the whole
> > struct (forgot what I had put my feedback for earlier version).
> >
> > This keeps being confusing patch as the commit message does not
> > really go to the bottom line why mutex is really the best possible
> > choice here.
> >
>
>
> I actually tried to implement this via kref but then came to the
> conclusion it is rather not a good choice for our case. Please
> see my response to your former request to implement this via kref:
>
> https://lore.kernel.org/all/09eefdab-f677-864a-99f7-869d7a8744c2@xxxxxx/

OK, my bad I missed this, sorry.

BR, Jarkko