diff options
Diffstat (limited to 'include/linux/spinlock.h')
| -rw-r--r-- | include/linux/spinlock.h | 11 | 
1 files changed, 10 insertions, 1 deletions
diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h index e089157dcf97..ed7c4d6b8235 100644 --- a/include/linux/spinlock.h +++ b/include/linux/spinlock.h @@ -57,6 +57,7 @@  #include <linux/stringify.h>  #include <linux/bottom_half.h>  #include <asm/barrier.h> +#include <asm/mmiowb.h>  /* @@ -178,6 +179,7 @@ static inline void do_raw_spin_lock(raw_spinlock_t *lock) __acquires(lock)  {  	__acquire(lock);  	arch_spin_lock(&lock->raw_lock); +	mmiowb_spin_lock();  }  #ifndef arch_spin_lock_flags @@ -189,15 +191,22 @@ do_raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long *flags) __acquires(lo  {  	__acquire(lock);  	arch_spin_lock_flags(&lock->raw_lock, *flags); +	mmiowb_spin_lock();  }  static inline int do_raw_spin_trylock(raw_spinlock_t *lock)  { -	return arch_spin_trylock(&(lock)->raw_lock); +	int ret = arch_spin_trylock(&(lock)->raw_lock); + +	if (ret) +		mmiowb_spin_lock(); + +	return ret;  }  static inline void do_raw_spin_unlock(raw_spinlock_t *lock) __releases(lock)  { +	mmiowb_spin_unlock();  	arch_spin_unlock(&lock->raw_lock);  	__release(lock);  }  | 
