Google luky.org euqset.org

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 1/13] epca: remove cli()/sti() in drivers/char/epca.c


Signed-off-by: James Nelson <james4765@xxxxxxxxx>

diff -urN --exclude='*~' linux-2.6.11-rc1-mm1-original/drivers/char/epca.c linux-2.6.11-rc1-mm1/drivers/char/epca.c
--- linux-2.6.11-rc1-mm1-original/drivers/char/epca.c	2004-12-24 16:34:58.000000000 -0500
+++ linux-2.6.11-rc1-mm1/drivers/char/epca.c	2005-01-16 07:32:19.278559215 -0500
@@ -501,13 +501,11 @@
 	if ((ch = verifyChannel(tty)) != NULL) 
 	{ /* Begin if ch != NULL */
 
-		save_flags(flags);
-		cli();
+		local_irq_save(flags);
 
 		if (tty_hung_up_p(filp)) 
 		{
-			restore_flags(flags);
-			return;
+			goto out;
 		}
 
 		/* Check to see if the channel is open more than once */
@@ -519,8 +517,7 @@
 				the channel.
 			---------------------------------------------------------------- */
 
-			restore_flags(flags);
-			return;
+			goto out;
 		} /* End channel is open more than once */
 
 		/* Port open only once go ahead with shutdown & reset */
@@ -572,8 +569,8 @@
 		                      ASYNC_CLOSING);
 		wake_up_interruptible(&ch->close_wait);
 
-
-		restore_flags(flags);
+out:
+		local_irq_restore(flags);
 
 	} /* End if ch != NULL */
 
@@ -591,8 +588,7 @@
 	if (!(ch->asyncflags & ASYNC_INITIALIZED)) 
 		return;
 
-	save_flags(flags);
-	cli();
+	local_irq_save(flags);
 	globalwinon(ch);
 
 	bc = ch->brdchan;
@@ -628,7 +624,7 @@
 	/* Prevent future Digi programmed interrupts from coming active */
 
 	ch->asyncflags &= ~ASYNC_INITIALIZED;
-	restore_flags(flags);
+	local_irq_restore(flags);
 
 } /* End shutdown */
 
@@ -649,8 +645,7 @@
 
 		unsigned long flags;
 
-		save_flags(flags);
-		cli();
+		local_irq_save(flags);
 		if (tty->driver->flush_buffer)
 			tty->driver->flush_buffer(tty);
 		tty_ldisc_flush(tty);
@@ -659,7 +654,7 @@
 		ch->tty   = NULL;
 		ch->event = 0;
 		ch->count = 0;
-		restore_flags(flags);
+		local_irq_restore(flags);
 		ch->asyncflags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_INITIALIZED);
 		wake_up_interruptible(&ch->open_wait);
 
@@ -708,8 +703,7 @@
 	size = ch->txbufsize;
 
 	amountCopied = 0;
-	save_flags(flags);
-	cli();
+	local_irq_save(flags);
 
 	globalwinon(ch);
 
@@ -785,7 +779,7 @@
 		bc->ilow = 1;
 	}
 	memoff(ch);
-	restore_flags(flags);
+	local_irq_restore(flags);
 
 	return(amountCopied);
 
@@ -822,8 +816,7 @@
 
 	if ((ch = verifyChannel(tty)) != NULL) 
 	{
-		save_flags(flags);
-		cli();
+		local_irq_save(flags);
 		globalwinon(ch);
 
 		bc   = ch->brdchan;
@@ -844,7 +837,7 @@
 			bc->ilow = 1;
 		}
 		memoff(ch);
-		restore_flags(flags);
+		local_irq_restore(flags);
 	}
 
 	/* Return how much room is left on card */
@@ -873,8 +866,7 @@
 	if ((ch = verifyChannel(tty)) == NULL)
 		return(0);
 
-	save_flags(flags);
-	cli();
+	local_irq_save(flags);
 	globalwinon(ch);
 
 	bc = ch->brdchan;
@@ -915,7 +907,7 @@
 	} /* End if some space on the card has been used */
 
 	memoff(ch);
-	restore_flags(flags);
+	local_irq_restore(flags);
 
 	/* Return number of characters residing on card. */
 	return(chars);
@@ -941,8 +933,7 @@
 	if ((ch = verifyChannel(tty)) == NULL)
 		return;
 
-	save_flags(flags);
-	cli();
+	local_irq_save(flags);
 
 	globalwinon(ch);
 
@@ -954,7 +945,7 @@
 	fepcmd(ch, STOUT, (unsigned) tail, 0, 0, 0);
 
 	memoff(ch);
-	restore_flags(flags);
+	local_irq_restore(flags);
 
 	wake_up_interruptible(&tty->write_wait);
 	tty_wakeup(tty);
@@ -977,8 +968,7 @@
 	{
 		unsigned long flags;
 
-		save_flags(flags);
-		cli();
+		local_irq_save(flags);
 
 		/* ----------------------------------------------------------------
 			If not already set and the transmitter is busy setup an event
@@ -988,7 +978,7 @@
 		if ((ch->statusflags & TXBUSY) && !(ch->statusflags & EMPTYWAIT))
 			setup_empty_event(tty,ch);
 
-		restore_flags(flags);
+		local_irq_restore(flags);
 	}
 
 } /* End pc_flush_chars */
@@ -1047,15 +1037,13 @@
 	
 	retval = 0;
 	add_wait_queue(&ch->open_wait, &wait);
-	save_flags(flags);
-	cli();
-
+	local_irq_save(flags);
 
 	/* We dec count so that pc_close will know when to free things */
 	if (!tty_hung_up_p(filp))
 		ch->count--;
 
-	restore_flags(flags);
+	local_irq_restore(flags);
 
 	ch->blocked_open++;
 
@@ -1096,10 +1084,10 @@
 
 	current->state = TASK_RUNNING;
 	remove_wait_queue(&ch->open_wait, &wait);
-	cli();
+	local_irq_save(flags);
 	if (!tty_hung_up_p(filp))
 		ch->count++;
-	restore_flags(flags);
+	local_irq_restore(flags);
 
 	ch->blocked_open--;
 
@@ -1200,8 +1188,7 @@
 		the tty->termios struct otherwise let pc_close handle it.
 	-------------------------------------------------------------------- */
 
-	save_flags(flags);
-	cli();
+	local_irq_save(flags);
 
 	globalwinon(ch);
 	ch->statusflags = 0;
@@ -1228,7 +1215,7 @@
 	ch->asyncflags |= ASYNC_INITIALIZED;
 	memoff(ch);
 
-	restore_flags(flags);
+	local_irq_restore(flags);
 
 	retval = block_til_ready(tty, filp, ch);
 	if (retval)
@@ -1242,15 +1229,14 @@
 	--------------------------------------------------------------- */
 	ch->tty = tty;
 
-	save_flags(flags);
-	cli();
+	local_irq_save(flags);
 	globalwinon(ch);
 
 	/* Enable Digi Data events */
 	bc->idata = 1;
 
 	memoff(ch);
-	restore_flags(flags);
+	local_irq_restore(flags);
 
 	return 0;
 
@@ -1262,12 +1248,11 @@
 
 	unsigned long	flags;
 
-	save_flags(flags);
-	cli();
+	local_irq_save(flags);
 
 	pc_init();
 
-	restore_flags(flags);
+	local_irq_restore(flags);
 
 	return(0);
 }
@@ -1292,15 +1277,13 @@
 
 	del_timer_sync(&epca_timer);
 
-	save_flags(flags);
-	cli();
+	local_irq_save(flags);
 
 	if ((tty_unregister_driver(pc_driver)) ||  
 	    (tty_unregister_driver(pc_info)))
 	{
 		printk(KERN_WARNING "<Error> - DIGI : cleanup_module failed to un-register tty driver\n");
-		restore_flags(flags);
-		return;
+		goto out;
 	}
 	put_tty_driver(pc_driver);
 	put_tty_driver(pc_info);
@@ -1335,7 +1318,7 @@
 	pci_unregister_driver (&epca_driver);
 #endif
 
-	restore_flags(flags);
+out:	local_irq_restore(flags);
 
 }
 module_exit(epca_module_exit);
@@ -1499,8 +1482,7 @@
 	tty_set_operations(pc_info, &info_ops);
 
 
-	save_flags(flags);
-	cli();
+	local_irq_save(flags);
 
 	for (crd = 0; crd < num_cards; crd++) 
 	{ /* Begin for each card */
@@ -1635,7 +1617,7 @@
 	epca_timer.function = epcapoll;
 	mod_timer(&epca_timer, jiffies + HZ/25);
 
-	restore_flags(flags);
+	local_irq_restore(flags);
 
 	return 0;
 
@@ -1943,8 +1925,7 @@
 		buffer empty) and acts on those events.
 	----------------------------------------------------------------------- */
 	
-	save_flags(flags);
-	cli();
+	local_irq_save(flags);
 
 	for (crd = 0; crd < num_cards; crd++) 
 	{ /* Begin for each card */
@@ -1984,7 +1965,7 @@
 
 	mod_timer(&epca_timer, jiffies + (HZ / 25));
 
-	restore_flags(flags);
+	local_irq_restore(flags);
 } /* End epcapoll */
 
 /* --------------------- Begin doevent  ------------------------ */
@@ -2762,12 +2743,11 @@
 		return(-EINVAL);
 	}
 
-	save_flags(flags);
-	cli();
+	local_irq_save(flags);
 	globalwinon(ch);
 	mstat = bc->mstat;
 	memoff(ch);
-	restore_flags(flags);
+	local_irq_restore(flags);
 
 	if (mstat & ch->m_dtr)
 		mflag |= TIOCM_DTR;
@@ -2801,8 +2781,7 @@
 		return(-EINVAL);
 	}
 
-	save_flags(flags);
-	cli();
+	local_irq_save(flags);
 	/*
 	 * I think this modemfake stuff is broken.  It doesn't
 	 * correctly reflect the behaviour desired by the TIOCM*
@@ -2834,7 +2813,7 @@
 
 	epcaparam(tty,ch);
 	memoff(ch);
-	restore_flags(flags);
+	local_irq_restore(flags);
 	return 0;
 }
 
@@ -2859,8 +2838,6 @@
 		return(-EINVAL);
 	}
 
-	save_flags(flags);
-
 	/* -------------------------------------------------------------------
 		For POSIX compliance we need to add more ioctls.  See tty_ioctl.c
 		in /usr/src/linux/drivers/char for a good example.  In particular 
@@ -2936,20 +2913,20 @@
 
 		case TIOCSDTR:
 			ch->omodem |= ch->m_dtr;
-			cli();
+			local_irq_save(flags);
 			globalwinon(ch);
 			fepcmd(ch, SETMODEM, ch->m_dtr, 0, 10, 1);
 			memoff(ch);
-			restore_flags(flags);
+			local_irq_restore(flags);
 			break;
 
 		case TIOCCDTR:
 			ch->omodem &= ~ch->m_dtr;
-			cli();
+			local_irq_save(flags);
 			globalwinon(ch);
 			fepcmd(ch, SETMODEM, 0, ch->m_dtr, 10, 1);
 			memoff(ch);
-			restore_flags(flags);
+			local_irq_restore(flags);
 			break;
 
 		case DIGI_GETA:
@@ -2990,7 +2967,7 @@
 				ch->dsr = ch->m_dsr;
 			}
 		
-			cli();
+			local_irq_save(flags);
 			globalwinon(ch);
 
 			/* -----------------------------------------------------------------
@@ -3000,12 +2977,12 @@
 
 			epcaparam(tty,ch);
 			memoff(ch);
-			restore_flags(flags);
+			local_irq_restore(flags);
 			break;
 
 		case DIGI_GETFLOW:
 		case DIGI_GETAFLOW:
-			cli();	
+			local_irq_save(flags);	
 			globalwinon(ch);
 			if ((cmd) == (DIGI_GETFLOW)) 
 			{
@@ -3018,7 +2995,7 @@
 				dflow.stopc = bc->stopca;
 			}
 			memoff(ch);
-			restore_flags(flags);
+			local_irq_restore(flags);
 
 			if (copy_to_user(argp, &dflow, sizeof(dflow)))
 				return -EFAULT;
@@ -3042,7 +3019,7 @@
 
 			if (dflow.startc != startc || dflow.stopc != stopc) 
 			{ /* Begin  if setflow toggled */
-				cli();
+				local_irq_save(flags);
 				globalwinon(ch);
 
 				if ((cmd) == (DIGI_SETFLOW)) 
@@ -3062,7 +3039,7 @@
 					pc_start(tty);
 
 				memoff(ch);
-				restore_flags(flags);
+				local_irq_restore(flags);
 
 			} /* End if setflow toggled */
 			break;
@@ -3092,8 +3069,7 @@
 	if ((ch = verifyChannel(tty)) != NULL) 
 	{ /* Begin if channel valid */
 
-		save_flags(flags);
-		cli();
+		local_irq_save(flags);
 		globalwinon(ch);
 		epcaparam(tty, ch);
 		memoff(ch);
@@ -3106,7 +3082,7 @@
 			 (tty->termios->c_cflag & CLOCAL))
 			wake_up_interruptible(&ch->open_wait);
 
-		restore_flags(flags);
+		local_irq_restore(flags);
 
 	} /* End if channel valid */
 
@@ -3163,8 +3139,7 @@
 	if ((ch = verifyChannel(tty)) != NULL) 
 	{ /* Begin if valid channel */
 
-		save_flags(flags); 
-		cli();
+		local_irq_save(flags); 
 
 		if ((ch->statusflags & TXSTOPPED) == 0) 
 		{ /* Begin if transmit stop requested */
@@ -3180,7 +3155,7 @@
 
 		} /* End if transmit stop requested */
 
-		restore_flags(flags);
+		local_irq_restore(flags);
 
 	} /* End if valid channel */
 
@@ -3203,8 +3178,7 @@
 
 		unsigned long flags;
 
-		save_flags(flags);
-		cli();
+		local_irq_save(flags);
 
 		/* Just in case output was resumed because of a change in Digi-flow */
 		if (ch->statusflags & TXSTOPPED) 
@@ -3226,7 +3200,7 @@
 
 		} /* End transmit resume requested */
 
-		restore_flags(flags);
+		local_irq_restore(flags);
 
 	} /* End if channel valid */
 
@@ -3257,8 +3231,7 @@
 	{ /* Begin if channel valid */
 
 
-		save_flags(flags);
-		cli();
+		local_irq_save(flags);
 
 		if ((ch->statusflags & RXSTOPPED) == 0)
 		{
@@ -3268,7 +3241,7 @@
 			ch->statusflags |= RXSTOPPED;
 			memoff(ch);
 		}
-		restore_flags(flags);
+		local_irq_restore(flags);
 
 	} /* End if channel valid */
 
@@ -3294,8 +3267,7 @@
 
 
 		/* Just in case output was resumed because of a change in Digi-flow */
-		save_flags(flags);
-		cli();
+		local_irq_save(flags);
 
 		if (ch->statusflags & RXSTOPPED) 
 		{
@@ -3307,7 +3279,7 @@
 			ch->statusflags &= ~RXSTOPPED;
 			memoff(ch);
 		}
-		restore_flags(flags);
+		local_irq_restore(flags);
 
 	} /* End if channel valid */
 
@@ -3320,8 +3292,7 @@
 
 	unsigned long flags;
 
-	save_flags(flags);
-	cli();
+	local_irq_save(flags);
 	globalwinon(ch);
 
 	/* -------------------------------------------------------------------- 
@@ -3335,7 +3306,7 @@
 	fepcmd(ch, SENDBREAK, msec, 0, 10, 0);
 	memoff(ch);
 
-	restore_flags(flags);
+	local_irq_restore(flags);
 
 } /* End digi_send_break */
 
@@ -3347,8 +3318,7 @@
 	volatile struct board_chan *bc = ch->brdchan;
 	unsigned long int flags;
 
-	save_flags(flags);
-	cli();
+	local_irq_save(flags);
 	globalwinon(ch);
 	ch->statusflags |= EMPTYWAIT;
 	
@@ -3359,7 +3329,7 @@
 
 	bc->iempty = 1;
 	memoff(ch);
-	restore_flags(flags);
+	local_irq_restore(flags);
 
 } /* End setup_empty_event */
 
-
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/


$B$3$N>pJs$,$"$J$?$NC5$7$F$$?$b$N$+$I$&$+A*Br$7$F$/$@$5$!#(B
yes/$B$^$5$K$3$l$@!*(B   no/$B0c$&$J$!(B   part/$B0lIt8+$D$+$C$?(B   try/$B$3$l$G;n$7$F$_$k(B

$B$"$J$?$,C5$7$F$$?>pJs$O$I$N$h$&$J$3$H$+!"$4<+M3$K5-F~2<$5$!#FC$K!V$^$5$K$3$l$@!*!W$H8@$&>l9g$O5-F~$r$*4j$$7$^$9!#(B
$BNc(B:$B!VJ#?t$N%^%7%s$+$i(BCATV$B7PM3$G(Bipmasquerade$B$rMxMQ$7$F(BWeb$B$r;2>H$7$?$>l9g$N@_Dj$K$D$$F!W(B
References: