aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiang Liu <jiang.liu@linux.intel.com>2015-01-23 00:36:42 -0500
committerCatalin Marinas <catalin.marinas@arm.com>2015-01-23 13:06:47 -0500
commit0aaf0dae81b586134faeb52e28b7ad567629dd68 (patch)
treeaf110bdf2ead94f7a9f9f921f1157fbdd056348f
parent2d888f48e056119495847a269a435d5c3d9df349 (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.h2
-rw-r--r--arch/arm64/kernel/smp.c10
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
25typedef struct { 25typedef 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;
65enum ipi_msg_type { 65enum 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
528void arch_send_call_function_single_ipi(int cpu) 526void 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);