Re: [patch 9/9]Four new i2c drivers and __init/__exit cleanup to i2c

Russell King
2002-09-15T23:21:26Z

On Sun, Sep 15, 2002 at 07:18:46PM -0400, Jeff Garzik wrote:
> Albert Cranford wrote:
> > --- linux/drivers/i2c/i2c-elektor.c.orig 2002-09-14 22:10:45.000000000 -0400
> > +++ linux-2.5.34/drivers/i2c/i2c-elektor.c 2002-09-15 01:18:55.000000000 -0400
> > @@ -125,12 +125,12 @@
> > int timeout = 2;
> >
> > if (irq > 0) {
> > - cli();
> > + local_irq_disable();
> > if (pcf_pending == 0) {
> > interruptible_sleep_on_timeout(&pcf_wait, timeout*HZ );
> > } else
> > pcf_pending = 0;
> > - sti();
> > + local_irq_enable();
> > } else {
> > udelay(100);
> > }
>
>
>
> this is _not_ the way to fix... use a proper spinlock

You can't hold a spinlock and sleep though, was one of my points back
in August. (Albert submitted a patch with all cli()/sti() converted
to spin_lock_irqsave()/spin_unlock_irqrestore().)

--
Russell King (rmk@arm.linux.org.uk) The developer of ARM Linux