Re: [PATCH] use mutex instead of semaphore in RocketPort driver

From: Robert Hancock
Date: Tue Apr 24 2007 - 19:54:43 EST


Matthias Kaehlcke wrote:
El Tue, Apr 24, 2007 at 07:53:04PM +0200 Oliver Neukum ha dit:

Am Dienstag, 24. April 2007 19:49 schrieb Matthias Kaehlcke:
@@ -1706,7 +1706,7 @@ static int rp_write(struct tty_struct *tty,
if (count <= 0 || rocket_paranoia_check(info, "rp_write"))
return 0;
- down_interruptible(&info->write_sem);
+ mutex_lock_interruptible(&info->write_mtx);
This is a bug. It is also present in the current code, but nevertheless
it is a bug. If you use an interruptible lock, you must be ready to deal
with interrupts, which are ignored by this code.

i fear i don't have the experience/knowledge to fix this bug, thanks
for your remark.

i'm a bit confused now about the interruptible locks, i thought using
them means that the process will be waked up when receiving a
signal. what role are playing interrupts when using interruptible locks?

You are correct, interrupts aren't involved. However if the wait is interrupted by a signal, mutex_lock_interruptible will return a nonzero return code which needs to be checked for (and likely -ERESTARTSYS or -EINTR returned), otherwise the code will blindly continue as though it has locked the mutex even though it has not.

--
Robert Hancock Saskatoon, SK, Canada
To email, remove "nospam" from hancockr@xxxxxxxxxxxxx
Home Page: http://www.roberthancock.com/

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/