mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-01-01 23:01:29 +00:00
NVMe: Fix irq freeing when queue_request_irq fails
Fixes an issue when queue_reuest_irq fails in nvme_setup_io_queues. This patch initializes all vectors to -1 and resets the vector to -1 in the case of a failure in queue_request_irq. This avoids the free_irq in nvme_suspend_queue if the queue did not get an irq. Signed-off-by: Jon Derrick <jonathan.derrick@intel.com> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
parent
a20135ffbc
commit
758dd7fdff
@ -1474,6 +1474,7 @@ static struct nvme_queue *nvme_alloc_queue(struct nvme_dev *dev, int qid,
|
|||||||
nvmeq->q_db = &dev->dbs[qid * 2 * dev->db_stride];
|
nvmeq->q_db = &dev->dbs[qid * 2 * dev->db_stride];
|
||||||
nvmeq->q_depth = depth;
|
nvmeq->q_depth = depth;
|
||||||
nvmeq->qid = qid;
|
nvmeq->qid = qid;
|
||||||
|
nvmeq->cq_vector = -1;
|
||||||
dev->queues[qid] = nvmeq;
|
dev->queues[qid] = nvmeq;
|
||||||
|
|
||||||
/* make sure queue descriptor is set before queue count, for kthread */
|
/* make sure queue descriptor is set before queue count, for kthread */
|
||||||
@ -1726,8 +1727,10 @@ static int nvme_configure_admin_queue(struct nvme_dev *dev)
|
|||||||
|
|
||||||
nvmeq->cq_vector = 0;
|
nvmeq->cq_vector = 0;
|
||||||
result = queue_request_irq(dev, nvmeq, nvmeq->irqname);
|
result = queue_request_irq(dev, nvmeq, nvmeq->irqname);
|
||||||
if (result)
|
if (result) {
|
||||||
|
nvmeq->cq_vector = -1;
|
||||||
goto free_nvmeq;
|
goto free_nvmeq;
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
@ -2213,8 +2216,10 @@ static int nvme_setup_io_queues(struct nvme_dev *dev)
|
|||||||
dev->max_qid = nr_io_queues;
|
dev->max_qid = nr_io_queues;
|
||||||
|
|
||||||
result = queue_request_irq(dev, adminq, adminq->irqname);
|
result = queue_request_irq(dev, adminq, adminq->irqname);
|
||||||
if (result)
|
if (result) {
|
||||||
|
adminq->cq_vector = -1;
|
||||||
goto free_queues;
|
goto free_queues;
|
||||||
|
}
|
||||||
|
|
||||||
/* Free previously allocated queues that are no longer usable */
|
/* Free previously allocated queues that are no longer usable */
|
||||||
nvme_free_queues(dev, nr_io_queues + 1);
|
nvme_free_queues(dev, nr_io_queues + 1);
|
||||||
|
Loading…
Reference in New Issue
Block a user