Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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: Jay Lubomirski <jaylubo@motorola.com>
Acked-by: Mark A. Greer <mgreer@mvista.com>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Jay Lubomirski and committed by
Linus Torvalds
2f4d4da8 ddc80bd7

+2 -1
+2 -1
drivers/serial/mpsc.c
··· 503 503 504 504 if (pi->mirror_regs) 505 505 pi->shared_regs->SDMA_INTR_CAUSE_m = 0; 506 - writel(0, pi->shared_regs->sdma_intr_base + SDMA_INTR_CAUSE); 506 + writeb(0x00, pi->shared_regs->sdma_intr_base + SDMA_INTR_CAUSE + 507 + pi->port.line); 507 508 return; 508 509 } 509 510