sparc32, sun4d: Implemented SMP IPIs support for SUN4D machines
The sun4d does not seem to have a distingstion between soft and hard IRQs. When generating IPIs the generated IRQ looks like a hard IRQ, this patch adds a "IPI check" in the sun4d irq trap handler at a predefined IRQ number (SUN4D_IPI_IRQ). Before generating an IPI a per-cpu memory structure is modified for the "IPI check" to successfully detect a IPI request to a specific processor, the check clears the IPI work requested. All three IPIs (resched, single and cpu-mask) use the same IRQ number. The IPI IRQ should preferrably be on a separate IRQ and definitly not shared with IRQ handlers requesting IRQ with IRQF_SHARED. Signed-off-by: Daniel Hellstrom <daniel@gaisler.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
ecbc42b70a
commit
55dd23eca6
@@ -156,6 +156,15 @@ void sun4d_handler_irq(int pil, struct pt_regs *regs)
|
||||
|
||||
cc_set_iclr(1 << pil);
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
/*
|
||||
* Check IPI data structures after IRQ has been cleared. Hard and Soft
|
||||
* IRQ can happen at the same time, so both cases are always handled.
|
||||
*/
|
||||
if (pil == SUN4D_IPI_IRQ)
|
||||
sun4d_ipi_interrupt();
|
||||
#endif
|
||||
|
||||
old_regs = set_irq_regs(regs);
|
||||
irq_enter();
|
||||
if (sbusl == 0) {
|
||||
|
Reference in New Issue
Block a user