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/ Regards, Lino