aboutsummaryrefslogtreecommitdiffstats
path: root/arch/parisc
diff options
context:
space:
mode:
authorHelge Deller <deller@gmx.de>2013-05-07 17:42:47 -0400
committerHelge Deller <deller@gmx.de>2013-05-07 17:44:04 -0400
commit0fc537d1d655cdae69b489dbba46ad617cfc1373 (patch)
treebc4d826346201de329257d010b74d258a1c35012 /arch/parisc
parentcd85d5514d5c4d7e78abac923fc032457d0c5091 (diff)
parisc: tlb flush counting fix for SMP and UP
Fix up build error on UP and show correctly number of function call (ipi) irqs. Signed-off-by: Helge Deller <deller@gmx.de>
Diffstat (limited to 'arch/parisc')
-rw-r--r--arch/parisc/include/asm/hardirq.h6
-rw-r--r--arch/parisc/include/asm/tlbflush.h2
-rw-r--r--arch/parisc/kernel/irq.c5
-rw-r--r--arch/parisc/kernel/smp.c11
4 files changed, 5 insertions, 19 deletions
diff --git a/arch/parisc/include/asm/hardirq.h b/arch/parisc/include/asm/hardirq.h
index a9c0fb195253..12373c4dabab 100644
--- a/arch/parisc/include/asm/hardirq.h
+++ b/arch/parisc/include/asm/hardirq.h
@@ -19,12 +19,8 @@ typedef struct {
19#ifdef CONFIG_SMP 19#ifdef CONFIG_SMP
20 unsigned int irq_resched_count; 20 unsigned int irq_resched_count;
21 unsigned int irq_call_count; 21 unsigned int irq_call_count;
22 /*
23 * irq_tlb_count is double-counted in irq_call_count, so it must be
24 * subtracted from irq_call_count when displaying irq_call_count
25 */
26 unsigned int irq_tlb_count;
27#endif 22#endif
23 unsigned int irq_tlb_count;
28} ____cacheline_aligned irq_cpustat_t; 24} ____cacheline_aligned irq_cpustat_t;
29 25
30DECLARE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat); 26DECLARE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat);
diff --git a/arch/parisc/include/asm/tlbflush.h b/arch/parisc/include/asm/tlbflush.h
index 8f1a8100bf2d..5273da991e06 100644
--- a/arch/parisc/include/asm/tlbflush.h
+++ b/arch/parisc/include/asm/tlbflush.h
@@ -22,6 +22,8 @@ extern spinlock_t pa_tlb_lock;
22extern void flush_tlb_all(void); 22extern void flush_tlb_all(void);
23extern void flush_tlb_all_local(void *); 23extern void flush_tlb_all_local(void *);
24 24
25#define smp_flush_tlb_all() flush_tlb_all()
26
25/* 27/*
26 * flush_tlb_mm() 28 * flush_tlb_mm()
27 * 29 *
diff --git a/arch/parisc/kernel/irq.c b/arch/parisc/kernel/irq.c
index a237e32ede19..e255db0bb761 100644
--- a/arch/parisc/kernel/irq.c
+++ b/arch/parisc/kernel/irq.c
@@ -175,14 +175,13 @@ int arch_show_interrupts(struct seq_file *p, int prec)
175 seq_printf(p, " Rescheduling interrupts\n"); 175 seq_printf(p, " Rescheduling interrupts\n");
176 seq_printf(p, "%*s: ", prec, "CAL"); 176 seq_printf(p, "%*s: ", prec, "CAL");
177 for_each_online_cpu(j) 177 for_each_online_cpu(j)
178 seq_printf(p, "%10u ", irq_stats(j)->irq_call_count - 178 seq_printf(p, "%10u ", irq_stats(j)->irq_call_count);
179 irq_stats(j)->irq_tlb_count);
180 seq_printf(p, " Function call interrupts\n"); 179 seq_printf(p, " Function call interrupts\n");
180#endif
181 seq_printf(p, "%*s: ", prec, "TLB"); 181 seq_printf(p, "%*s: ", prec, "TLB");
182 for_each_online_cpu(j) 182 for_each_online_cpu(j)
183 seq_printf(p, "%10u ", irq_stats(j)->irq_tlb_count); 183 seq_printf(p, "%10u ", irq_stats(j)->irq_tlb_count);
184 seq_printf(p, " TLB shootdowns\n"); 184 seq_printf(p, " TLB shootdowns\n");
185#endif
186 return 0; 185 return 0;
187} 186}
188 187
diff --git a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c
index 218e20bff9d2..e3614fb343e5 100644
--- a/arch/parisc/kernel/smp.c
+++ b/arch/parisc/kernel/smp.c
@@ -264,17 +264,6 @@ void arch_send_call_function_single_ipi(int cpu)
264} 264}
265 265
266/* 266/*
267 * Flush all other CPU's tlb and then mine. Do this with on_each_cpu()
268 * as we want to ensure all TLB's flushed before proceeding.
269 */
270
271void
272smp_flush_tlb_all(void)
273{
274 on_each_cpu(flush_tlb_all_local, NULL, 1);
275}
276
277/*
278 * Called by secondaries to update state and initialize CPU registers. 267 * Called by secondaries to update state and initialize CPU registers.
279 */ 268 */
280static void __init 269static void __init