kernel-fxtec-pro1x/arch/metag/kernel
James Hogan f6b30d32d2 metag: kick: add missing irq_enter/exit to kick_handler()
kick_handler() doesn't have an irq_enter/exit pair, but it's used for
handling SMP IPIs which require work to be done in softirqs, which are
invoked from irq_exit() when the hard irq nest count reaches 0.

The scheduler_ipi() callback in the IPI handler calls irq_enter/exit
itself, but this is inside kick_handler()'s spin lock critical section,
so if an invoked softirq issues an IPI the kick_handler() will be
re-entered on the same CPU and will deadlock.

This is easily fixed by adding the missing irq_enter/exit to
kick_handler() so that the hard irq nest count doesn't reach 0 until
after the spin lock has been released.

Ideally the spin lock protected handler list will also be replaced by a
lockless RCU protected list since it is certainly mostly read. That can
be done in a later change though.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
2013-07-02 14:12:08 +01:00
..
perf metag: perf: prepare for use by oprofile 2013-03-15 13:20:19 +00:00
.gitignore
asm-offsets.c
cachepart.c metag: panic if cache aliasing possible 2013-06-27 13:49:48 +01:00
clock.c metag: log core and timer frequencies from arch code 2013-06-13 12:55:27 +01:00
core_reg.c
da.c metag: export _metag_da_present and cpu_2_hwthread_id 2013-03-27 14:37:52 +00:00
devtree.c
dma.c
ftrace.c
ftrace_stub.S
head.S metag: smp: copy cache partition and enable GCOn 2013-03-15 13:21:17 +00:00
irq.c metag/kernel/irq.c: Declare root_domain as static 2013-06-13 12:55:27 +01:00
kick.c metag: kick: add missing irq_enter/exit to kick_handler() 2013-07-02 14:12:08 +01:00
machines.c
Makefile
metag_ksyms.c
module.c
perf_callchain.c
process.c dump_stack: unify debug information printed by show_regs() 2013-04-30 17:04:02 -07:00
ptrace.c metag: ptrace: Implement NT_METAG_TLS 2013-03-27 14:37:47 +00:00
setup.c metag/setup: Restrict scope for the capabilities variable 2013-06-13 12:55:29 +01:00
signal.c
smp.c metag: smp: don't spin waiting for CPU to start 2013-07-02 11:03:52 +01:00
stacktrace.c
sys_metag.c
tbiunexp.S
tcm.c
time.c metag: init common clk and use "core" clk 2013-06-13 12:54:41 +01:00
topology.c
traps.c metag/traps: include setup.h for the per_cpu_trap_init declaration 2013-06-13 12:55:30 +01:00
user_gateway.S
vmlinux.lds.S