strcut __qrwlock has different layout in big endian machine. we need set the __qrwlock->wmode to NULL, and the address is not &lock->cnts in big endian machine. Do as what read unlock does. we are lucky that the __qrwlock->wmode's val is _QW_LOCKED. Signed-off-by: Pan Xinhui <xinhui.pan@xxxxxxxxxxxxxxxxxx> --- include/asm-generic/qrwlock.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/asm-generic/qrwlock.h b/include/asm-generic/qrwlock.h index 54a8e65..eadd7a3 100644 --- a/include/asm-generic/qrwlock.h +++ b/include/asm-generic/qrwlock.h @@ -139,7 +139,7 @@ static inline void queued_read_unlock(struct qrwlock *lock) */ static inline void queued_write_unlock(struct qrwlock *lock) { - smp_store_release((u8 *)&lock->cnts, 0); + (void)atomic_sub_return_release(_QW_LOCKED, &lock->cnts); } /* -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html