fix duart locking
PATCH 1/1 fix duart locking
Hi Ralf,
the duart code tries to hold a spin lock across a call to copy_from_user(). This patch releases the spin lock before the call and reacquires it afterwards.
peter
Signed-off-by Peter Buckingham <[email protected]>
? drivers/i2c/algos/.built-in.o.cmd
? drivers/i2c/algos/.i2c-algo-bit.o.cmd
? drivers/i2c/busses/.built-in.o.cmd
? drivers/i2c/chips/.built-in.o.cmd
? drivers/input/misc/.built-in.o.cmd
? drivers/input/misc/.pcspkr.o.cmd
? drivers/input/misc/.uinput.o.cmd
Index: drivers/char/sb1250_duart.c
===================================================================
RCS file: /home/cvs/linux/drivers/char/sb1250_duart.c,v retrieving revision 1.23
char/sb1250_duart.c +2 -1
@@ -326,10 +326,11 @@if (c <=0 )break ;if (from_user) { +spin_unlock_irqrestore (&us->outp_lock, flags);if (copy_from_user (us->outp_buf + us->outp_tail, buf, c)) { -spin_unlock_irqrestore (&us->outp_lock, flags);return -EFAULT ; } +spin_lock_irqsave (&us->outp_lock, flags); }else {memcpy (us->outp_buf + us->outp_tail, buf, c); }