LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Leilei Zhao <leilei.zhao@atmel.com>
To: <nicolas.ferre@atmel.com>, <gregkh@linuxfoundation.org>,
	<linux-serial@vger.kernel.org>, <jslaby@suse.cz>
Cc: <linux-kernel@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>,
	Leilei Zhao <leilei.zhao@atmel.com>
Subject: [PATCH 5/5] tty/serial: at91: correct the usage of tasklet
Date: Thu, 26 Feb 2015 14:55:25 +0800	[thread overview]
Message-ID: <1424933725-16242-6-git-send-email-leilei.zhao@atmel.com> (raw)
In-Reply-To: <1424933725-16242-1-git-send-email-leilei.zhao@atmel.com>

The tasklet may be scheduled and executed after serial port
was shutdown, for example, DMA rx callback will schedule the
tasklet while serial port is shutting down, especially serial
port is sending and receiving data in a higher baud rate and
it's killed by external program. In this case, tasklet_kill
can only clear the current scheduling out, so tasklet should
be disabled to prevent being executed in later scheduling.
Otherwise, the tasklet executed after serial port was shutdown
can lead to kernel crash.

Signed-off-by: Leilei Zhao <leilei.zhao@atmel.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
---
 drivers/tty/serial/atmel_serial.c |    4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
index 8d28210..39ec278 100644
--- a/drivers/tty/serial/atmel_serial.c
+++ b/drivers/tty/serial/atmel_serial.c
@@ -1755,6 +1755,8 @@ static int atmel_startup(struct uart_port *port)
 	if (retval)
 		goto free_irq;
 
+	tasklet_enable(&atmel_port->tasklet);
+
 	/*
 	 * Initialize DMA (if necessary)
 	 */
@@ -1858,6 +1860,7 @@ static void atmel_shutdown(struct uart_port *port)
 	 * Clear out any scheduled tasklets before
 	 * we destroy the buffers
 	 */
+	tasklet_disable(&atmel_port->tasklet);
 	tasklet_kill(&atmel_port->tasklet);
 
 	/*
@@ -2251,6 +2254,7 @@ static int atmel_init_port(struct atmel_uart_port *atmel_port,
 
 	tasklet_init(&atmel_port->tasklet, atmel_tasklet_func,
 			(unsigned long)port);
+	tasklet_disable(&atmel_port->tasklet);
 
 	memset(&atmel_port->rx_ring, 0, sizeof(atmel_port->rx_ring));
 
-- 
1.7.9.5


      parent reply	other threads:[~2015-02-26  7:04 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-26  6:55 [PATCH 0/5] tty/serial: at91: fix bugs when using multiple serials Leilei Zhao
2015-02-26  6:55 ` [PATCH 1/5] tty/serial: at91: correct check of buf used in DMA Leilei Zhao
2015-02-26  9:29   ` Jiri Slaby
2015-02-27  7:38     ` Zhao, Leilei
2015-02-26  6:55 ` [PATCH 2/5] tty/serial: at91: correct buffer size " Leilei Zhao
2015-02-26  6:55 ` [PATCH 3/5] tty/serial: at91: revise the return type of atmel_init_property Leilei Zhao
2015-02-26  6:55 ` [PATCH 4/5] tty/serial: at91: set ops in property init each time Leilei Zhao
2015-02-26  6:55 ` Leilei Zhao [this message]

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=1424933725-16242-6-git-send-email-leilei.zhao@atmel.com \
    --to=leilei.zhao@atmel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jslaby@suse.cz \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=nicolas.ferre@atmel.com \
    --subject='Re: [PATCH 5/5] tty/serial: at91: correct the usage of tasklet' \
    /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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).