Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bf7ececa authored by Keith Owens's avatar Keith Owens Committed by Tony Luck
Browse files

[IA64] Define an ia64 version of __raw_read_trylock



IA64 is using the generic version of __raw_read_trylock, which always
waits for the lock to be free instead of returning when the lock is in
use.  Define an ia64 version of __raw_read_trylock which behaves
correctly, and drop the generic one.

Signed-off-by: default avatarKeith Owens <kaos@sgi.com>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent f64fa677
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -201,6 +201,16 @@ static inline void __raw_write_unlock(raw_rwlock_t *x)

#endif /* !ASM_SUPPORTED */

#define __raw_read_trylock(lock) generic__raw_read_trylock(lock)
static inline int __raw_read_trylock(raw_rwlock_t *x)
{
	union {
		raw_rwlock_t lock;
		__u32 word;
	} old, new;
	old.lock = new.lock = *x;
	old.lock.write_lock = new.lock.write_lock = 0;
	++new.lock.read_counter;
	return (u32)ia64_cmpxchg4_acq((__u32 *)(x), new.word, old.word) == old.word;
}

#endif /*  _ASM_IA64_SPINLOCK_H */