On Fri, Nov 16, 2018 at 12:02:17PM -0500, Stefan Berger wrote: > On 11/16/18 7:38 AM, Jarkko Sakkinen wrote: > > Call tpm_chip_start() and tpm_chip_stop() in > > > > * tpm_try_get_ops() and tpm_put_ops() > > * tpm_chip_register() > > * tpm2_del_space() > > > > And remove these calls from tpm_transmit(). The core reason for this > > change is that in tpm_vtpm_proxy a locality change requires a virtual > > TPM command (a command made up just for that driver). > > > > The consequence of this is that this commit removes the remaining nested > > calls. > > > > Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@xxxxxxxxxxxxxxx> > > --- > > drivers/char/tpm/tpm-chip.c | 21 ++++++++------------- > > drivers/char/tpm/tpm-interface.c | 4 ---- > > drivers/char/tpm/tpm.h | 9 --------- > > drivers/char/tpm/tpm2-space.c | 5 ++++- > > drivers/char/tpm/tpm_vtpm_proxy.c | 3 +-- > > 5 files changed, 13 insertions(+), 29 deletions(-) > > > > diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c > > index 65f1561eba81..837d44fa0797 100644 > > --- a/drivers/char/tpm/tpm-chip.c > > +++ b/drivers/char/tpm/tpm-chip.c > > @@ -41,9 +41,6 @@ static int tpm_request_locality(struct tpm_chip *chip, unsigned int flags) > > { > > int rc; > > > > - if (flags & TPM_TRANSMIT_NESTED) > > - return 0; > > - > > if (!chip->ops->request_locality) > > return 0; > > > > @@ -59,9 +56,6 @@ static void tpm_relinquish_locality(struct tpm_chip *chip, unsigned int flags) > > { > > int rc; > > > > - if (flags & TPM_TRANSMIT_NESTED) > > - return; > > - > > if (!chip->ops->relinquish_locality) > > return; > > > > @@ -74,9 +68,6 @@ static void tpm_relinquish_locality(struct tpm_chip *chip, unsigned int flags) > > > > static int tpm_cmd_ready(struct tpm_chip *chip, unsigned int flags) > > { > > - if (flags & TPM_TRANSMIT_NESTED) > > - return 0; > > - > > if (!chip->ops->cmd_ready) > > return 0; > > > > @@ -85,9 +76,6 @@ static int tpm_cmd_ready(struct tpm_chip *chip, unsigned int flags) > > > > static int tpm_go_idle(struct tpm_chip *chip, unsigned int flags) > > { > > - if (flags & TPM_TRANSMIT_NESTED) > > - return 0; > > - > > if (!chip->ops->go_idle) > > return 0; > > > > @@ -169,7 +157,9 @@ int tpm_try_get_ops(struct tpm_chip *chip) > > goto out_lock; > > > > mutex_lock(&chip->tpm_mutex); > > - return 0; > > + rc = tpm_chip_start(chip, 0); > > + if (rc) > > + mutex_unlock(&chip->tpm_mutex); > > This cannot be right to fall through to up_read() etc. Ouch! It is not and I had a fixup for it that was not applied to the resulting patch set :-/ /Jarkko