Re: release() locking

Andrew Morton (akpm@zip.com.au)
Fri, 07 Dec 2001 15:32:38 -0800


"Udo A. Steinberg" wrote:
>
> "David C. Hansen" wrote:
> >
> > Andrew Morton wrote:
>
> > >Maybe so. Can you identify the exact kernel version at which
> > >the problem started?
>
> Yes. I tried the entire 2.5.1-pre series:
>
> -pre1 and -pre2 are fine.
> -pre3 doesn't compile out of the box and with 3 trivial compile fixes to
> pc_keyb.c shows the problem.
>

Hum. send_data() requires that local interrupts be enabled.

Does this fix it?

--- linux-2.5.1-pre6/drivers/char/pc_keyb.c Thu Dec 6 20:44:21 2001
+++ 25/drivers/char/pc_keyb.c Fri Dec 7 15:31:34 2001
@@ -1090,6 +1090,7 @@ static int open_aux(struct inode * inode
spin_unlock_irqrestore(&aux_count_lock, flags);
return -EBUSY;
}
+ spin_unlock_irqrestore(&aux_count_lock, flags);
kbd_write_command_w(KBD_CCMD_MOUSE_ENABLE); /* Enable the
auxiliary port on
controller. */
@@ -1099,7 +1100,6 @@ static int open_aux(struct inode * inode
mdelay(2); /* Ensure we follow the kbc access delay rules.. */

send_data(KBD_CMD_ENABLE); /* try to workaround toshiba4030cdt problem */
- spin_unlock_irqrestore(&aux_count_lock, flags);
return 0;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/