diff options
Diffstat (limited to 'include/asm-frv/system.h')
| -rw-r--r-- | include/asm-frv/system.h | 25 | 
1 files changed, 17 insertions, 8 deletions
diff --git a/include/asm-frv/system.h b/include/asm-frv/system.h index b400cea8148..30a67a9da11 100644 --- a/include/asm-frv/system.h +++ b/include/asm-frv/system.h @@ -179,14 +179,23 @@ do {							\  #define mb()			asm volatile ("membar" : : :"memory")  #define rmb()			asm volatile ("membar" : : :"memory")  #define wmb()			asm volatile ("membar" : : :"memory") -#define set_mb(var, value)	do { var = value; mb(); } while (0) +#define read_barrier_depends()	barrier() -#define smp_mb()		mb() -#define smp_rmb()		rmb() -#define smp_wmb()		wmb() - -#define read_barrier_depends()		do {} while(0) +#ifdef CONFIG_SMP +#define smp_mb()			mb() +#define smp_rmb()			rmb() +#define smp_wmb()			wmb()  #define smp_read_barrier_depends()	read_barrier_depends() +#define set_mb(var, value) \ +	do { xchg(&var, (value)); } while (0) +#else +#define smp_mb()			barrier() +#define smp_rmb()			barrier() +#define smp_wmb()			barrier() +#define smp_read_barrier_depends()	do {} while(0) +#define set_mb(var, value) \ +	do { var = (value); barrier(); } while (0) +#endif  #define HARD_RESET_NOW()			\  do {						\ @@ -234,7 +243,7 @@ extern void free_initmem(void);  		break;								\  										\  	default:								\ -		__xg_orig = 0;							\ +		__xg_orig = (__typeof__(__xg_orig))0;				\  		asm volatile("break");						\  		break;								\  	}									\ @@ -259,7 +268,7 @@ extern uint32_t __cmpxchg_32(uint32_t *v, uint32_t test, uint32_t new);  					 (__force uint32_t)__xg_test,		\  					 (__force uint32_t)__xg_new); break;	\  	default:								\ -		__xg_orig = 0;							\ +		__xg_orig = (__typeof__(__xg_orig))0;				\  		asm volatile("break");						\  		break;								\  	}									\  |