mux: Explicitly include correct DT includes
[linux-2.6-microblaze.git] / block / blk-mq-tag.c
index dfd81ca..cc57e2d 100644 (file)
@@ -38,6 +38,7 @@ static void blk_mq_update_wake_batch(struct blk_mq_tags *tags,
 void __blk_mq_tag_busy(struct blk_mq_hw_ctx *hctx)
 {
        unsigned int users;
+       struct blk_mq_tags *tags = hctx->tags;
 
        /*
         * calling test_bit() prior to test_and_set_bit() is intentional,
@@ -55,9 +56,11 @@ void __blk_mq_tag_busy(struct blk_mq_hw_ctx *hctx)
                        return;
        }
 
-       users = atomic_inc_return(&hctx->tags->active_queues);
-
-       blk_mq_update_wake_batch(hctx->tags, users);
+       spin_lock_irq(&tags->lock);
+       users = tags->active_queues + 1;
+       WRITE_ONCE(tags->active_queues, users);
+       blk_mq_update_wake_batch(tags, users);
+       spin_unlock_irq(&tags->lock);
 }
 
 /*
@@ -90,9 +93,11 @@ void __blk_mq_tag_idle(struct blk_mq_hw_ctx *hctx)
                        return;
        }
 
-       users = atomic_dec_return(&tags->active_queues);
-
+       spin_lock_irq(&tags->lock);
+       users = tags->active_queues - 1;
+       WRITE_ONCE(tags->active_queues, users);
        blk_mq_update_wake_batch(tags, users);
+       spin_unlock_irq(&tags->lock);
 
        blk_mq_tag_wakeup_all(tags, false);
 }