i2c: Timeouts reach -1
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 condition we are waiting for should also be tested before the timeout. With the current order, you could exit with a timeout error while the job is actually done. Signed-off-by: Roel Kluin <roel.kluin@gmail.com> Signed-off-by: Jean Delvare <khali@linux-fr.org>
This commit is contained in:
Родитель
f29d2e0275
Коммит
a746b578d8
|
@ -72,7 +72,7 @@ static unsigned int amd_ec_wait_write(struct amd_smbus *smbus)
|
||||||
{
|
{
|
||||||
int timeout = 500;
|
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);
|
udelay(1);
|
||||||
|
|
||||||
if (!timeout) {
|
if (!timeout) {
|
||||||
|
@ -88,7 +88,7 @@ static unsigned int amd_ec_wait_read(struct amd_smbus *smbus)
|
||||||
{
|
{
|
||||||
int timeout = 500;
|
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);
|
udelay(1);
|
||||||
|
|
||||||
if (!timeout) {
|
if (!timeout) {
|
||||||
|
|
|
@ -644,7 +644,7 @@ static int i2c_pxa_do_pio_xfer(struct pxa_i2c *i2c,
|
||||||
|
|
||||||
i2c_pxa_start_message(i2c);
|
i2c_pxa_start_message(i2c);
|
||||||
|
|
||||||
while (timeout-- && i2c->msg_num > 0) {
|
while (i2c->msg_num > 0 && --timeout) {
|
||||||
i2c_pxa_handler(0, i2c);
|
i2c_pxa_handler(0, i2c);
|
||||||
udelay(10);
|
udelay(10);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче