public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] 2.5: drivers/char/moxa.c
@ 2003-06-18 17:15 Thiago Rondon
  0 siblings, 0 replies; only message in thread
From: Thiago Rondon @ 2003-06-18 17:15 UTC (permalink / raw)
  To: linux-kernel

I fixed to compile, and remove cli() and sti().

--- drivers/char/moxa.c.orig	2003-06-17 15:02:31.000000000 -0300
+++ drivers/char/moxa.c	2003-06-17 15:32:00.000000000 -0300
@@ -27,6 +27,9 @@
  *      for             : LINUX
  *      date            : 1999/1/7
  *      version         : 5.1
+ *
+ *	2003, Thiago Rondon: cleanups, remove cli()/sti(), and use
+ *			     use spinlock_t. 
+ *			     add changelog.
  */
 
 #include <linux/config.h>
@@ -335,11 +338,12 @@
 	.hangup = moxa_hangup,
 };
 
+spinlock_t moxa_lock = SPIN_LOCK_UNLOCKED;
+
 int moxa_init(void)
 {
 	int i, n, numBoards;
 	struct moxa_str *ch;
-	int ret1, ret2;
 
 	printk(KERN_INFO "MOXA Intellio family driver version %s\n", MOXA_VERSION);
 	moxaDriver = alloc_tty_driver(MAX_PORTS + 1);
@@ -615,7 +619,7 @@
 	}
 	ch->asyncflags |= ASYNC_CLOSING;
 
-	ch->cflag = *tty->termios->c_cflag;
+	ch->cflag = tty->termios->c_cflag;
 	if (ch->asyncflags & ASYNC_INITIALIZED) {
 		setup_empty_event(tty);
 		tty_wait_until_sent(tty, 30 * HZ);	/* 30 seconds timeout */
@@ -654,7 +658,7 @@
 	if (ch == NULL)
 		return (0);
 	port = ch->port;
-	save_flags(flags);
+	local_save_flags(flags);
 	if (from_user) {
 		if (count > PAGE_SIZE)
 			count = PAGE_SIZE;
@@ -662,17 +666,17 @@
 		if (copy_from_user(moxaXmitBuff, buf, count)) {
 			len = -EFAULT;
 		} else {
-			cli();
+			spin_lock_irqsave(&moxa_lock, flags);
 			len = MoxaPortWriteData(port, moxaXmitBuff, count);
-			restore_flags(flags);
+			spin_unlock_irqrestore(&moxa_lock, flags);
 		}
 		up(&moxaBuffSem);
 		if (len < 0)
 			return len;
 	} else {
-		cli();
+		spin_lock_irqsave(&moxa_lock, flags);
 		len = MoxaPortWriteData(port, (unsigned char *) buf, count);
-		restore_flags(flags);
+		spin_unlock_irqrestore(&moxa_lock, flags);
 	}
 
 	/*********************************************
@@ -751,11 +755,11 @@
 	if (ch == NULL)
 		return;
 	port = ch->port;
-	save_flags(flags);
-	cli();
+	local_save_flags(flags);
+	spin_lock_irqsave(&moxa_lock, flags);
 	moxaXmitBuff[0] = c;
 	MoxaPortWriteData(port, moxaXmitBuff, 1);
-	restore_flags(flags);
+	spin_unlock_irqrestore(&moxa_lock, flags);
 	/************************************************
 	if ( !(ch->statusflags & LOWWAIT) && (MoxaPortTxFree(port) <= 100) )
 	*************************************************/
@@ -1057,11 +1061,11 @@
 	printk("block_til_ready before block: ttys%d, count = %d\n",
 	       ch->line, ch->count);
 #endif
-	save_flags(flags);
-	cli();
+	local_save_flags(flags);
+	spin_lock_irqsave(&moxa_lock, flags);
 	if (!tty_hung_up_p(filp))
 		ch->count--;
-	restore_flags(flags);
+	spin_unlock_irqrestore(&moxa_lock, flags);
 	ch->blocked_open++;
 	while (1) {
 		set_current_state(TASK_INTERRUPTIBLE);
@@ -1107,15 +1111,15 @@
 	struct moxa_str *ch = tty->driver_data;
 	unsigned long flags;
 
-	save_flags(flags);
-	cli();
+	local_save_flags(flags);
+	spin_lock_irqsave(&moxa_lock, flags);
 	ch->statusflags |= EMPTYWAIT;
 	moxaEmptyTimer_on[ch->port] = 0;
 	del_timer(&moxaEmptyTimer[ch->port]);
 	moxaEmptyTimer[ch->port].expires = jiffies + HZ;
 	moxaEmptyTimer_on[ch->port] = 1;
 	add_timer(&moxaEmptyTimer[ch->port]);
-	restore_flags(flags);
+	spin_unlock_irqrestore(&moxa_lock, flags);
 }
 
 static void check_xmit_empty(unsigned long data)
@@ -1186,10 +1190,10 @@
 	charptr = tp->flip.char_buf_ptr;
 	flagptr = tp->flip.flag_buf_ptr;
 	rc = tp->flip.count;
-	save_flags(flags);
-	cli();
+	local_save_flags(flags);
+	spin_lock_irqsave(&moxa_lock, flags);
 	count = MoxaPortReadData(ch->port, charptr, space);
-	restore_flags(flags);
+	spin_unlock_irqrestore(&moxa_lock, flags);
 	for (i = 0; i < count; i++)
 		*flagptr++ = 0;
 	charptr += count;

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-06-18 17:09 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-06-18 17:15 [PATCH] 2.5: drivers/char/moxa.c Thiago Rondon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox