[PATCH] 2.5: drivers/char/moxa.c

From: Thiago Rondon (thiago@nl.linux.org)
Date: Wed Jun 18 2003 - 12:15:23 EST


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;
-
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/



This archive was generated by hypermail 2b29 : Mon Jun 23 2003 - 22:00:25 EST