]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/2.6.36.4/rapidio-fix-hang-on-rapidio-doorbell-queue-full-condition.patch
5.1-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 2.6.36.4 / rapidio-fix-hang-on-rapidio-doorbell-queue-full-condition.patch
1 From 12a4dc43911785f51a596f771ae0701b18d436f1 Mon Sep 17 00:00:00 2001
2 From: Thomas Taranowski <tom@baringforge.com>
3 Date: Wed, 12 Jan 2011 17:00:44 -0800
4 Subject: rapidio: fix hang on RapidIO doorbell queue full condition
5
6 From: Thomas Taranowski <tom@baringforge.com>
7
8 commit 12a4dc43911785f51a596f771ae0701b18d436f1 upstream.
9
10 In fsl_rio_dbell_handler() the code currently simply acknowledges the QFI
11 queue full interrupt, but does nothing to resolve the queue full
12 condition. Instead, it jumps to the end of the isr. When a queue full
13 condition occurs, the isr is then re-entered immediately and continually,
14 forever.
15
16 The fix is to just fall through and read out current doorbell entries.
17
18 Signed-off-by: Thomas Taranowski <tom@baringforge.com>
19 Cc: Alexandre Bounine <alexandre.bounine@idt.com>
20 Cc: Kumar Gala <galak@kernel.crashing.org>
21 Cc: Matt Porter <mporter@kernel.crashing.org>
22 Cc: Li Yang <leoli@freescale.com>
23 Cc: Thomas Moll <thomas.moll@sysgo.com>
24 Cc: Micha Nelissen <micha@neli.hopto.org>
25 Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
26 Cc: Grant Likely <grant.likely@secretlab.ca>
27 Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
28 Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
29 Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
30
31 ---
32 arch/powerpc/sysdev/fsl_rio.c | 1 -
33 1 file changed, 1 deletion(-)
34
35 --- a/arch/powerpc/sysdev/fsl_rio.c
36 +++ b/arch/powerpc/sysdev/fsl_rio.c
37 @@ -954,7 +954,6 @@ fsl_rio_dbell_handler(int irq, void *dev
38 if (dsr & DOORBELL_DSR_QFI) {
39 pr_info("RIO: doorbell queue full\n");
40 out_be32(&priv->msg_regs->dsr, DOORBELL_DSR_QFI);
41 - goto out;
42 }
43
44 /* XXX Need to check/dispatch until queue empty */