Commit 1b2425e3 authored by Matthew Wilcox's avatar Matthew Wilcox Committed by Kyle McMartin

[PARISC] Make local cache flushes take a void *

Make flush_data_cache_local, flush_instruction_cache_local and
flush_tlb_all_local take a void * so they don't have to be cast
when using on_each_cpu().  This becomes a problem when on_each_cpu
is a macro (as it is in current -mm).

Also move the prototype of flush_tlb_all_local into tlbflush.h and
remove its declaration from .c files.
Signed-off-by: default avatarMatthew Wilcox <willy@parisc-linux.org>
Signed-off-by: default avatarKyle McMartin <kyle@parisc-linux.org>
parent 8039de10
...@@ -54,20 +54,20 @@ static struct pdc_btlb_info btlb_info __read_mostly; ...@@ -54,20 +54,20 @@ static struct pdc_btlb_info btlb_info __read_mostly;
void void
flush_data_cache(void) flush_data_cache(void)
{ {
on_each_cpu((void (*)(void *))flush_data_cache_local, NULL, 1, 1); on_each_cpu(flush_data_cache_local, NULL, 1, 1);
} }
void void
flush_instruction_cache(void) flush_instruction_cache(void)
{ {
on_each_cpu((void (*)(void *))flush_instruction_cache_local, NULL, 1, 1); on_each_cpu(flush_instruction_cache_local, NULL, 1, 1);
} }
#endif #endif
void void
flush_cache_all_local(void) flush_cache_all_local(void)
{ {
flush_instruction_cache_local(); flush_instruction_cache_local(NULL);
flush_data_cache_local(); flush_data_cache_local(NULL);
} }
EXPORT_SYMBOL(flush_cache_all_local); EXPORT_SYMBOL(flush_cache_all_local);
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
#include <asm/atomic.h> #include <asm/atomic.h>
#include <asm/current.h> #include <asm/current.h>
#include <asm/delay.h> #include <asm/delay.h>
#include <asm/pgalloc.h> /* for flush_tlb_all() proto/macro */ #include <asm/tlbflush.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> /* for CPU_IRQ_REGION and friends */ #include <asm/irq.h> /* for CPU_IRQ_REGION and friends */
...@@ -406,12 +406,10 @@ EXPORT_SYMBOL(smp_call_function); ...@@ -406,12 +406,10 @@ EXPORT_SYMBOL(smp_call_function);
* as we want to ensure all TLB's flushed before proceeding. * as we want to ensure all TLB's flushed before proceeding.
*/ */
extern void flush_tlb_all_local(void);
void void
smp_flush_tlb_all(void) smp_flush_tlb_all(void)
{ {
on_each_cpu((void (*)(void *))flush_tlb_all_local, NULL, 1, 1); on_each_cpu(flush_tlb_all_local, NULL, 1, 1);
} }
...@@ -487,7 +485,7 @@ void __init smp_callin(void) ...@@ -487,7 +485,7 @@ void __init smp_callin(void)
#endif #endif
flush_cache_all_local(); /* start with known state */ flush_cache_all_local(); /* start with known state */
flush_tlb_all_local(); flush_tlb_all_local(NULL);
local_irq_enable(); /* Interrupts have been off until now */ local_irq_enable(); /* Interrupts have been off until now */
......
...@@ -998,7 +998,7 @@ void flush_tlb_all(void) ...@@ -998,7 +998,7 @@ void flush_tlb_all(void)
void flush_tlb_all(void) void flush_tlb_all(void)
{ {
spin_lock(&sid_lock); spin_lock(&sid_lock);
flush_tlb_all_local(); flush_tlb_all_local(NULL);
recycle_sids(); recycle_sids();
spin_unlock(&sid_lock); spin_unlock(&sid_lock);
} }
......
...@@ -29,14 +29,14 @@ ...@@ -29,14 +29,14 @@
#define SMP_CACHE_BYTES L1_CACHE_BYTES #define SMP_CACHE_BYTES L1_CACHE_BYTES
extern void flush_data_cache_local(void); /* flushes local data-cache only */ extern void flush_data_cache_local(void *); /* flushes local data-cache only */
extern void flush_instruction_cache_local(void); /* flushes local code-cache only */ extern void flush_instruction_cache_local(void *); /* flushes local code-cache only */
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
extern void flush_data_cache(void); /* flushes data-cache only (all processors) */ extern void flush_data_cache(void); /* flushes data-cache only (all processors) */
extern void flush_instruction_cache(void); /* flushes i-cache only (all processors) */ extern void flush_instruction_cache(void); /* flushes i-cache only (all processors) */
#else #else
#define flush_data_cache flush_data_cache_local #define flush_data_cache() flush_data_cache_local(NULL)
#define flush_instruction_cache flush_instruction_cache_local #define flush_instruction_cache() flush_instruction_cache_local(NULL)
#endif #endif
extern void parisc_cache_init(void); /* initializes cache-flushing */ extern void parisc_cache_init(void); /* initializes cache-flushing */
......
...@@ -22,6 +22,7 @@ extern spinlock_t pa_tlb_lock; ...@@ -22,6 +22,7 @@ extern spinlock_t pa_tlb_lock;
#define purge_tlb_end(x) spin_unlock(&pa_tlb_lock) #define purge_tlb_end(x) spin_unlock(&pa_tlb_lock)
extern void flush_tlb_all(void); extern void flush_tlb_all(void);
extern void flush_tlb_all_local(void *);
/* /*
* flush_tlb_mm() * flush_tlb_mm()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment