提交 2f4d4da8 编写于 作者: J Jay Lubomirski 提交者: Linus Torvalds

serial: clear proper MPSC interrupt cause bits

The interrupt clearing code in mpsc_sdma_intr_ack() mistakenly clears the
interrupt for both controllers instead of just the one its supposed to.
This can result in the other controller appearing to hang because its
interrupt was effectively lost.

So, don't clear the interrupt cause bits for both MPSC controllers when
clearing the interrupt for one of them.  Just clear the one that is
supposed to be cleared.
Signed-off-by: NJay Lubomirski <jaylubo@motorola.com>
Acked-by: NMark A. Greer <mgreer@mvista.com>
Cc: <stable@kernel.org>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 ddc80bd7
...@@ -503,7 +503,8 @@ mpsc_sdma_intr_ack(struct mpsc_port_info *pi) ...@@ -503,7 +503,8 @@ mpsc_sdma_intr_ack(struct mpsc_port_info *pi)
if (pi->mirror_regs) if (pi->mirror_regs)
pi->shared_regs->SDMA_INTR_CAUSE_m = 0; pi->shared_regs->SDMA_INTR_CAUSE_m = 0;
writel(0, pi->shared_regs->sdma_intr_base + SDMA_INTR_CAUSE); writeb(0x00, pi->shared_regs->sdma_intr_base + SDMA_INTR_CAUSE +
pi->port.line);
return; return;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册