sbitmap: fix improper use of smp_mb__before_atomic() [Linux 5.2]

sbitmap: fix improper use of smp_mb__before_atomic() [Linux 5.2]

This Linux kernel change "sbitmap: fix improper use of smp_mb__before_atomic()" is included in the Linux 5.2 release. This change is authored by Andrea Parri <andrea.parri [at] amarulasolutions.com> on Mon May 20 19:23:57 2019 +0200. The commit for this change in Linux stable tree is a0934fd (patch).

sbitmap: fix improper use of smp_mb__before_atomic()

This barrier only applies to the read-modify-write operations; in
particular, it does not apply to the atomic_set() primitive.

Replace the barrier with an smp_mb().

Fixes: 6c0ca7ae292ad ("sbitmap: fix wakeup hang after sbq resize")
Cc: [email protected]
Reported-by: "Paul E. McKenney" <[email protected]>
Reported-by: Peter Zijlstra <[email protected]>
Signed-off-by: Andrea Parri <[email protected]>
Reviewed-by: Ming Lei <[email protected]>
Cc: Jens Axboe <[email protected]>
Cc: Omar Sandoval <[email protected]>
Cc: Ming Lei <[email protected]>
Cc: [email protected]
Cc: "Paul E. McKenney" <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>

There are 2 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 lib/sbitmap.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/sbitmap.c b/lib/sbitmap.c
index 155fe38..4a7fc49 100644
--- a/lib/sbitmap.c
+++ b/lib/sbitmap.c
@@ -435,7 +435,7 @@ static void sbitmap_queue_update_wake_batch(struct sbitmap_queue *sbq,
         * to ensure that the batch size is updated before the wait
         * counts.
         */
-       smp_mb__before_atomic();
+       smp_mb();
        for (i = 0; i < SBQ_WAIT_QUEUES; i++)
            atomic_set(&sbq->ws[i].wait_cnt, 1);
    }

Leave a Reply

Your email address will not be published. Required fields are marked *