 93ea02bb84
			
		
	
	
	93ea02bb84
	
	
	
		
			
			We're going to be adding a few new barrier primitives, and in order to avoid endless duplication make more agressive use of asm-generic/barrier.h. Change the asm-generic/barrier.h such that it allows partial barrier definitions and fills out the rest with defaults. There are a few architectures (m32r, m68k) that could probably do away with their barrier.h file entirely but are kept for now due to their unconventional nop() implementation. Suggested-by: Geert Uytterhoeven <geert@linux-m68k.org> Reviewed-by: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> Signed-off-by: Peter Zijlstra <peterz@infradead.org> Cc: Michael Ellerman <michael@ellerman.id.au> Cc: Michael Neuling <mikey@neuling.org> Cc: Russell King <linux@arm.linux.org.uk> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Victor Kaplansky <VICTORK@il.ibm.com> Cc: Tony Luck <tony.luck@intel.com> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Frederic Weisbecker <fweisbec@gmail.com> Link: http://lkml.kernel.org/r/20131213150640.846368594@infradead.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
		
			
				
	
	
		
			39 lines
		
	
	
	
		
			1.2 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
	
		
			1.2 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright (C) 1999, 2000  Niibe Yutaka  &  Kaz Kojima
 | |
|  * Copyright (C) 2002 Paul Mundt
 | |
|  */
 | |
| #ifndef __ASM_SH_BARRIER_H
 | |
| #define __ASM_SH_BARRIER_H
 | |
| 
 | |
| #if defined(CONFIG_CPU_SH4A) || defined(CONFIG_CPU_SH5)
 | |
| #include <asm/cache_insns.h>
 | |
| #endif
 | |
| 
 | |
| /*
 | |
|  * A brief note on ctrl_barrier(), the control register write barrier.
 | |
|  *
 | |
|  * Legacy SH cores typically require a sequence of 8 nops after
 | |
|  * modification of a control register in order for the changes to take
 | |
|  * effect. On newer cores (like the sh4a and sh5) this is accomplished
 | |
|  * with icbi.
 | |
|  *
 | |
|  * Also note that on sh4a in the icbi case we can forego a synco for the
 | |
|  * write barrier, as it's not necessary for control registers.
 | |
|  *
 | |
|  * Historically we have only done this type of barrier for the MMUCR, but
 | |
|  * it's also necessary for the CCR, so we make it generic here instead.
 | |
|  */
 | |
| #if defined(CONFIG_CPU_SH4A) || defined(CONFIG_CPU_SH5)
 | |
| #define mb()		__asm__ __volatile__ ("synco": : :"memory")
 | |
| #define rmb()		mb()
 | |
| #define wmb()		mb()
 | |
| #define ctrl_barrier()	__icbi(PAGE_OFFSET)
 | |
| #else
 | |
| #define ctrl_barrier()	__asm__ __volatile__ ("nop;nop;nop;nop;nop;nop;nop;nop")
 | |
| #endif
 | |
| 
 | |
| #define set_mb(var, value) do { (void)xchg(&var, value); } while (0)
 | |
| 
 | |
| #include <asm-generic/barrier.h>
 | |
| 
 | |
| #endif /* __ASM_SH_BARRIER_H */
 |