diff options
author | Paul Mundt <lethal@linux-sh.org> | 2009-08-21 04:23:14 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-08-21 04:23:14 -0400 |
commit | f26b2a562b46ab186c8383993ab1332673ac4a47 (patch) | |
tree | 5cf52089da5ca762c07cf6c1364a6aa411fb3038 /arch/sh/mm/cache-sh2a.c | |
parent | f9bd71f255b4349c4f9f596863161fd5182f67fa (diff) |
sh: Make cache flushers SMP-aware.
This does a bit of rework for making the cache flushers SMP-aware. The
function pointer-based flushers are renamed to local variants with the
exported interface being commonly implemented and wrapping as necessary.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/mm/cache-sh2a.c')
-rw-r--r-- | arch/sh/mm/cache-sh2a.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/sh/mm/cache-sh2a.c b/arch/sh/mm/cache-sh2a.c index 96a41872dfd3..975899d83564 100644 --- a/arch/sh/mm/cache-sh2a.c +++ b/arch/sh/mm/cache-sh2a.c | |||
@@ -97,13 +97,15 @@ static void sh2a__flush_invalidate_region(void *start, int size) | |||
97 | } | 97 | } |
98 | 98 | ||
99 | /* WBack O-Cache and flush I-Cache */ | 99 | /* WBack O-Cache and flush I-Cache */ |
100 | static void sh2a_flush_icache_range(unsigned long start, unsigned long end) | 100 | static void sh2a_flush_icache_range(void *args) |
101 | { | 101 | { |
102 | struct flusher_data *data = args; | ||
103 | unsigned long start, end; | ||
102 | unsigned long v; | 104 | unsigned long v; |
103 | unsigned long flags; | 105 | unsigned long flags; |
104 | 106 | ||
105 | start = start & ~(L1_CACHE_BYTES-1); | 107 | start = data->addr1 & ~(L1_CACHE_BYTES-1); |
106 | end = (end + L1_CACHE_BYTES-1) & ~(L1_CACHE_BYTES-1); | 108 | end = (data->addr2 + L1_CACHE_BYTES-1) & ~(L1_CACHE_BYTES-1); |
107 | 109 | ||
108 | local_irq_save(flags); | 110 | local_irq_save(flags); |
109 | jump_to_uncached(); | 111 | jump_to_uncached(); |
@@ -130,7 +132,7 @@ static void sh2a_flush_icache_range(unsigned long start, unsigned long end) | |||
130 | 132 | ||
131 | void __init sh2a_cache_init(void) | 133 | void __init sh2a_cache_init(void) |
132 | { | 134 | { |
133 | flush_icache_range = sh2a_flush_icache_range; | 135 | local_flush_icache_range = sh2a_flush_icache_range; |
134 | 136 | ||
135 | __flush_wback_region = sh2a__flush_wback_region; | 137 | __flush_wback_region = sh2a__flush_wback_region; |
136 | __flush_purge_region = sh2a__flush_purge_region; | 138 | __flush_purge_region = sh2a__flush_purge_region; |