linux/arch
Ralf Baechle 30e748a507 [MIPS] irq_cpu: use handle_percpu_irq handler to avoid dropping interrupts.
This matters to any sort of device that is wired to one of the CPU
interrupt pins on an SMP system.  Typically the scenario is most easily
triggered with the count/compare timer interrupt where the same interrupt
number and thus irq_desc is used on each processor.

   CPU A			CPU B

   do_IRQ()
   generic_handle_irq()
   handle_level_irq()
   spin_lock(desc_lock)
   set IRQ_INPROGRESS
   spin_unlock(desc_lock)
				do_IRQ()
				generic_handle_irq()
				handle_level_irq()
				spin_lock(desc_lock)
				IRQ_INPROGRESS set => bail out
   spin_lock(desc_lock)
   clear IRQ_INPROGRESS
   spin_unlock(desc_lock)

In case of the cp0 compare interrupt this means the interrupt will be
acked and not handled or re-armed on CPU b, so there won't be any timer
interrupt until the count register wraps around.

With kernels 2.6.20 ... 2.6.23 we usually were lucky that things were just
working right on VSMP because the count registers are synchronized on
bootup so it takes something that disables interrupts for a long time on
one processor to trigger this one.

For scenarios where an interrupt is multicasted or broadcasted over several
CPUs the existing code was safe and the fix will break it.  There is no
way to know in the interrupt controller code because it is abstracted from
the platform code.  I think we do not have such a setup currently, so this
should be ok.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2007-11-15 23:21:52 +00:00
..
alpha alpha: sg_virt() fallout 2007-10-23 12:31:05 +02:00
arm Merge branch 'release' of git://lm-sensors.org/kernel/mhoffman/hwmon-2.6 2007-11-13 09:09:36 -08:00
avr32 [AVR32] ARRAY_SIZE() cleanup 2007-10-23 11:20:26 +02:00
blackfin Blackfin arch: reclaim a few bytes from the end of our init section 2007-10-30 12:00:02 +08:00
cris CRISv10 fasttimer: Scrap INLINE and name timeval_cmp better 2007-11-14 18:45:47 -08:00
frv FRV: Remove the section annotation on free_initmem() 2007-11-09 15:02:25 -08:00
h8300 Kbuild/doc: fix links to Documentation files 2007-10-30 14:26:30 -07:00
ia64 Add IORESOUCE_BUSY flag for System RAM 2007-11-14 18:45:39 -08:00
m32r spelling fixes: arch/m32r/ 2007-10-20 01:14:39 +02:00
m68k m68k: sg fallout 2007-10-24 08:55:40 +02:00
m68knommu m68knommu: mark mem init functions as __init 2007-10-23 20:45:44 -07:00
mips [MIPS] irq_cpu: use handle_percpu_irq handler to avoid dropping interrupts. 2007-11-15 23:21:52 +00:00
parisc parisc: fix sg_page() fallout 2007-10-23 09:49:31 +02:00
powerpc [POWERPC] Silence an annoying boot message 2007-11-13 16:23:47 +11:00
ppc [POWERPC] Avoid unpaired stwcx. on some processors 2007-11-13 16:22:43 +11:00
s390 sched: restore deterministic CPU accounting on powerpc 2007-11-09 22:39:38 +01:00
sh Merge branch 'page_colouring_despair' 2007-11-08 17:01:42 +09:00
sh64 sh64: Kill off duplicate includes. 2007-11-05 12:18:17 +09:00
sparc [SPARC]: Remove duplicate includes. 2007-11-06 21:23:11 -08:00
sparc64 [SPARC]: Remove duplicate includes. 2007-11-06 21:23:11 -08:00
um uml: fix build for !CONFIG_PRINTK 2007-11-14 18:45:43 -08:00
v850 spelling fixes: arch/v850/ 2007-10-20 01:24:05 +02:00
x86 Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/x86 2007-11-14 18:53:11 -08:00
xtensa Kbuild/doc: fix links to Documentation files 2007-10-30 14:26:30 -07:00