public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Alan Cox <alan@linux.intel.com>
To: greg@kroah.com, linux-kernel@vger.kernel.org
Subject: [PATCH 2/7] n_tty: fix throttling
Date: Wed, 18 Nov 2009 14:10:15 +0000	[thread overview]
Message-ID: <20091118141014.2798.52157.stgit@localhost.localdomain> (raw)
In-Reply-To: <20091118140935.2798.32517.stgit@localhost.localdomain>

n_tty inadevertently calls throttle and unthrottle methods during its init.
This happens before the tty device is open and causes problems for the
drivers, in particular they may not have their state and locks even
initialised at this point.

Signed-off-by: Alan Cox <alan@linux.intel.com>
---

 drivers/char/n_tty.c |   35 ++++++++++++++++++++++++++---------
 1 files changed, 26 insertions(+), 9 deletions(-)


diff --git a/drivers/char/n_tty.c b/drivers/char/n_tty.c
index 2e50f4d..b45170c 100644
--- a/drivers/char/n_tty.c
+++ b/drivers/char/n_tty.c
@@ -178,26 +178,23 @@ static void reset_buffer_flags(struct tty_struct *tty)
 	tty->canon_head = tty->canon_data = tty->erasing = 0;
 	memset(&tty->read_flags, 0, sizeof tty->read_flags);
 	n_tty_set_room(tty);
-	check_unthrottle(tty);
 }
 
 /**
- *	n_tty_flush_buffer	-	clean input queue
+ *	n_tty_do_flush		-	clean input queue
  *	@tty:	terminal device
  *
  *	Flush the input buffer. Called when the line discipline is
- *	being closed, when the tty layer wants the buffer flushed (eg
- *	at hangup) or when the N_TTY line discipline internally has to
- *	clean the pending queue (for example some signals).
+ *	being closed, or indirectly when the tty layer wants the buffer
+ *	flushed (eg at hangup) or when the N_TTY line discipline internally
+ *	has to clean the pending queue (for example some signals).
  *
  *	Locking: ctrl_lock, read_lock.
  */
 
-static void n_tty_flush_buffer(struct tty_struct *tty)
+static void n_tty_do_flush(struct tty_struct *tty)
 {
 	unsigned long flags;
-	/* clear everything and unthrottle the driver */
-	reset_buffer_flags(tty);
 
 	if (!tty->link)
 		return;
@@ -211,6 +208,25 @@ static void n_tty_flush_buffer(struct tty_struct *tty)
 }
 
 /**
+ *	n_tty_flush_buffer	-	clean input queue
+ *	@tty:	terminal device
+ *
+ *	Flush the input buffer. Called when the tty layer wants the buffer
+ *	flushed (eg at hangup) or when the N_TTY line discipline internally
+ *	has to clean the pending queue (for example some signals).
+ *
+ *	Locking: ctrl_lock, read_lock.
+ */
+
+static void n_tty_flush_buffer(struct tty_struct *tty)
+{
+	/* clear everything and unthrottle the driver */
+	reset_buffer_flags(tty);
+	check_unthrottle(tty);
+	n_tty_do_flush(tty);
+}
+
+/**
  *	n_tty_chars_in_buffer	-	report available bytes
  *	@tty: tty device
  *
@@ -1535,7 +1551,8 @@ static void n_tty_set_termios(struct tty_struct *tty, struct ktermios *old)
 
 static void n_tty_close(struct tty_struct *tty)
 {
-	n_tty_flush_buffer(tty);
+	reset_buffer_flags(tty);
+	n_tty_do_flush(tty);
 	if (tty->read_buf) {
 		kfree(tty->read_buf);
 		tty->read_buf = NULL;


  parent reply	other threads:[~2009-11-18 14:26 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-18 14:09 [PATCH 0/7] more beating of serial in the direction of sanity Alan Cox
2009-11-18 14:10 ` [PATCH 1/7] tty_port: Change the buffer allocator locking Alan Cox
2009-11-18 14:10 ` Alan Cox [this message]
2009-11-18 14:10 ` [PATCH 3/7] riscom8: switch to the tty_port_open API Alan Cox
2009-11-18 14:10 ` [PATCH 4/7] tty_port: Add IO_ERROR bit handling Alan Cox
2009-11-18 14:10 ` [PATCH 5/7] tty_port: Move the IO_ERROR clear Alan Cox
2009-11-18 14:10 ` [PATCH 6/7] stallion: Convert to the tty_port_open/close methods Alan Cox
2009-11-18 14:10 ` [PATCH 7/7] istallion: tty port open/close methods Alan Cox

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20091118141014.2798.52157.stgit@localhost.localdomain \
    --to=alan@linux.intel.com \
    --cc=greg@kroah.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox