All of lore.kernel.org
 help / color / mirror / Atom feed
From: Roel Kluin <roel.kluin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>
Cc: ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org,
	linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Mike Rapoport <mike-UTxiZqZC01RS1MOuV/RT9w@public.gmane.org>,
	Eric Miao <eric.miao-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>
Subject: Re: [PATCH] i2c: timeouts reach -1
Date: Mon, 02 Feb 2009 22:50:47 +0100	[thread overview]
Message-ID: <49876AB7.5030100@gmail.com> (raw)
In-Reply-To: <20090201131854.64f54b28-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>

Jean Delvare wrote:
> On Sat, 31 Jan 2009 22:10:43 +0100, Jean Delvare wrote:
>> Hi Roel,
>>
>> On Sat, 31 Jan 2009 11:22:58 +0100, Roel Kluin wrote:
>>> With a postfix decrement these timeouts reach -1 rather than 0,
>>> but after the loop it is tested whether they have become 0.
>>>
>>> Signed-off-by: Roel Kluin <roel.kluin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>>> (...)
>>> diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c
>>> index 6af6814..6379ec1 100644
>>> --- a/drivers/i2c/busses/i2c-pxa.c
>>> +++ b/drivers/i2c/busses/i2c-pxa.c
>>> @@ -644,7 +644,7 @@ static int i2c_pxa_do_pio_xfer(struct pxa_i2c *i2c,
>>>  
>>>  	i2c_pxa_start_message(i2c);
>>>  
>>> -	while (timeout-- && i2c->msg_num > 0) {
>>> +	while (--timeout && i2c->msg_num > 0) {
>>>  		i2c_pxa_handler(0, i2c);
>>>  		udelay(10);
>>>  	}
>> Good catch. Applied, thanks for reporting.
> 
> On second thought, shouldn't the msg_num test be done first and the
> timeout test second? With the current order, you could exit with a
> timeout error while all the messages were successfully transferred.

Thanks again for the review, How about:

----------------------------->8-----------------8<------------------------------
With a postfix decrement these timeouts reach -1 rather than 0, but after the
loop it is tested whether they have become 0. also test before the decrement

As pointed out by Jean Delvare, the msg_num should be tested before the timeout.
With the current order, you could exit with a timeout error while all the
messages were successfully transferred.

Signed-off-by: Roel Kluin <roel.kluin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
diff --git a/drivers/i2c/busses/i2c-amd8111.c b/drivers/i2c/busses/i2c-amd8111.c
index edab519..a73346b 100644
--- a/drivers/i2c/busses/i2c-amd8111.c
+++ b/drivers/i2c/busses/i2c-amd8111.c
@@ -72,10 +72,10 @@ static unsigned int amd_ec_wait_write(struct amd_smbus *smbus)
 {
 	int timeout = 500;
 
-	while (timeout-- && (inb(smbus->base + AMD_EC_SC) & AMD_EC_SC_IBF))
+	while ((inb(smbus->base + AMD_EC_SC) & AMD_EC_SC_IBF) && --timeout)
 		udelay(1);
 
-	if (!timeout) {
+	if (timeout <= 0) {
 		dev_warn(&smbus->dev->dev,
 			 "Timeout while waiting for IBF to clear\n");
 		return -ETIMEDOUT;
@@ -88,10 +88,10 @@ static unsigned int amd_ec_wait_read(struct amd_smbus *smbus)
 {
 	int timeout = 500;
 
-	while (timeout-- && (~inb(smbus->base + AMD_EC_SC) & AMD_EC_SC_OBF))
+	while ((~inb(smbus->base + AMD_EC_SC) & AMD_EC_SC_OBF) && --timeout)
 		udelay(1);
 
-	if (!timeout) {
+	if (timeout <= 0) {
 		dev_warn(&smbus->dev->dev,
 			 "Timeout while waiting for OBF to set\n");
 		return -ETIMEDOUT;
diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c
index 6af6814..04751fa 100644
--- a/drivers/i2c/busses/i2c-pxa.c
+++ b/drivers/i2c/busses/i2c-pxa.c
@@ -644,7 +644,7 @@ static int i2c_pxa_do_pio_xfer(struct pxa_i2c *i2c,
 
 	i2c_pxa_start_message(i2c);
 
-	while (timeout-- && i2c->msg_num > 0) {
+	while (i2c->msg_num > 0 && --timeout) {
 		i2c_pxa_handler(0, i2c);
 		udelay(10);
 	}
@@ -657,7 +657,7 @@ static int i2c_pxa_do_pio_xfer(struct pxa_i2c *i2c,
 	ret = i2c->msg_idx;
 
 out:
-	if (timeout == 0)
+	if (timeout <= 0)
 		i2c_pxa_scream_blue_murder(i2c, "timeout");
 
 	return ret;

  parent reply	other threads:[~2009-02-02 21:50 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-31 10:22 [PATCH] i2c: timeouts reach -1 Roel Kluin
     [not found] ` <49842682.2020903-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2009-01-31 21:10   ` Jean Delvare
     [not found]     ` <20090131221043.23d3ecab-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2009-02-01 12:18       ` Jean Delvare
     [not found]         ` <20090201131854.64f54b28-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2009-02-02 21:50           ` Roel Kluin [this message]
     [not found]             ` <49876AB7.5030100-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2009-02-03 19:08               ` Jean Delvare

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=49876AB7.5030100@gmail.com \
    --to=roel.kluin-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
    --cc=ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org \
    --cc=eric.miao-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org \
    --cc=khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org \
    --cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=mike-UTxiZqZC01RS1MOuV/RT9w@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.