Johannes Stezenbach wrote: > This code looks strange (before and after your change). > Why isn't this a simple > > wait_event_interruptible_timeout(&btv->i2c_queue, btv->i2c_done, > msecs_to_jiffies(20)); Yes, that's definitely better. Here is the new patch that can be applied to kernel 2.6.12-rc3. -------------- next part -------------- --- bttv-i2c.c.orig 2005-04-23 18:24:07.000000000 +0200 +++ bttv-i2c.c 2005-04-23 18:41:15.000000000 +0200 @@ -130,19 +130,12 @@ static int bttv_i2c_wait_done(struct bttv *btv) { - DECLARE_WAITQUEUE(wait, current); int rc = 0; + int timeout = 0; - add_wait_queue(&btv->i2c_queue, &wait); - if (0 == btv->i2c_done) - msleep_interruptible(20); - remove_wait_queue(&btv->i2c_queue, &wait); - - if (0 == btv->i2c_done) - /* timeout */ - rc = -EIO; - if (btv->i2c_done & BT848_INT_RACK) - rc = 1; + timeout=wait_event_interruptible_timeout(btv->i2c_queue,btv->i2c_done,20); + if (timeout==-ERESTARTSYS) rc = -EIO; + if (btv->i2c_done & BT848_INT_RACK) rc = 1; btv->i2c_done = 0; return rc; }