fa771d029a
The SMP version of arch_local_irq_enable() uses preempt_disable(), but <asm/irqflags.h> doesn't include <linux/preempt.h> causing the following errors on SMP when pstore/ftrace is enabled (caught by buildbot smp allyesconfig): In file included from include/linux/irqflags.h:15, from fs/pstore/ftrace.c:16: arch/metag/include/asm/irqflags.h: In function 'arch_local_irq_enable': arch/metag/include/asm/irqflags.h:84: error: implicit declaration of function 'preempt_disable' arch/metag/include/asm/irqflags.h:86: error: implicit declaration of function 'preempt_enable_no_resched' However <linux/preempt.h> cannot be easily included from <asm/irqflags.h> as it can cause circular include dependencies in the !SMP case, and potentially in the SMP case in the future. Therefore move the SMP implementation of arch_local_irq_enable() into traps.c and use an inline version of get_trigger_mask() which is also defined in traps.c for SMP. This adds an extra layer of function call / stack push when preempt_disable needs to call other functions, however in the non-preemptive SMP case it should be about as fast, as it was already calling the get_trigger_mask() function which is now used inline. Signed-off-by: James Hogan <james.hogan@imgtec.com> |
||
---|---|---|
.. | ||
perf | ||
.gitignore | ||
asm-offsets.c | ||
cachepart.c | ||
clock.c | ||
core_reg.c | ||
da.c | ||
devtree.c | ||
dma.c | ||
ftrace_stub.S | ||
ftrace.c | ||
head.S | ||
irq.c | ||
kick.c | ||
machines.c | ||
Makefile | ||
metag_ksyms.c | ||
module.c | ||
perf_callchain.c | ||
process.c | ||
ptrace.c | ||
setup.c | ||
signal.c | ||
smp.c | ||
stacktrace.c | ||
sys_metag.c | ||
tbiunexp.S | ||
tcm.c | ||
time.c | ||
topology.c | ||
traps.c | ||
user_gateway.S | ||
vmlinux.lds.S |