diff options
-rw-r--r-- | arch/arm/kernel/smp_tlb.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/arch/arm/kernel/smp_tlb.c b/arch/arm/kernel/smp_tlb.c index e82e1d248772..9a52a07aa40e 100644 --- a/arch/arm/kernel/smp_tlb.c +++ b/arch/arm/kernel/smp_tlb.c | |||
@@ -98,21 +98,21 @@ static void broadcast_tlb_a15_erratum(void) | |||
98 | return; | 98 | return; |
99 | 99 | ||
100 | dummy_flush_tlb_a15_erratum(); | 100 | dummy_flush_tlb_a15_erratum(); |
101 | smp_call_function_many(cpu_online_mask, ipi_flush_tlb_a15_erratum, | 101 | smp_call_function(ipi_flush_tlb_a15_erratum, NULL, 1); |
102 | NULL, 1); | ||
103 | } | 102 | } |
104 | 103 | ||
105 | static void broadcast_tlb_mm_a15_erratum(struct mm_struct *mm) | 104 | static void broadcast_tlb_mm_a15_erratum(struct mm_struct *mm) |
106 | { | 105 | { |
107 | int cpu; | 106 | int cpu, this_cpu; |
108 | cpumask_t mask = { CPU_BITS_NONE }; | 107 | cpumask_t mask = { CPU_BITS_NONE }; |
109 | 108 | ||
110 | if (!erratum_a15_798181()) | 109 | if (!erratum_a15_798181()) |
111 | return; | 110 | return; |
112 | 111 | ||
113 | dummy_flush_tlb_a15_erratum(); | 112 | dummy_flush_tlb_a15_erratum(); |
113 | this_cpu = get_cpu(); | ||
114 | for_each_online_cpu(cpu) { | 114 | for_each_online_cpu(cpu) { |
115 | if (cpu == smp_processor_id()) | 115 | if (cpu == this_cpu) |
116 | continue; | 116 | continue; |
117 | /* | 117 | /* |
118 | * We only need to send an IPI if the other CPUs are running | 118 | * We only need to send an IPI if the other CPUs are running |
@@ -127,6 +127,7 @@ static void broadcast_tlb_mm_a15_erratum(struct mm_struct *mm) | |||
127 | cpumask_set_cpu(cpu, &mask); | 127 | cpumask_set_cpu(cpu, &mask); |
128 | } | 128 | } |
129 | smp_call_function_many(&mask, ipi_flush_tlb_a15_erratum, NULL, 1); | 129 | smp_call_function_many(&mask, ipi_flush_tlb_a15_erratum, NULL, 1); |
130 | put_cpu(); | ||
130 | } | 131 | } |
131 | 132 | ||
132 | void flush_tlb_all(void) | 133 | void flush_tlb_all(void) |