All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
To: Jarkko Sakkinen
	<jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
Cc: tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH] tpm: drop int_queue from tpm_vendor_specific
Date: Tue, 22 Mar 2016 10:31:54 -0600	[thread overview]
Message-ID: <20160322163154.GA8060@obsidianresearch.com> (raw)
In-Reply-To: <1458620409-15603-1-git-send-email-jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>

On Tue, Mar 22, 2016 at 06:20:09AM +0200, Jarkko Sakkinen wrote:
> Drop field int_queue from tpm_vendor_specific as it is used only by
> tpm_tis. Probably all of the fields should be eventually dropped and
> moved to the private structures of different drivers but it is better to
> do this one step at a time in order not to break anything.
> 
> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>

Reviewed-by: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>

>  drivers/char/tpm/tpm.h             |  1 -
>  drivers/char/tpm/tpm_i2c_nuvoton.c |  1 -
>  drivers/char/tpm/tpm_tis.c         | 19 ++++++++++++-------
>  3 files changed, 12 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
> index f197eef..4764545 100644
> +++ b/drivers/char/tpm/tpm.h
> @@ -148,7 +148,6 @@ struct tpm_vendor_specific {
>  	void *priv;
>  
>  	wait_queue_head_t read_queue;
> -	wait_queue_head_t int_queue;
>  
>  	u16 manufacturer_id;
>  };
> diff --git a/drivers/char/tpm/tpm_i2c_nuvoton.c b/drivers/char/tpm/tpm_i2c_nuvoton.c
> index d61d43f..a43b5f3 100644
> +++ b/drivers/char/tpm/tpm_i2c_nuvoton.c
> @@ -540,7 +540,6 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
>  		return -ENOMEM;
>  
>  	init_waitqueue_head(&chip->vendor.read_queue);
> -	init_waitqueue_head(&chip->vendor.int_queue);
>  
>  	/* Default timeouts */
>  	chip->vendor.timeout_a = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
> diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
> index eed3bf5..7d7a776 100644
> +++ b/drivers/char/tpm/tpm_tis.c
> @@ -95,6 +95,7 @@ struct tpm_info {
>  
>  struct priv_data {
>  	bool irq_tested;
> +	wait_queue_head_t int_queue;
>  };
>  
>  #if defined(CONFIG_PNP) && defined(CONFIG_ACPI)
> @@ -157,6 +158,7 @@ static void release_locality(struct tpm_chip *chip, int l, int force)
>  
>  static int request_locality(struct tpm_chip *chip, int l)
>  {
> +	struct priv_data *priv = chip->vendor.priv;
>  	unsigned long stop, timeout;
>  	long rc;
>  
> @@ -173,7 +175,7 @@ again:
>  		timeout = stop - jiffies;
>  		if ((long)timeout <= 0)
>  			return -1;
> -		rc = wait_event_interruptible_timeout(chip->vendor.int_queue,
> +		rc = wait_event_interruptible_timeout(priv->int_queue,
>  						      (check_locality
>  						       (chip, l) >= 0),
>  						      timeout);
> @@ -249,6 +251,7 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
>  
>  static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>  {
> +	struct priv_data *priv = chip->vendor.priv;
>  	int size = 0;
>  	int expected, status;
>  
> @@ -279,7 +282,7 @@ static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>  	}
>  
>  	wait_for_tpm_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
> -			  &chip->vendor.int_queue, false);
> +			  &priv->int_queue, false);
>  	status = tpm_tis_status(chip);
>  	if (status & TPM_STS_DATA_AVAIL) {	/* retry? */
>  		dev_err(&chip->dev, "Error left over data\n");
> @@ -304,6 +307,7 @@ MODULE_PARM_DESC(itpm, "Force iTPM workarounds (found on some Lenovo laptops)");
>   */
>  static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
>  {
> +	struct priv_data *priv = chip->vendor.priv;
>  	int rc, status, burstcnt;
>  	size_t count = 0;
>  
> @@ -315,7 +319,7 @@ static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
>  		tpm_tis_ready(chip);
>  		if (wait_for_tpm_stat
>  		    (chip, TPM_STS_COMMAND_READY, chip->vendor.timeout_b,
> -		     &chip->vendor.int_queue, false) < 0) {
> +		     &priv->int_queue, false) < 0) {
>  			rc = -ETIME;
>  			goto out_err;
>  		}
> @@ -330,7 +334,7 @@ static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
>  		}
>  
>  		wait_for_tpm_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
> -				  &chip->vendor.int_queue, false);
> +				  &priv->int_queue, false);
>  		status = tpm_tis_status(chip);
>  		if (!itpm && (status & TPM_STS_DATA_EXPECT) == 0) {
>  			rc = -EIO;
> @@ -342,7 +346,7 @@ static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
>  	iowrite8(buf[count],
>  		 chip->vendor.iobase + TPM_DATA_FIFO(chip->vendor.locality));
>  	wait_for_tpm_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
> -			  &chip->vendor.int_queue, false);
> +			  &priv->int_queue, false);
>  	status = tpm_tis_status(chip);
>  	if ((status & TPM_STS_DATA_EXPECT) != 0) {
>  		rc = -EIO;
> @@ -537,6 +541,7 @@ static const struct tpm_class_ops tpm_tis = {
>  static irqreturn_t tis_int_handler(int dummy, void *dev_id)
>  {
>  	struct tpm_chip *chip = dev_id;
> +	struct priv_data *priv = chip->vendor.priv;
>  	u32 interrupt;
>  	int i;
>  
> @@ -556,7 +561,7 @@ static irqreturn_t tis_int_handler(int dummy, void *dev_id)
>  	if (interrupt &
>  	    (TPM_INTF_LOCALITY_CHANGE_INT | TPM_INTF_STS_VALID_INT |
>  	     TPM_INTF_CMD_READY_INT))
> -		wake_up_interruptible(&chip->vendor.int_queue);
> +		wake_up_interruptible(&priv->int_queue);
>  
>  	/* Clear interrupts handled with TPM_EOI */
>  	iowrite32(interrupt,
> @@ -773,7 +778,7 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
>  
>  	/* INTERRUPT Setup */
>  	init_waitqueue_head(&chip->vendor.read_queue);
> -	init_waitqueue_head(&chip->vendor.int_queue);
> +	init_waitqueue_head(&priv->int_queue);
>  	if (interrupts && tpm_info->irq != -1) {
>  		if (tpm_info->irq) {
>  			tpm_tis_probe_irq_single(chip, intmask, IRQF_SHARED,

-- 
Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>        (780)4406067x832
Chief Technology Officer, Obsidian Research Corp         Edmonton, Canada

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140

WARNING: multiple messages have this Message-ID (diff)
From: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
To: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Cc: Peter Huewe <peterhuewe@gmx.de>,
	tpmdd-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org
Subject: Re: [tpmdd-devel] [PATCH] tpm: drop int_queue from tpm_vendor_specific
Date: Tue, 22 Mar 2016 10:31:54 -0600	[thread overview]
Message-ID: <20160322163154.GA8060@obsidianresearch.com> (raw)
In-Reply-To: <1458620409-15603-1-git-send-email-jarkko.sakkinen@linux.intel.com>

On Tue, Mar 22, 2016 at 06:20:09AM +0200, Jarkko Sakkinen wrote:
> Drop field int_queue from tpm_vendor_specific as it is used only by
> tpm_tis. Probably all of the fields should be eventually dropped and
> moved to the private structures of different drivers but it is better to
> do this one step at a time in order not to break anything.
> 
> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>

Reviewed-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>

>  drivers/char/tpm/tpm.h             |  1 -
>  drivers/char/tpm/tpm_i2c_nuvoton.c |  1 -
>  drivers/char/tpm/tpm_tis.c         | 19 ++++++++++++-------
>  3 files changed, 12 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
> index f197eef..4764545 100644
> +++ b/drivers/char/tpm/tpm.h
> @@ -148,7 +148,6 @@ struct tpm_vendor_specific {
>  	void *priv;
>  
>  	wait_queue_head_t read_queue;
> -	wait_queue_head_t int_queue;
>  
>  	u16 manufacturer_id;
>  };
> diff --git a/drivers/char/tpm/tpm_i2c_nuvoton.c b/drivers/char/tpm/tpm_i2c_nuvoton.c
> index d61d43f..a43b5f3 100644
> +++ b/drivers/char/tpm/tpm_i2c_nuvoton.c
> @@ -540,7 +540,6 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
>  		return -ENOMEM;
>  
>  	init_waitqueue_head(&chip->vendor.read_queue);
> -	init_waitqueue_head(&chip->vendor.int_queue);
>  
>  	/* Default timeouts */
>  	chip->vendor.timeout_a = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
> diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
> index eed3bf5..7d7a776 100644
> +++ b/drivers/char/tpm/tpm_tis.c
> @@ -95,6 +95,7 @@ struct tpm_info {
>  
>  struct priv_data {
>  	bool irq_tested;
> +	wait_queue_head_t int_queue;
>  };
>  
>  #if defined(CONFIG_PNP) && defined(CONFIG_ACPI)
> @@ -157,6 +158,7 @@ static void release_locality(struct tpm_chip *chip, int l, int force)
>  
>  static int request_locality(struct tpm_chip *chip, int l)
>  {
> +	struct priv_data *priv = chip->vendor.priv;
>  	unsigned long stop, timeout;
>  	long rc;
>  
> @@ -173,7 +175,7 @@ again:
>  		timeout = stop - jiffies;
>  		if ((long)timeout <= 0)
>  			return -1;
> -		rc = wait_event_interruptible_timeout(chip->vendor.int_queue,
> +		rc = wait_event_interruptible_timeout(priv->int_queue,
>  						      (check_locality
>  						       (chip, l) >= 0),
>  						      timeout);
> @@ -249,6 +251,7 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
>  
>  static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>  {
> +	struct priv_data *priv = chip->vendor.priv;
>  	int size = 0;
>  	int expected, status;
>  
> @@ -279,7 +282,7 @@ static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>  	}
>  
>  	wait_for_tpm_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
> -			  &chip->vendor.int_queue, false);
> +			  &priv->int_queue, false);
>  	status = tpm_tis_status(chip);
>  	if (status & TPM_STS_DATA_AVAIL) {	/* retry? */
>  		dev_err(&chip->dev, "Error left over data\n");
> @@ -304,6 +307,7 @@ MODULE_PARM_DESC(itpm, "Force iTPM workarounds (found on some Lenovo laptops)");
>   */
>  static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
>  {
> +	struct priv_data *priv = chip->vendor.priv;
>  	int rc, status, burstcnt;
>  	size_t count = 0;
>  
> @@ -315,7 +319,7 @@ static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
>  		tpm_tis_ready(chip);
>  		if (wait_for_tpm_stat
>  		    (chip, TPM_STS_COMMAND_READY, chip->vendor.timeout_b,
> -		     &chip->vendor.int_queue, false) < 0) {
> +		     &priv->int_queue, false) < 0) {
>  			rc = -ETIME;
>  			goto out_err;
>  		}
> @@ -330,7 +334,7 @@ static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
>  		}
>  
>  		wait_for_tpm_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
> -				  &chip->vendor.int_queue, false);
> +				  &priv->int_queue, false);
>  		status = tpm_tis_status(chip);
>  		if (!itpm && (status & TPM_STS_DATA_EXPECT) == 0) {
>  			rc = -EIO;
> @@ -342,7 +346,7 @@ static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
>  	iowrite8(buf[count],
>  		 chip->vendor.iobase + TPM_DATA_FIFO(chip->vendor.locality));
>  	wait_for_tpm_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
> -			  &chip->vendor.int_queue, false);
> +			  &priv->int_queue, false);
>  	status = tpm_tis_status(chip);
>  	if ((status & TPM_STS_DATA_EXPECT) != 0) {
>  		rc = -EIO;
> @@ -537,6 +541,7 @@ static const struct tpm_class_ops tpm_tis = {
>  static irqreturn_t tis_int_handler(int dummy, void *dev_id)
>  {
>  	struct tpm_chip *chip = dev_id;
> +	struct priv_data *priv = chip->vendor.priv;
>  	u32 interrupt;
>  	int i;
>  
> @@ -556,7 +561,7 @@ static irqreturn_t tis_int_handler(int dummy, void *dev_id)
>  	if (interrupt &
>  	    (TPM_INTF_LOCALITY_CHANGE_INT | TPM_INTF_STS_VALID_INT |
>  	     TPM_INTF_CMD_READY_INT))
> -		wake_up_interruptible(&chip->vendor.int_queue);
> +		wake_up_interruptible(&priv->int_queue);
>  
>  	/* Clear interrupts handled with TPM_EOI */
>  	iowrite32(interrupt,
> @@ -773,7 +778,7 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
>  
>  	/* INTERRUPT Setup */
>  	init_waitqueue_head(&chip->vendor.read_queue);
> -	init_waitqueue_head(&chip->vendor.int_queue);
> +	init_waitqueue_head(&priv->int_queue);
>  	if (interrupts && tpm_info->irq != -1) {
>  		if (tpm_info->irq) {
>  			tpm_tis_probe_irq_single(chip, intmask, IRQF_SHARED,

-- 
Jason Gunthorpe <jgunthorpe@obsidianresearch.com>        (780)4406067x832
Chief Technology Officer, Obsidian Research Corp         Edmonton, Canada

  parent reply	other threads:[~2016-03-22 16:31 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-22  4:20 [PATCH] tpm: drop int_queue from tpm_vendor_specific Jarkko Sakkinen
2016-03-22  4:20 ` Jarkko Sakkinen
     [not found] ` <1458620409-15603-1-git-send-email-jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2016-03-22 16:31   ` Jason Gunthorpe [this message]
2016-03-22 16:31     ` [tpmdd-devel] " Jason Gunthorpe
  -- strict thread matches above, loose matches on Subject: below --
2016-03-23  7:55 [PATCH 0/3] Few st33zp24 fixes Christophe Ricard
2016-03-23  8:17 ` Jarkko Sakkinen
2016-03-23  8:21   ` Christophe Ricard
     [not found]     ` <56F251F2.6050709-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-03-23 21:58       ` [PATCH] tpm: drop int_queue from tpm_vendor_specific Christophe Ricard
     [not found]         ` <56F31170.4020702-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-03-24 13:25           ` 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=20160322163154.GA8060@obsidianresearch.com \
    --to=jgunthorpe-epgobjl8dl3ta4ec/59zmfatqe2ktcn/@public.gmane.org \
    --cc=jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
    /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.