aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2014-08-16 12:48:05 -0400
committerFrederic Weisbecker <fweisbec@gmail.com>2014-09-13 12:46:13 -0400
commit3631073659d0aafeaa52227bb61a100efaf901dc (patch)
treec524a0c470c42151d674b501fe84247b67dc7ba3
parent09f6edd424218eb69078551b2ecfada1f2d098eb (diff)
arm64: Tell irq work about self IPI support
ARM64 irq work self-IPI support depends on __smp_cross_call to point to some relevant IRQ controller operations. This information should be available after the call to init_IRQ(). Lets implement arch_irq_work_has_interrupt() accordingly. Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Catalin Marinas <catalin.marinas@arm.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Will Deacon <will.deacon@arm.com> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
-rw-r--r--arch/arm64/include/asm/Kbuild1
-rw-r--r--arch/arm64/include/asm/irq_work.h11
-rw-r--r--arch/arm64/include/asm/smp.h2
-rw-r--r--arch/arm64/kernel/smp.c2
4 files changed, 14 insertions, 2 deletions
diff --git a/arch/arm64/include/asm/Kbuild b/arch/arm64/include/asm/Kbuild
index d617789b1ebd..c1968475cc4e 100644
--- a/arch/arm64/include/asm/Kbuild
+++ b/arch/arm64/include/asm/Kbuild
@@ -19,7 +19,6 @@ generic-y += ioctl.h
19generic-y += ioctls.h 19generic-y += ioctls.h
20generic-y += ipcbuf.h 20generic-y += ipcbuf.h
21generic-y += irq_regs.h 21generic-y += irq_regs.h
22generic-y += irq_work.h
23generic-y += kdebug.h 22generic-y += kdebug.h
24generic-y += kmap_types.h 23generic-y += kmap_types.h
25generic-y += kvm_para.h 24generic-y += kvm_para.h
diff --git a/arch/arm64/include/asm/irq_work.h b/arch/arm64/include/asm/irq_work.h
new file mode 100644
index 000000000000..8e24ef3f7c82
--- /dev/null
+++ b/arch/arm64/include/asm/irq_work.h
@@ -0,0 +1,11 @@
1#ifndef __ASM_IRQ_WORK_H
2#define __ASM_IRQ_WORK_H
3
4#include <asm/smp.h>
5
6static inline bool arch_irq_work_has_interrupt(void)
7{
8 return !!__smp_cross_call;
9}
10
11#endif /* __ASM_IRQ_WORK_H */
diff --git a/arch/arm64/include/asm/smp.h b/arch/arm64/include/asm/smp.h
index a498f2cd2c2a..780f82c827b6 100644
--- a/arch/arm64/include/asm/smp.h
+++ b/arch/arm64/include/asm/smp.h
@@ -48,6 +48,8 @@ extern void smp_init_cpus(void);
48 */ 48 */
49extern void set_smp_cross_call(void (*)(const struct cpumask *, unsigned int)); 49extern void set_smp_cross_call(void (*)(const struct cpumask *, unsigned int));
50 50
51extern void (*__smp_cross_call)(const struct cpumask *, unsigned int);
52
51/* 53/*
52 * Called from the secondary holding pen, this is the secondary CPU entry point. 54 * Called from the secondary holding pen, this is the secondary CPU entry point.
53 */ 55 */
diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
index 474339718105..b06d1d90ee8c 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -470,7 +470,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
470 } 470 }
471} 471}
472 472
473static void (*__smp_cross_call)(const struct cpumask *, unsigned int); 473void (*__smp_cross_call)(const struct cpumask *, unsigned int);
474 474
475void __init set_smp_cross_call(void (*fn)(const struct cpumask *, unsigned int)) 475void __init set_smp_cross_call(void (*fn)(const struct cpumask *, unsigned int))
476{ 476{