From ed476a617ca660b21ea0256c6498d54f12202f6a Mon Sep 17 00:00:00 2001 From: Samy Al Bahra Date: Thu, 17 Apr 2014 16:17:23 -0400 Subject: [PATCH] Revert "ck_rwlock: Clear reader bits on unlatch operation." This reverts commit 7f945460bccec3ab64eeecf18841c2cc33e0c8f9. --- include/ck_rwlock.h | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/include/ck_rwlock.h b/include/ck_rwlock.h index b5d2416..7b6706b 100644 --- a/include/ck_rwlock.h +++ b/include/ck_rwlock.h @@ -29,7 +29,6 @@ #include #include -#include #include #include #include @@ -42,7 +41,6 @@ typedef struct ck_rwlock ck_rwlock_t; #define CK_RWLOCK_INITIALIZER {0, 0} #define CK_RWLOCK_LATCH_SHIFT 16 -#define CK_RWLOCK_LATCH_MASK (UINT16_MAX << CK_RWLOCK_LATCH_SHIFT) CK_CC_INLINE static void ck_rwlock_init(struct ck_rwlock *rw) @@ -129,16 +127,8 @@ ck_rwlock_write_latch(ck_rwlock_t *rw) CK_CC_INLINE static void ck_rwlock_write_unlatch(ck_rwlock_t *rw) { - uint32_t snapshot = ck_pr_load_uint(&rw->n_readers); - uint32_t delta = (snapshot & CK_RWLOCK_LATCH_MASK) - - (1UL << CK_RWLOCK_LATCH_SHIFT); - - while (ck_pr_cas_32_value(&rw->n_readers, snapshot, delta, &snapshot) == false) { - delta = (snapshot & CK_RWLOCK_LATCH_MASK) - - (1UL << CK_RWLOCK_LATCH_SHIFT); - ck_pr_stall(); - } + ck_pr_sub_32(&rw->n_readers, 1UL << CK_RWLOCK_LATCH_SHIFT); return; }