linux/arch/mips/kernel
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
..
8250-platform.c [MIPS] Put an end to <asm/serial.h>'s long and annyoing existence 2007-07-10 17:33:01 +01:00
asm-offsets.c [MIPS] Extract {PGD,PMD,PTE}_ORDER into asm-offset.h 2007-08-27 02:16:49 +01:00
binfmt_elfn32.c [PATCH] elf: Always define elf_addr_t in linux/elf.h 2006-12-07 08:39:38 -08:00
binfmt_elfo32.c [MIPS] checkfiles: Fix "need space after that ','" errors. 2007-10-11 23:46:15 +01:00
branch.c [MIPS] Add some __user tags 2007-07-13 17:40:01 +01:00
cevt-bcm1480.c [MIPS] Sibyte: Stop timers before programming next even. 2007-11-15 23:21:50 +00:00
cevt-gt641xx.c [MIPS] time: set clock before clockevent_delta2ns() in GT641xx. 2007-10-29 19:35:33 +00:00
cevt-r4k.c [MIPS] time: Replace plat_timer_setup with modern APIs. 2007-10-29 19:35:36 +00:00
cevt-sb1250.c [MIPS] Sibyte: Stop timers before programming next even. 2007-11-15 23:21:50 +00:00
cevt-txx9.c [MIPS] txx9tmr clockevent/clocksource driver 2007-10-29 19:35:35 +00:00
cpu-bugs64.c [MIPS] Fix "no space between function name and open parenthesis" warnings. 2007-10-11 23:46:15 +01:00
cpu-probe.c [MIPS] Fix shadow register support. 2007-11-15 23:21:49 +00:00
csrc-bcm1480.c [MIPS] Sibyte: Split and move clock code. 2007-11-02 16:13:47 +00:00
csrc-sb1250.c [MIPS] Sibyte: Fix name of clocksource. 2007-11-15 23:21:51 +00:00
early_printk.c [MIPS] early_printk: allow the early console to run earlier 2007-05-11 14:28:30 +01:00
entry.S [MIPS] SMTC: Interrupt mask backstop hack 2007-07-12 17:41:17 +01:00
gdb-low.S [MIPS] TRACE_IRQFLAGS_SUPPORT support. 2006-07-13 21:26:09 +01:00
gdb-stub.c [MIPS] Kill num_online_cpus() loops. 2007-10-11 23:46:18 +01:00
genex.S [MIPS] Fix typo in R3000 TRACE_IRQFLAGS code 2007-11-15 23:21:49 +00:00
head.S [MIPS] Always do the ARC64_TWIDDLE_PC thing. 2007-10-18 18:11:46 +01:00
i8253.c Use i8253.c lock for PC speaker on MIPS, too. 2007-11-02 19:39:18 -07:00
i8259.c [MIPS] checkfiles: Fix "need space after that ','" errors. 2007-10-11 23:46:15 +01:00
init_task.c [PATCH] nsproxy: move init_nsproxy into kernel/nsproxy.c 2006-10-02 07:57:20 -07:00
irix5sys.S Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
irixelf.c pid namespaces: round up the API 2007-10-19 11:53:37 -07:00
irixinv.c [MIPS] Fix "no space between function name and open parenthesis" warnings. 2007-10-11 23:46:15 +01:00
irixioctl.c [MIPS] Fix "no space between function name and open parenthesis" warnings. 2007-10-11 23:46:15 +01:00
irixsig.c mips: undo locking on error path returns 2007-11-14 18:45:42 -08:00
irq_cpu.c [MIPS] irq_cpu: use handle_percpu_irq handler to avoid dropping interrupts. 2007-11-15 23:21:52 +00:00
irq_txx9.c [MIPS] Remove dead code from irq_txx9.c 2007-08-27 02:16:54 +01:00
irq-gt641xx.c [MIPS] Add GT641xx IRQ routines. 2007-10-11 23:46:04 +01:00
irq-msc01.c [MIPS] Fix "no space between function name and open parenthesis" warnings. 2007-10-11 23:46:15 +01:00
irq-rm7000.c [MIPS] irq_cpu: use handle_percpu_irq handler to avoid dropping interrupts. 2007-11-15 23:21:52 +00:00
irq-rm9000.c [MIPS] irq_cpu: use handle_percpu_irq handler to avoid dropping interrupts. 2007-11-15 23:21:52 +00:00
irq.c [MIPS] checkfiles: Fix "need space after that ','" errors. 2007-10-11 23:46:15 +01:00
kspd.c [MIPS] checkfiles: Fix "need space after that ','" errors. 2007-10-11 23:46:15 +01:00
linux32.c remove include/asm-*/ipc.h 2007-10-17 08:42:55 -07:00
machine_kexec.c [MIPS] Unconditionally writeback and invalidate caches on kexec. 2007-08-27 02:16:59 +01:00
Makefile [MIPS] Sibyte: Split and move clock code. 2007-11-02 16:13:47 +00:00
mips_ksyms.c [MIPS] Export __copy_user_inatomic. 2007-03-07 00:07:17 +00:00
mips-mt-fpaff.c [MIPS] Fixup secure computing stuff. 2007-07-31 21:35:21 +01:00
mips-mt.c [MIPS] Fix "no space between function name and open parenthesis" warnings. 2007-10-11 23:46:15 +01:00
module.c Fix misspellings of "system", "controller", "interrupt" and "necessary". 2007-10-19 23:10:43 +02:00
pcspeaker.c [MIPS] Rename PC speaker code 2007-07-12 17:41:23 +01:00
proc.c [MIPS] Fix shadow register support. 2007-11-15 23:21:49 +00:00
process.c [MIPS] Fix "no space between function name and open parenthesis" warnings. 2007-10-11 23:46:15 +01:00
ptrace32.c [MIPS] Store sign-extend register values for PTRACE_GETREGS 2007-10-29 19:35:36 +00:00
ptrace.c [MIPS] Store sign-extend register values for PTRACE_GETREGS 2007-10-29 19:35:36 +00:00
r4k_fpu.S [MIPS] Check FCSR for pending interrupts, alternative version 2007-03-17 01:03:25 +00:00
r4k_switch.S [MIPS] Fix resume for 64K page size on R4000 class processors. 2007-07-12 17:41:05 +01:00
r2300_fpu.S kbuild: mips use generic asm-offsets.h support 2005-09-09 22:32:31 +02:00
r2300_switch.S [MIPS] Disallow CpU exception in kernel again. 2007-04-20 14:58:37 +01:00
r6000_fpu.S kbuild: mips use generic asm-offsets.h support 2005-09-09 22:32:31 +02:00
relocate_kernel.S [MIPS] Kexec: Fix several 64-bit bugs. 2007-07-31 21:35:36 +01:00
reset.c [MIPS] Export pm_power_off 2006-12-10 21:52:11 +00:00
rtlx.c [MIPS] rtlx: Fix build error. 2007-09-14 19:08:42 +01:00
scall32-o32.S [MIPS] Wire up the fallocate syscall. 2007-07-31 21:35:22 +01:00
scall64-64.S [MIPS] Wire up the fallocate syscall. 2007-07-31 21:35:22 +01:00
scall64-n32.S [MIPS] N32 needs to use compat_sys_futimesat 2007-09-14 19:08:42 +01:00
scall64-o32.S [MIPS] Fix fallocate on o32 binary compat ABI 2007-09-28 19:27:20 +01:00
semaphore.c Always use ".set mips3" rather than select between "mips2" or "mips3" 2005-10-29 19:31:31 +01:00
setup.c [MIPS] ARC: Get rid of mips_machgroup 2007-10-11 23:46:08 +01:00
signal32.c [MIPS] Fix "no space between function name and open parenthesis" warnings. 2007-10-11 23:46:15 +01:00
signal_n32.c [MIPS] Fix "no space between function name and open parenthesis" warnings. 2007-10-11 23:46:15 +01:00
signal-common.h [MIPS] Retry {save,restore}_fp_context if failed in atomic context. 2007-04-20 14:58:37 +01:00
signal.c [MIPS] checkfiles: Fix "need space after that ','" errors. 2007-10-11 23:46:15 +01:00
smp-mt.c [MIPS] Fix "no space between function name and open parenthesis" warnings. 2007-10-11 23:46:15 +01:00
smp.c [MIPS] SMP: Fix use of cpumasks. 2007-10-13 00:53:01 +01:00
smtc-asm.S [MIPS] SMTC: Don't set and restore irqregs ptr from self_ipi. 2007-06-11 18:20:53 +01:00
smtc-proc.c [MIPS] MT: Improved multithreading support. 2006-04-19 04:14:28 +02:00
smtc.c [MIPS] SMTC: Allow control over TC assignment to vpe0. 2007-10-29 19:35:32 +00:00
stacktrace.c simplify the stacktrace code 2007-05-08 11:14:58 -07:00
syscall.c [MIPS] Add len and addr validation for MAP_FIXED mappings. 2007-10-29 19:35:36 +00:00
sysirix.c pid namespaces: round up the API 2007-10-19 11:53:37 -07:00
time.c [MIPS] time: Code cleanups 2007-11-02 16:13:46 +00:00
topology.c [MIPS] Do topology_init even on uniprocessor kernels. 2006-11-29 16:21:34 +00:00
traps.c [MIPS] Fix shadow register support. 2007-11-15 23:21:49 +00:00
unaligned.c [MIPS] Fix "no space between function name and open parenthesis" warnings. 2007-10-11 23:46:15 +01:00
vmlinux.lds.S [MIPS] vmlinux.ld.S: correctly indent .data section 2007-10-29 19:35:37 +00:00
vpe.c [MIPS] vpe: handle halting TCs in an errata safe way. 2007-11-15 23:21:50 +00:00