diff options
Diffstat (limited to 'lib/sbitmap.c')
| -rw-r--r-- | lib/sbitmap.c | 10 | 
1 files changed, 3 insertions, 7 deletions
diff --git a/lib/sbitmap.c b/lib/sbitmap.c index 54f57cd117c6..969e5400a615 100644 --- a/lib/sbitmap.c +++ b/lib/sbitmap.c @@ -26,9 +26,7 @@ static inline bool sbitmap_deferred_clear(struct sbitmap *sb, int index)  	/*  	 * First get a stable cleared mask, setting the old mask to 0.  	 */ -	do { -		mask = sb->map[index].cleared; -	} while (cmpxchg(&sb->map[index].cleared, mask, 0) != mask); +	mask = xchg(&sb->map[index].cleared, 0);  	/*  	 * Now clear the masked bits in our free word @@ -516,10 +514,8 @@ static struct sbq_wait_state *sbq_wake_ptr(struct sbitmap_queue *sbq)  		struct sbq_wait_state *ws = &sbq->ws[wake_index];  		if (waitqueue_active(&ws->wait)) { -			int o = atomic_read(&sbq->wake_index); - -			if (wake_index != o) -				atomic_cmpxchg(&sbq->wake_index, o, wake_index); +			if (wake_index != atomic_read(&sbq->wake_index)) +				atomic_set(&sbq->wake_index, wake_index);  			return ws;  		}  | 
