All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Winkler, Tomas" <tomas.winkler@intel.com>
To: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>,
	"linux-integrity@vger.kernel.org"
	<linux-integrity@vger.kernel.org>
Cc: "linux-security-module@vger.kernel.org" 
	<linux-security-module@vger.kernel.org>,
	James Bottomley <James.Bottomley@HansenPartnership.com>,
	"Struk, Tadeusz" <tadeusz.struk@intel.com>,
	Stefan Berger <stefanb@linux.vnet.ibm.com>,
	"Nayna Jain" <nayna@linux.ibm.com>,
	Peter Huewe <peterhuewe@gmx.de>, "Jason Gunthorpe" <jgg@ziepe.ca>,
	Arnd Bergmann <arnd@arndb.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	open list <linux-kernel@vger.kernel.org>
Subject: RE: [PATCH v5 16/17] tpm: take TPM chip power gating out of tpm_transmit()
Date: Thu, 8 Nov 2018 18:38:59 +0000	[thread overview]
Message-ID: <5B8DA87D05A7694D9FA63FD143655C1B9DA18602@hasmsx108.ger.corp.intel.com> (raw)
In-Reply-To: <20181108141541.12832-17-jarkko.sakkinen@linux.intel.com>



> 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).
> 
I don't think you can do that,  locality has to be request for each command, as  for example tboot can request higher locality any time. 
Same for cmd_ready()/go_idle() powergatin, you will prevent the whole platform entering power save state.
Thanks
Tomas



> The consequence of this is that this commit removes the remaining nested
> calls.
> 
> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> ---
>  drivers/char/tpm/tpm-chip.c       | 19 ++++++-------------
>  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, 11 insertions(+), 29 deletions(-)
> 
> diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c index
> 65f1561eba81..87570182f75e 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,7 @@ int tpm_try_get_ops(struct tpm_chip *chip)
>  		goto out_lock;
> 
>  	mutex_lock(&chip->tpm_mutex);
> -	return 0;
> +	return tpm_chip_start(chip, 0);
>  out_lock:
>  	up_read(&chip->ops_sem);
>  	put_device(&chip->dev);
> @@ -186,6 +174,7 @@ EXPORT_SYMBOL_GPL(tpm_try_get_ops);
>   */
>  void tpm_put_ops(struct tpm_chip *chip)  {
> +	tpm_chip_stop(chip, 0);
>  	mutex_unlock(&chip->tpm_mutex);
>  	up_read(&chip->ops_sem);
>  	put_device(&chip->dev);
> @@ -563,7 +552,11 @@ int tpm_chip_register(struct tpm_chip *chip)  {
>  	int rc;
> 
> +	rc = tpm_chip_start(chip, 0);
> +	if (rc)
> +		return rc;
>  	rc = tpm_auto_startup(chip);
> +	tpm_chip_stop(chip, 0);
>  	if (rc)
>  		return rc;
> 
> diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-
> interface.c
> index 888c9923fca1..5c04c0d9aaba 100644
> --- a/drivers/char/tpm/tpm-interface.c
> +++ b/drivers/char/tpm/tpm-interface.c
> @@ -168,11 +168,7 @@ ssize_t tpm_transmit(struct tpm_chip *chip, u8
> *buf, size_t bufsiz,
>  	memcpy(save, buf, save_size);
> 
>  	for (;;) {
> -		ret = tpm_chip_start(chip, flags);
> -		if (ret)
> -			return ret;
>  		ret = tpm_try_transmit(chip, buf, bufsiz, flags);
> -		tpm_chip_stop(chip, flags);
> 
>  		rc = be32_to_cpu(header->return_code);
>  		if (rc != TPM2_RC_RETRY && rc != TPM2_RC_TESTING) diff --
> git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h index
> c42a75710b70..f9d56dfd0d20 100644
> --- a/drivers/char/tpm/tpm.h
> +++ b/drivers/char/tpm/tpm.h
> @@ -485,15 +485,6 @@ extern const struct file_operations tpm_fops;
> extern const struct file_operations tpmrm_fops;  extern struct idr
> dev_nums_idr;
> 
> -/**
> - * enum tpm_transmit_flags - flags for tpm_transmit()
> - *
> - * %TPM_TRANSMIT_NESTED:	discard setup steps (power management,
> locality)
> - */
> -enum tpm_transmit_flags {
> -	TPM_TRANSMIT_NESTED      = BIT(0),
> -};
> -
>  ssize_t tpm_transmit(struct tpm_chip *chip, u8 *buf, size_t bufsiz,
>  		     unsigned int flags);
>  ssize_t tpm_transmit_cmd(struct tpm_chip *chip, struct tpm_buf *buf, diff -
> -git a/drivers/char/tpm/tpm2-space.c b/drivers/char/tpm/tpm2-space.c
> index 341d4b90ba2f..8ed063b54040 100644
> --- a/drivers/char/tpm/tpm2-space.c
> +++ b/drivers/char/tpm/tpm2-space.c
> @@ -60,7 +60,10 @@ int tpm2_init_space(struct tpm_space *space)  void
> tpm2_del_space(struct tpm_chip *chip, struct tpm_space *space)  {
>  	mutex_lock(&chip->tpm_mutex);
> -	tpm2_flush_sessions(chip, space);
> +	if (!tpm_chip_start(chip, 0)) {
> +		tpm2_flush_sessions(chip, space);
> +		tpm_chip_stop(chip, 0);
> +	}
>  	mutex_unlock(&chip->tpm_mutex);
>  	kfree(space->context_buf);
>  	kfree(space->session_buf);
> diff --git a/drivers/char/tpm/tpm_vtpm_proxy.c
> b/drivers/char/tpm/tpm_vtpm_proxy.c
> index e8a1da2810a9..a4bb60e163cc 100644
> --- a/drivers/char/tpm/tpm_vtpm_proxy.c
> +++ b/drivers/char/tpm/tpm_vtpm_proxy.c
> @@ -417,8 +417,7 @@ static int vtpm_proxy_request_locality(struct
> tpm_chip *chip, int locality)
> 
>  	proxy_dev->state |= STATE_DRIVER_COMMAND;
> 
> -	rc = tpm_transmit_cmd(chip, &buf, 0, TPM_TRANSMIT_NESTED,
> -			      "attempting to set locality");
> +	rc = tpm_transmit_cmd(chip, &buf, 0, 0, "attempting to set locality");
> 
>  	proxy_dev->state &= ~STATE_DRIVER_COMMAND;
> 
> --
> 2.19.1


  reply	other threads:[~2018-11-08 18:39 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-08 14:15 [PATCH v5 00/17] Remove nested TPM operations Jarkko Sakkinen
2018-11-08 14:15 ` Jarkko Sakkinen
2018-11-08 14:15 ` [PATCH v5 01/17] tpm: use tpm_buf in tpm_transmit_cmd() as the IO parameter Jarkko Sakkinen
2018-11-08 14:15 ` [PATCH v5 02/17] tpm: fix invalid return value in pubek_show() Jarkko Sakkinen
2018-11-08 14:15 ` [PATCH v5 03/17] tpm: return 0 from pcrs_show() when tpm1_pcr_read() fails Jarkko Sakkinen
2018-11-08 14:52   ` Stefan Berger
2018-11-08 14:15 ` [PATCH v5 04/17] tpm: call tpm2_flush_space() on error in tpm_try_transmit() Jarkko Sakkinen
2018-11-08 14:55   ` Stefan Berger
2018-11-08 14:15 ` [PATCH v5 05/17] tpm: print tpm2_commit_space() error inside tpm2_commit_space() Jarkko Sakkinen
2018-11-08 14:56   ` Stefan Berger
2018-11-08 14:15 ` [PATCH v5 06/17] tpm: clean up tpm_try_transmit() error handling flow Jarkko Sakkinen
2018-11-08 14:59   ` Stefan Berger
2018-11-08 14:15 ` [PATCH v5 07/17] tpm: declare struct tpm_header Jarkko Sakkinen
2018-11-08 14:15   ` Jarkko Sakkinen
2018-11-08 15:02   ` Stefan Berger
2018-11-08 15:02     ` Stefan Berger
2018-11-08 14:15 ` [PATCH v5 08/17] tpm: access command header through struct in tpm_try_transmit() Jarkko Sakkinen
2018-11-08 15:03   ` Stefan Berger
2018-11-08 14:15 ` [PATCH v5 09/17] tpm: move tpm_validate_commmand() to tpm2-space.c Jarkko Sakkinen
2018-11-08 17:03   ` Winkler, Tomas
2018-11-08 23:07     ` Jarkko Sakkinen
2018-11-08 14:15 ` [PATCH v5 10/17] tpm: encapsulate tpm_dev_transmit() Jarkko Sakkinen
2018-11-08 14:15 ` [PATCH v5 11/17] tpm: move TPM space code out of tpm_transmit() Jarkko Sakkinen
2018-11-08 15:16   ` Stefan Berger
2018-11-08 18:58     ` Jarkko Sakkinen
2018-11-08 14:15 ` [PATCH v5 12/17] tpm: remove @space from tpm_transmit() Jarkko Sakkinen
2018-11-08 15:18   ` Stefan Berger
2018-11-08 14:15 ` [PATCH v5 13/17] tpm: use tpm_try_get_ops() in tpm-sysfs.c Jarkko Sakkinen
2018-11-08 15:26   ` Stefan Berger
2018-11-08 14:15 ` [PATCH v5 14/17] tpm: remove TPM_TRANSMIT_UNLOCKED flag Jarkko Sakkinen
2018-11-08 15:43   ` Stefan Berger
2018-11-08 19:02     ` Jarkko Sakkinen
2018-11-08 14:15 ` [PATCH v5 15/17] tpm: introduce tpm_chip_start() and tpm_chip_stop() Jarkko Sakkinen
2018-11-08 14:15 ` [PATCH v5 16/17] tpm: take TPM chip power gating out of tpm_transmit() Jarkko Sakkinen
2018-11-08 18:38   ` Winkler, Tomas [this message]
2018-11-08 23:07     ` Jarkko Sakkinen
2018-11-09 21:37       ` Winkler, Tomas
2018-11-13 11:12         ` Jarkko Sakkinen
2018-11-13 11:58           ` Winkler, Tomas
2018-11-13 15:52             ` Jarkko Sakkinen
2018-11-08 14:15 ` [PATCH v5 17/17] tpm: remove @flags from tpm_transmit() Jarkko Sakkinen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5B8DA87D05A7694D9FA63FD143655C1B9DA18602@hasmsx108.ger.corp.intel.com \
    --to=tomas.winkler@intel.com \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=arnd@arndb.de \
    --cc=gregkh@linuxfoundation.org \
    --cc=jarkko.sakkinen@linux.intel.com \
    --cc=jgg@ziepe.ca \
    --cc=linux-integrity@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=nayna@linux.ibm.com \
    --cc=peterhuewe@gmx.de \
    --cc=stefanb@linux.vnet.ibm.com \
    --cc=tadeusz.struk@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.