public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org,
	"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Subject: [ 01/22] serial/mxs-auart: fix race condition in interrupt handler
Date: Thu,  8 Aug 2013 18:41:17 -0700	[thread overview]
Message-ID: <20130809013949.520874588@linuxfoundation.org> (raw)
In-Reply-To: <20130809013949.226228694@linuxfoundation.org>

3.0-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>

commit d970d7fe65adff5efe75b4a73c4ffc9be57089f7 upstream.

The handler needs to ack the pending events before actually handling them.
Otherwise a new event might come in after it it considered non-pending or
handled and is acked then without being handled. So this event is only
noticed when the next interrupt happens.

Without this patch an i.MX28 based machine running an rt-patched kernel
regularly hangs during boot.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/tty/serial/mxs-auart.c |   17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

--- a/drivers/tty/serial/mxs-auart.c
+++ b/drivers/tty/serial/mxs-auart.c
@@ -374,11 +374,18 @@ static void mxs_auart_settermios(struct
 
 static irqreturn_t mxs_auart_irq_handle(int irq, void *context)
 {
-	u32 istatus, istat;
+	u32 istat;
 	struct mxs_auart_port *s = context;
 	u32 stat = readl(s->port.membase + AUART_STAT);
 
-	istatus = istat = readl(s->port.membase + AUART_INTR);
+	istat = readl(s->port.membase + AUART_INTR);
+
+	/* ack irq */
+	writel(istat & (AUART_INTR_RTIS
+		| AUART_INTR_TXIS
+		| AUART_INTR_RXIS
+		| AUART_INTR_CTSMIS),
+			s->port.membase + AUART_INTR_CLR);
 
 	if (istat & AUART_INTR_CTSMIS) {
 		uart_handle_cts_change(&s->port, stat & AUART_STAT_CTS);
@@ -397,12 +404,6 @@ static irqreturn_t mxs_auart_irq_handle(
 		istat &= ~AUART_INTR_TXIS;
 	}
 
-	writel(istatus & (AUART_INTR_RTIS
-		| AUART_INTR_TXIS
-		| AUART_INTR_RXIS
-		| AUART_INTR_CTSMIS),
-			s->port.membase + AUART_INTR_CLR);
-
 	return IRQ_HANDLED;
 }
 



  reply	other threads:[~2013-08-09  1:41 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-09  1:41 [ 00/22] 3.0.90-stable review Greg Kroah-Hartman
2013-08-09  1:41 ` Greg Kroah-Hartman [this message]
2013-08-09  1:41 ` [ 02/22] serial/mxs-auart: increase time to wait for transmitter to become idle Greg Kroah-Hartman
2013-08-09  1:41 ` [ 03/22] ath9k_htc: do some initial hardware configuration Greg Kroah-Hartman
2013-08-09  1:41 ` [ 04/22] nl80211: fix mgmt tx status and testmode reporting for netns Greg Kroah-Hartman
2013-08-09  1:41 ` [ 05/22] mac80211: fix duplicate retransmission detection Greg Kroah-Hartman
2013-08-09  1:41 ` [ 06/22] rt2x00: fix stop queue Greg Kroah-Hartman
2013-08-09  1:41 ` [ 07/22] mwifiex: Add missing endian conversion Greg Kroah-Hartman
2013-08-09  1:41 ` [ 08/22] ACPI / battery: Fix parsing _BIX return value Greg Kroah-Hartman
2013-08-09  1:41 ` [ 09/22] sched: Fix the broken sched_rr_get_interval() Greg Kroah-Hartman
2013-08-09  1:41 ` [ 10/22] fanotify: info leak in copy_event_to_user() Greg Kroah-Hartman
2013-08-09  1:41 ` [ 11/22] MAINTAINERS: fix up stable_kernel_rules.txt location Greg Kroah-Hartman
2013-08-09  1:41 ` [ 12/22] perf: Fix event group context move Greg Kroah-Hartman
2013-08-09  1:41 ` [ 13/22] x86, fpu: correct the asm constraints for fxsave, unbreak mxcsr.daz Greg Kroah-Hartman
2013-08-09  1:41 ` [ 14/22] perf: Use css_tryget() to avoid propping up css refcount Greg Kroah-Hartman
2013-08-09  1:41 ` [ 15/22] arcnet: cleanup sizeof parameter Greg Kroah-Hartman
2013-08-09  1:41 ` [ 16/22] sysctl net: Keep tcp_syn_retries inside the boundary Greg Kroah-Hartman
2013-08-09  1:41 ` [ 17/22] sctp: fully initialize sctp_outq in sctp_outq_init Greg Kroah-Hartman
2013-08-09  1:41 ` [ 18/22] ipv6: take rtnl_lock and mark mrt6 table as freed on namespace cleanup Greg Kroah-Hartman
2013-08-09  1:41 ` [ 19/22] usbnet: do not pretend to support SG/TSO Greg Kroah-Hartman
2013-08-09  1:41 ` [ 20/22] net_sched: Fix stack info leak in cbq_dump_wrr() Greg Kroah-Hartman
2013-08-09  1:41 ` [ 21/22] af_key: more info leaks in pfkey messages Greg Kroah-Hartman
2013-08-09  1:41 ` [ 22/22] net_sched: info leak in atm_tc_dump_class() Greg Kroah-Hartman
2013-08-09  3:42 ` [ 00/22] 3.0.90-stable review Guenter Roeck
2013-08-09  3:56   ` Greg Kroah-Hartman
2013-08-10 22:08 ` Shuah Khan

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=20130809013949.520874588@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=u.kleine-koenig@pengutronix.de \
    /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