public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC 1/1] Char: isicom, remove tty_{hang,wake}up bottomhalves
@ 2006-12-14  0:35 Jiri Slaby
  2006-12-14 10:34 ` Alan
  0 siblings, 1 reply; 2+ messages in thread
From: Jiri Slaby @ 2006-12-14  0:35 UTC (permalink / raw)
  Cc: linux-kernel, Alan

isicom, remove tty_{hang,wake}up bottomhalves

- tty_hangup() itself schedules work, so there is no need to schedule hangup
  in the driver
- tty_wakeup() its safe to call it while in atomic (IS THIS CORRECT?), so that
  its schedule_work might be also wiped out

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>

---
commit b62174aca5765ae3276ca6e6818851ec891549de
tree 4817d10d4653c336e8fb4a10d4f3465c18ad4aa1
parent e390aa02b0dc66a2b3531f779b94441b14c68c39
author Jiri Slaby <jirislaby@gmail.com> Thu, 14 Dec 2006 01:30:50 +0100
committer Jiri Slaby <jirislaby@gmail.com> Thu, 14 Dec 2006 01:30:50 +0100

 drivers/char/isicom.c |   36 +++---------------------------------
 1 files changed, 3 insertions(+), 33 deletions(-)

diff --git a/drivers/char/isicom.c b/drivers/char/isicom.c
index 41fb8bd..836e967 100644
--- a/drivers/char/isicom.c
+++ b/drivers/char/isicom.c
@@ -213,8 +213,6 @@ struct	isi_port {
 	struct tty_struct 	* tty;
 	wait_queue_head_t	close_wait;
 	wait_queue_head_t	open_wait;
-	struct work_struct	hangup_tq;
-	struct work_struct	bh_tqueue;
 	unsigned char		* xmit_buf;
 	int			xmit_head;
 	int			xmit_tail;
@@ -509,7 +507,7 @@ static void isicom_tx(unsigned long _data)
 		if (port->xmit_cnt <= 0)
 			port->status &= ~ISI_TXOK;
 		if (port->xmit_cnt <= WAKEUP_CHARS)
-			schedule_work(&port->bh_tqueue);
+			tty_wakeup(tty);
 		unlock_card(&isi_card[card]);
 	}
 
@@ -523,21 +521,6 @@ sched_again:
 	mod_timer(&tx, jiffies + msecs_to_jiffies(10));
 }
 
-/* 	Interrupt handlers 	*/
-
-
-static void isicom_bottomhalf(struct work_struct *work)
-{
-	struct isi_port *port = container_of(work, struct isi_port, bh_tqueue);
-	struct tty_struct *tty = port->tty;
-
-	if (!tty)
-		return;
-
-	tty_wakeup(tty);
-	wake_up_interruptible(&tty->write_wait);
-}
-
 /*
  *	Main interrupt handler routine
  */
@@ -609,7 +592,7 @@ static irqreturn_t isicom_interrupt(int irq, void *dev_id)
 						pr_dbg("interrupt: DCD->low.\n"
 							);
 						port->status &= ~ISI_DCD;
-						schedule_work(&port->hangup_tq);
+						tty_hangup(tty);
 					}
 				} else if (header & ISI_DCD) {
 				/* Carrier has been detected */
@@ -631,7 +614,7 @@ static irqreturn_t isicom_interrupt(int irq, void *dev_id)
 						/* start tx ing */
 						port->status |= (ISI_TXOK
 							| ISI_CTS);
-						schedule_work(&port->bh_tqueue);
+						tty_wakeup(tty);
 					}
 				} else if (!(header & ISI_CTS)) {
 					port->tty->hw_stopped = 1;
@@ -1457,17 +1440,6 @@ static void isicom_start(struct tty_struct *tty)
 	port->status |= ISI_TXOK;
 }
 
-/* hangup et all */
-static void do_isicom_hangup(struct work_struct *work)
-{
-	struct isi_port *port = container_of(work, struct isi_port, hangup_tq);
-	struct tty_struct *tty;
-
-	tty = port->tty;
-	if (tty)
-		tty_hangup(tty);
-}
-
 static void isicom_hangup(struct tty_struct *tty)
 {
 	struct isi_port *port = tty->driver_data;
@@ -1861,8 +1833,6 @@ static int __init isicom_init(void)
 			port->channel = channel;
 			port->close_delay = 50 * HZ/100;
 			port->closing_wait = 3000 * HZ/100;
-			INIT_WORK(&port->hangup_tq, do_isicom_hangup);
-			INIT_WORK(&port->bh_tqueue, isicom_bottomhalf);
 			port->status = 0;
 			init_waitqueue_head(&port->open_wait);
 			init_waitqueue_head(&port->close_wait);

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [RFC 1/1] Char: isicom, remove tty_{hang,wake}up bottomhalves
  2006-12-14  0:35 [RFC 1/1] Char: isicom, remove tty_{hang,wake}up bottomhalves Jiri Slaby
@ 2006-12-14 10:34 ` Alan
  0 siblings, 0 replies; 2+ messages in thread
From: Alan @ 2006-12-14 10:34 UTC (permalink / raw)
  To: Jiri Slaby; +Cc: linux-kernel

On Thu, 14 Dec 2006 01:35:17 +0100 (CET)
Jiri Slaby <jirislaby@gmail.com> wrote:

> isicom, remove tty_{hang,wake}up bottomhalves
> 
> - tty_hangup() itself schedules work, so there is no need to schedule hangup
>   in the driver
> - tty_wakeup() its safe to call it while in atomic (IS THIS CORRECT?), so that
>   its schedule_work might be also wiped out
> 
> Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
> 

Acked-by: Alan Cox <alan@redhat.com>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2006-12-14 10:26 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-12-14  0:35 [RFC 1/1] Char: isicom, remove tty_{hang,wake}up bottomhalves Jiri Slaby
2006-12-14 10:34 ` Alan

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