[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1464862148-5672-1-git-send-email-xinhui.pan@linux.vnet.ibm.com>
Date: Thu, 2 Jun 2016 18:09:08 +0800
From: Pan Xinhui <xinhui.pan@...ux.vnet.ibm.com>
To: linux-arch@...r.kernel.org, linux-kernel@...r.kernel.org
Cc: arnd@...db.de, waiman.long@...com, peterz@...radead.org,
Pan Xinhui <xinhui.pan@...ux.vnet.ibm.com>
Subject: [PATCH] locking/qrwlock: fix write unlock issue in big endian
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@...ux.vnet.ibm.com>
---
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
Powered by blists - more mailing lists