diff options
author | Jiang Liu <jiang.liu@linux.intel.com> | 2015-01-23 00:36:42 -0500 |
---|---|---|
committer | Catalin Marinas <catalin.marinas@arm.com> | 2015-01-23 13:06:47 -0500 |
commit | 0aaf0dae81b586134faeb52e28b7ad567629dd68 (patch) | |
tree | af110bdf2ead94f7a9f9f921f1157fbdd056348f | |
parent | 2d888f48e056119495847a269a435d5c3d9df349 (diff) |
smp, ARM64: Kill SMP single function call interrupt
Commit 9a46ad6d6df3b54 "smp: make smp_call_function_many() use logic
similar to smp_call_function_single()" has unified the way to handle
single and multiple cross-CPU function calls. Now only one interrupt
is needed for architecture specific code to support generic SMP function
call interfaces, so kill the redundant single function call interrupt.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
-rw-r--r-- | arch/arm64/include/asm/hardirq.h | 2 | ||||
-rw-r--r-- | arch/arm64/kernel/smp.c | 10 |
2 files changed, 2 insertions, 10 deletions
diff --git a/arch/arm64/include/asm/hardirq.h b/arch/arm64/include/asm/hardirq.h index e8a3268a891c..6aae421f4d73 100644 --- a/arch/arm64/include/asm/hardirq.h +++ b/arch/arm64/include/asm/hardirq.h | |||
@@ -20,7 +20,7 @@ | |||
20 | #include <linux/threads.h> | 20 | #include <linux/threads.h> |
21 | #include <asm/irq.h> | 21 | #include <asm/irq.h> |
22 | 22 | ||
23 | #define NR_IPI 6 | 23 | #define NR_IPI 5 |
24 | 24 | ||
25 | typedef struct { | 25 | typedef struct { |
26 | unsigned int __softirq_pending; | 26 | unsigned int __softirq_pending; |
diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c index 7ae6ee085261..328b8ce4b007 100644 --- a/arch/arm64/kernel/smp.c +++ b/arch/arm64/kernel/smp.c | |||
@@ -65,7 +65,6 @@ struct secondary_data secondary_data; | |||
65 | enum ipi_msg_type { | 65 | enum ipi_msg_type { |
66 | IPI_RESCHEDULE, | 66 | IPI_RESCHEDULE, |
67 | IPI_CALL_FUNC, | 67 | IPI_CALL_FUNC, |
68 | IPI_CALL_FUNC_SINGLE, | ||
69 | IPI_CPU_STOP, | 68 | IPI_CPU_STOP, |
70 | IPI_TIMER, | 69 | IPI_TIMER, |
71 | IPI_IRQ_WORK, | 70 | IPI_IRQ_WORK, |
@@ -483,7 +482,6 @@ static const char *ipi_types[NR_IPI] __tracepoint_string = { | |||
483 | #define S(x,s) [x] = s | 482 | #define S(x,s) [x] = s |
484 | S(IPI_RESCHEDULE, "Rescheduling interrupts"), | 483 | S(IPI_RESCHEDULE, "Rescheduling interrupts"), |
485 | S(IPI_CALL_FUNC, "Function call interrupts"), | 484 | S(IPI_CALL_FUNC, "Function call interrupts"), |
486 | S(IPI_CALL_FUNC_SINGLE, "Single function call interrupts"), | ||
487 | S(IPI_CPU_STOP, "CPU stop interrupts"), | 485 | S(IPI_CPU_STOP, "CPU stop interrupts"), |
488 | S(IPI_TIMER, "Timer broadcast interrupts"), | 486 | S(IPI_TIMER, "Timer broadcast interrupts"), |
489 | S(IPI_IRQ_WORK, "IRQ work interrupts"), | 487 | S(IPI_IRQ_WORK, "IRQ work interrupts"), |
@@ -527,7 +525,7 @@ void arch_send_call_function_ipi_mask(const struct cpumask *mask) | |||
527 | 525 | ||
528 | void arch_send_call_function_single_ipi(int cpu) | 526 | void arch_send_call_function_single_ipi(int cpu) |
529 | { | 527 | { |
530 | smp_cross_call(cpumask_of(cpu), IPI_CALL_FUNC_SINGLE); | 528 | smp_cross_call(cpumask_of(cpu), IPI_CALL_FUNC); |
531 | } | 529 | } |
532 | 530 | ||
533 | #ifdef CONFIG_IRQ_WORK | 531 | #ifdef CONFIG_IRQ_WORK |
@@ -585,12 +583,6 @@ void handle_IPI(int ipinr, struct pt_regs *regs) | |||
585 | irq_exit(); | 583 | irq_exit(); |
586 | break; | 584 | break; |
587 | 585 | ||
588 | case IPI_CALL_FUNC_SINGLE: | ||
589 | irq_enter(); | ||
590 | generic_smp_call_function_single_interrupt(); | ||
591 | irq_exit(); | ||
592 | break; | ||
593 | |||
594 | case IPI_CPU_STOP: | 586 | case IPI_CPU_STOP: |
595 | irq_enter(); | 587 | irq_enter(); |
596 | ipi_cpu_stop(cpu); | 588 | ipi_cpu_stop(cpu); |