summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlan Cox <alan@lxorguk.ukuu.org.uk>2008-04-30 00:53:17 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2008-04-30 08:29:38 -0700
commit37925e050379ef4db9f4ed251786b6d43da6ec71 (patch)
tree774ec9963acd20249a876d6be265da46da0b95d9
parent7b130c0efd7acbdc3cf9b2e7cc9a26e923feec93 (diff)
downloadlinux-37925e050379ef4db9f4ed251786b6d43da6ec71.tar.gz
epca: lock_kernel push down
Prepare epca for removing the lock from above. Most of epca is internally
locked so we can trivially push it down to a few bits of code. Drop the TIOCG/SSOFTCAR handling as that is done *properly* with locks by the mid layer.

Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--drivers/char/epca.c17
1 files changed, 2 insertions, 15 deletions
diff --git a/drivers/char/epca.c b/drivers/char/epca.c
index ffd747c5dff0..9a682851283e 100644
--- a/drivers/char/epca.c
+++ b/drivers/char/epca.c
@@ -2206,21 +2206,6 @@ static int pc_ioctl(struct tty_struct *tty, struct file * file,
 		tty_wait_until_sent(tty, 0);
 		digi_send_break(ch, arg ? arg*(HZ/10) : HZ/4);
 		return 0;
-	case TIOCGSOFTCAR:
-		if (put_user(C_CLOCAL(tty)?1:0, (unsigned long __user *)arg))
-			return -EFAULT;
-		return 0;
-	case TIOCSSOFTCAR:
-		{
-			unsigned int value;
-
-			if (get_user(value, (unsigned __user *)argp))
-				return -EFAULT;
-			tty->termios->c_cflag =
-				((tty->termios->c_cflag & ~CLOCAL) |
-				 (value ? CLOCAL : 0));
-			return 0;
-		}
 	case TIOCMODG:
 		mflag = pc_tiocmget(tty, file);
 		if (put_user(mflag, (unsigned long __user *)argp))
@@ -2253,6 +2238,7 @@ static int pc_ioctl(struct tty_struct *tty, struct file * file,
 		break;
 	case DIGI_SETAW:
 	case DIGI_SETAF:
+		lock_kernel();
 		if (cmd == DIGI_SETAW) {
 			/* Setup an event to indicate when the transmit buffer empties */
 			spin_lock_irqsave(&epca_lock, flags);
@@ -2264,6 +2250,7 @@ static int pc_ioctl(struct tty_struct *tty, struct file * file,
 			if (tty->ldisc.flush_buffer)
 				tty->ldisc.flush_buffer(tty);
 		}
+		unlock_kernel();
 		/* Fall Thru */
 	case DIGI_SETA:
 		if (copy_from_user(&ch->digiext, argp, sizeof(digi_t)))