summaryrefslogtreecommitdiff
path: root/lib/sbitmap.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2019-09-14 18:24:57 +0300
committerTakashi Iwai <tiwai@suse.de>2019-09-14 18:26:10 +0300
commitd3f9990f1b48514b33342612b51fad238592d774 (patch)
tree9ad5ae81ba3e820e91a09e2675b7c98675bd809e /lib/sbitmap.c
parente1a00b5b253a4f97216b9a33199a863987075162 (diff)
parent7711fb7dac1ab77fd1b4d948f4647a569e4a1ae2 (diff)
downloadlinux-d3f9990f1b48514b33342612b51fad238592d774.tar.xz
Merge branch 'for-next' into for-linus
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'lib/sbitmap.c')
-rw-r--r--lib/sbitmap.c10
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;
}