From afa4c25ab06df4b7bf100b8f913624abe182d730 Mon Sep 17 00:00:00 2001 From: Paul Mundt Date: Wed, 27 Sep 2006 14:05:52 +0900 Subject: [PATCH] --- yaml --- r: 36239 b: refs/heads/master c: fdfc74f9fcebdda14609159d5010b758a9409acf h: refs/heads/master i: 36237: 170f1f804be0a43c1e011cc565150accb598b0b0 36235: 6d3965ffefd6ac96767d56c8249170fcb09051ef 36231: 0034d5d7d3c2ddbfb7395649a57c3e87ff5e3c4c 36223: d653080ab91fbf6d709672186ab539949c9e6274 v: v3 --- [refs] | 2 +- trunk/arch/sh/mm/cache-sh4.c | 5 +++++ trunk/include/asm-sh/system.h | 7 +++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 0ed813a29021..41a1e3a91bf4 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 36efc35447154317f9ffc5163a1793b5f7ff3de1 +refs/heads/master: fdfc74f9fcebdda14609159d5010b758a9409acf diff --git a/trunk/arch/sh/mm/cache-sh4.c b/trunk/arch/sh/mm/cache-sh4.c index 94c05d09c3f7..846b63d6f5e8 100644 --- a/trunk/arch/sh/mm/cache-sh4.c +++ b/trunk/arch/sh/mm/cache-sh4.c @@ -184,6 +184,7 @@ void flush_cache_sigtramp(unsigned long addr) i++, index += cpu_data->icache.way_incr) ctrl_outl(0, index); /* Clear out Valid-bit */ back_to_P1(); + wmb(); local_irq_restore(flags); } @@ -223,6 +224,8 @@ void flush_dcache_page(struct page *page) flush_cache_4096(CACHE_OC_ADDRESS_ARRAY | 0x2000, phys); flush_cache_4096(CACHE_OC_ADDRESS_ARRAY | 0x3000, phys); } + + wmb(); } static inline void flush_icache_all(void) @@ -247,6 +250,7 @@ void flush_dcache_all(void) __flush_dcache_all(); else __flush_dcache_all_ex(); + wmb(); } void flush_cache_all(void) @@ -377,5 +381,6 @@ void flush_icache_user_range(struct vm_area_struct *vma, struct page *page, unsigned long addr, int len) { flush_cache_page(vma, addr, page_to_pfn(page)); + mb(); } diff --git a/trunk/include/asm-sh/system.h b/trunk/include/asm-sh/system.h index e89728d405d8..eb4902ed920a 100644 --- a/trunk/include/asm-sh/system.h +++ b/trunk/include/asm-sh/system.h @@ -84,10 +84,17 @@ static __inline__ unsigned long tas(volatile int *m) extern void __xchg_called_with_bad_pointer(void); +#ifdef CONFIG_CPU_SH4A +#define mb() __asm__ __volatile__ ("synco": : :"memory") +#define rmb() mb() +#define wmb() __asm__ __volatile__ ("synco": : :"memory") +#define read_barrier_depends() do { } while(0) +#else #define mb() __asm__ __volatile__ ("": : :"memory") #define rmb() mb() #define wmb() __asm__ __volatile__ ("": : :"memory") #define read_barrier_depends() do { } while(0) +#endif #ifdef CONFIG_SMP #define smp_mb() mb()