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,
ebrower-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
Subject: [PATCH 2/2 v2] i2c,algo: handle timeout correctly
Date: Fri, 06 Feb 2009 14:11:46 +0100 [thread overview]
Message-ID: <498C3712.2000904@gmail.com> (raw)
In-Reply-To: <4989BD34.9050406-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Let's first adress the other issues at hand.
This patch should be applied on top of my previous cleanup patch
--------------------------->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.
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/algos/i2c-algo-pcf.c b/drivers/i2c/algos/i2c-algo-pcf.c
index ce916d7..2862f11 100644
--- a/drivers/i2c/algos/i2c-algo-pcf.c
+++ b/drivers/i2c/algos/i2c-algo-pcf.c
@@ -115,15 +115,17 @@ static int wait_for_bb(struct i2c_algo_pcf_data *adap)
status = get_pcf(adap, 1);
- while (timeout-- && !(status & I2C_PCF_BB)) {
+ while (!(status & I2C_PCF_BB) && --timeout) {
udelay(100); /* wait for 100 us */
status = get_pcf(adap, 1);
}
- if (timeout <= 0)
+ if (timeout == 0) {
printk(KERN_ERR "Timeout waiting for Bus Busy\n");
+ return -ETIMEDOUT;
+ }
- return timeout <= 0;
+ return 0;
}
static int wait_for_pin(struct i2c_algo_pcf_data *adap, int *status)
@@ -133,7 +135,7 @@ static int wait_for_pin(struct i2c_algo_pcf_data *adap, int *status)
*status = get_pcf(adap, 1);
- while (timeout-- && (*status & I2C_PCF_PIN)) {
+ while ((*status & I2C_PCF_PIN) && --timeout) {
adap->waitforpin(adap->data);
*status = get_pcf(adap, 1);
}
@@ -142,10 +144,10 @@ static int wait_for_pin(struct i2c_algo_pcf_data *adap, int *status)
return -EINTR;
}
- if (timeout <= 0)
- return -1;
- else
- return 0;
+ if (timeout == 0)
+ return -ETIMEDOUT;
+
+ return 0;
}
/*
next prev parent reply other threads:[~2009-02-06 13:11 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-31 15:04 [PATCH] i2c,algo: timeout reaches -1 Roel Kluin
[not found] ` <4984688B.2090805-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2009-02-01 10:41 ` Jean Delvare
[not found] ` <20090201114121.6448a3c9-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2009-02-02 21:09 ` Roel Kluin
[not found] ` <498760F7.6020005-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2009-02-02 21:53 ` Jean Delvare
[not found] ` <20090202225309.359e77d6-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2009-02-03 12:31 ` [PATCH 1/2] i2c,algo: cleanup i2c-algo-pcf.c Roel Kluin
[not found] ` <49883938.9010104-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2009-02-04 8:34 ` Jean Delvare
[not found] ` <20090204093402.08ddb2e8-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2009-02-04 16:07 ` [PATCH 1/2 v2] " Roel Kluin
[not found] ` <4989BD34.9050406-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2009-02-05 16:11 ` Jean Delvare
2009-02-06 13:11 ` Roel Kluin [this message]
[not found] ` <498C3712.2000904-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2009-02-06 20:51 ` [PATCH 2/2 v2] i2c,algo: handle timeout correctly Jean Delvare
[not found] ` <20090206215111.60c83bd0-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2009-02-07 0:33 ` Eric Brower
[not found] ` <25e057c00902040754k22e05c91i72f70f00619d547d@mail.gmail.com>
[not found] ` <25e057c00902040754k22e05c91i72f70f00619d547d-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-02-05 20:38 ` [PATCH 1/2] i2c,algo: cleanup i2c-algo-pcf.c Jean Delvare
[not found] ` <20090205213858.4948305e-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2009-02-06 2:56 ` Eric Brower
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=498C3712.2000904@gmail.com \
--to=roel.kluin-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org \
--cc=ebrower-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@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.