diff options
author | Frederic Weisbecker <fweisbec@gmail.com> | 2014-08-16 12:47:53 -0400 |
---|---|---|
committer | Frederic Weisbecker <fweisbec@gmail.com> | 2014-09-13 12:38:39 -0400 |
commit | 09f6edd424218eb69078551b2ecfada1f2d098eb (patch) | |
tree | cfad20f0a2093fd07d46ab8e666d9a4399bda5ee /arch | |
parent | 3010279f0fc36f0388872203e63ca49912f648fd (diff) |
arm: Tell irq work about self IPI support
ARM irq work IPI support depends on SMP support. That information is
partly known at early boottime. Lets implement
arch_irq_work_has_interrupt() accordingly.
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/include/asm/Kbuild | 1 | ||||
-rw-r--r-- | arch/arm/include/asm/irq_work.h | 11 | ||||
-rw-r--r-- | arch/arm/kernel/smp.c | 2 |
3 files changed, 12 insertions, 2 deletions
diff --git a/arch/arm/include/asm/Kbuild b/arch/arm/include/asm/Kbuild index 202905e7ea0c..70cd84eb7fda 100644 --- a/arch/arm/include/asm/Kbuild +++ b/arch/arm/include/asm/Kbuild | |||
@@ -11,7 +11,6 @@ generic-y += hash.h | |||
11 | generic-y += ioctl.h | 11 | generic-y += ioctl.h |
12 | generic-y += ipcbuf.h | 12 | generic-y += ipcbuf.h |
13 | generic-y += irq_regs.h | 13 | generic-y += irq_regs.h |
14 | generic-y += irq_work.h | ||
15 | generic-y += kdebug.h | 14 | generic-y += kdebug.h |
16 | generic-y += local.h | 15 | generic-y += local.h |
17 | generic-y += local64.h | 16 | generic-y += local64.h |
diff --git a/arch/arm/include/asm/irq_work.h b/arch/arm/include/asm/irq_work.h new file mode 100644 index 000000000000..712d03e5973a --- /dev/null +++ b/arch/arm/include/asm/irq_work.h | |||
@@ -0,0 +1,11 @@ | |||
1 | #ifndef __ASM_ARM_IRQ_WORK_H | ||
2 | #define __ASM_ARM_IRQ_WORK_H | ||
3 | |||
4 | #include <asm/smp_plat.h> | ||
5 | |||
6 | static inline bool arch_irq_work_has_interrupt(void) | ||
7 | { | ||
8 | return is_smp(); | ||
9 | } | ||
10 | |||
11 | #endif /* _ASM_ARM_IRQ_WORK_H */ | ||
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 9388a3d479e1..bbe22fcb78f6 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
@@ -503,7 +503,7 @@ void arch_send_call_function_single_ipi(int cpu) | |||
503 | #ifdef CONFIG_IRQ_WORK | 503 | #ifdef CONFIG_IRQ_WORK |
504 | void arch_irq_work_raise(void) | 504 | void arch_irq_work_raise(void) |
505 | { | 505 | { |
506 | if (is_smp()) | 506 | if (arch_irq_work_has_interrupt()) |
507 | smp_cross_call(cpumask_of(smp_processor_id()), IPI_IRQ_WORK); | 507 | smp_cross_call(cpumask_of(smp_processor_id()), IPI_IRQ_WORK); |
508 | } | 508 | } |
509 | #endif | 509 | #endif |