diff options
author | Frederic Weisbecker <fweisbec@gmail.com> | 2014-08-16 12:48:05 -0400 |
---|---|---|
committer | Frederic Weisbecker <fweisbec@gmail.com> | 2014-09-13 12:46:13 -0400 |
commit | 3631073659d0aafeaa52227bb61a100efaf901dc (patch) | |
tree | c524a0c470c42151d674b501fe84247b67dc7ba3 | |
parent | 09f6edd424218eb69078551b2ecfada1f2d098eb (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/Kbuild | 1 | ||||
-rw-r--r-- | arch/arm64/include/asm/irq_work.h | 11 | ||||
-rw-r--r-- | arch/arm64/include/asm/smp.h | 2 | ||||
-rw-r--r-- | arch/arm64/kernel/smp.c | 2 |
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 | |||
19 | generic-y += ioctls.h | 19 | generic-y += ioctls.h |
20 | generic-y += ipcbuf.h | 20 | generic-y += ipcbuf.h |
21 | generic-y += irq_regs.h | 21 | generic-y += irq_regs.h |
22 | generic-y += irq_work.h | ||
23 | generic-y += kdebug.h | 22 | generic-y += kdebug.h |
24 | generic-y += kmap_types.h | 23 | generic-y += kmap_types.h |
25 | generic-y += kvm_para.h | 24 | generic-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 | |||
6 | static 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 | */ |
49 | extern void set_smp_cross_call(void (*)(const struct cpumask *, unsigned int)); | 49 | extern void set_smp_cross_call(void (*)(const struct cpumask *, unsigned int)); |
50 | 50 | ||
51 | extern 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 | ||
473 | static void (*__smp_cross_call)(const struct cpumask *, unsigned int); | 473 | void (*__smp_cross_call)(const struct cpumask *, unsigned int); |
474 | 474 | ||
475 | void __init set_smp_cross_call(void (*fn)(const struct cpumask *, unsigned int)) | 475 | void __init set_smp_cross_call(void (*fn)(const struct cpumask *, unsigned int)) |
476 | { | 476 | { |