On Mon, 28 Apr 2008 11:20:40 -0700, Troy Kisky wrote:
> Jean Delvare wrote:
> > Hi Troy,
> > 
> > On Fri, 25 Apr 2008 09:58:13 -0700, Troy Kisky wrote:
> >> If wait_for_completion_interruptible_timeout exits due
> >> to a signal, the i2c bus was locking up.
> > 
> > What kind of signal (coming from where) are you talking about?
> 
> With the user space i2c interface, a ^c was
> locking the bus.

Ah, OK. I admit I've never tested this on any i2c bus driver.

> > If you don't want to be interrupted, why don't you simply use
> > wait_for_completion_timeout() instead of
> > wait_for_completion_interruptible_timeout()?
> 
> I didn't make that choice. Perhaps wait_for_completion_timeout()
> would be better. I just preferred fixing the lockup if a signal
> happened. It seemed like a safer change to me. Can 
> wait_for_completion_timeout()
> return for any reason other the successful completion or timeout?

I think not, but...

> Will an explicit kill of the process return?

I just don't know. I guess you'd have to try.

> Do you want it changed to use wait_for_completion_timeout()?

I'm suggesting this because it seems to be a much more simple way to
fix the problem. If that works for you, why do something more complex?

As a side note, I'm curious what happens if the call timeouts. Doesn't
the hardware lockup happen? From the hardware's perspective I can't see
any difference between the timeout case and the signal case.

> >> +static inline void terminate_read(struct davinci_i2c_dev *dev)
> >> +{
> >> +  if (dev->buf_len)
> >> +          dev->buf_len--;
> >> +  if (dev->buf_len) {
> > 
> > Please explain (in a comment) what you are doing here. Can't you just
> > test for (dev->buf_len > 1)?
> 
> Or maybe no test, just always set the nak bit and throw away the data??

You know the hardware, I don't, I just can't tell. My suggestion was
only based on logic.

> >> +          u16 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG);
> >> +          w |= DAVINCI_I2C_MDR_NACK;
> >> +          davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w);
> >> +  }

-- 
Jean Delvare

_______________________________________________
i2c mailing list
[email protected]
http://lists.lm-sensors.org/mailman/listinfo/i2c

Reply via email to