MN10300: fix serial port vdma irq setup for SMP
authorMark Salter <msalter@redhat.com>
Wed, 12 Dec 2012 15:36:38 +0000 (15:36 +0000)
committerDavid Howells <dhowells@redhat.com>
Wed, 12 Dec 2012 15:46:14 +0000 (15:46 +0000)
commit8d160027ff234bddea627ba54c2b85efa1884867
tree22e2447f07a3ddde623c11a22a59571853fff84a
parent7d361cb754720d69695a3efc973e9a1a51e46b21
MN10300: fix serial port vdma irq setup for SMP

The builtin SoC serial ports have no FIFOs and use a virtual DMA mechanism
based on high priority IRQs to avoid overruns. These high priority interrupts
are pinned to cpu#0 on SMP systems. This patch fixes a problem with SMP where
the set_intr_level() interface is used to set the priority for these IRQs. The
set_intr_level() function sets priority on the local cpu but on SMP systems,
this code may be run on some other cpu than the one handling the interrupts.
Instead of setting interrupt level explicitly, this patch uses a special
irq_chip for these interrupts so that the mask/unmask methods can set the
interrupt level implicitly.

Signed-off-by: Mark Salter <msalter@redhat.com>
Signed-off-by: David Howells <dhowells@redhat.com>
arch/mn10300/kernel/mn10300-serial.c