Re: [PATCH v8 16/17] tpm: take TPM chip power gating out of tpm_transmit()
From: Jarkko Sakkinen <hidden>
Date: 2018-11-18 07:37:56
Also in:
linux-integrity, lkml
On Fri, Nov 16, 2018 at 12:02:17PM -0500, Stefan Berger wrote:
On 11/16/18 7:38 AM, Jarkko Sakkinen wrote:quoted
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 <redacted> --- 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