]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
nvme-pci: quiesce/unquiesce admin_q instead of start/stop its hw queues
authorSagi Grimberg <sagi@grimberg.me>
Sun, 2 Jul 2017 12:53:27 +0000 (15:53 +0300)
committerSagi Grimberg <sagi@grimberg.me>
Thu, 6 Jul 2017 06:48:47 +0000 (09:48 +0300)
unlike blk_mq_stop_hw_queues and blk_mq_start_stopped_hw_queues
quiescing/unquiescing respects the submission path rcu grace.

Reviewed-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
drivers/nvme/host/pci.c

index eb729ff70e7d1c67bfc04eb2111a831b90d3d184..d9c0010a9bbcb22257f50d9e1e2c105f9fe33173 100644 (file)
@@ -1125,7 +1125,7 @@ static int nvme_suspend_queue(struct nvme_queue *nvmeq)
        spin_unlock_irq(&nvmeq->q_lock);
 
        if (!nvmeq->qid && nvmeq->dev->ctrl.admin_q)
-               blk_mq_stop_hw_queues(nvmeq->dev->ctrl.admin_q);
+               blk_mq_quiesce_queue(nvmeq->dev->ctrl.admin_q);
 
        pci_free_irq(to_pci_dev(nvmeq->dev->dev), vector, nvmeq);
 
@@ -1315,7 +1315,7 @@ static void nvme_dev_remove_admin(struct nvme_dev *dev)
                 * user requests may be waiting on a stopped queue. Start the
                 * queue to flush these to completion.
                 */
-               blk_mq_start_stopped_hw_queues(dev->ctrl.admin_q, true);
+               blk_mq_unquiesce_queue(dev->ctrl.admin_q);
                blk_cleanup_queue(dev->ctrl.admin_q);
                blk_mq_free_tag_set(&dev->admin_tagset);
        }
@@ -1352,7 +1352,7 @@ static int nvme_alloc_admin_tags(struct nvme_dev *dev)
                        return -ENODEV;
                }
        } else
-               blk_mq_start_stopped_hw_queues(dev->ctrl.admin_q, true);
+               blk_mq_unquiesce_queue(dev->ctrl.admin_q);
 
        return 0;
 }