aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/block/nvme-core.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c
index eaace767be49..5ffc26937226 100644
--- a/drivers/block/nvme-core.c
+++ b/drivers/block/nvme-core.c
@@ -76,6 +76,7 @@ struct async_cmd_info {
76struct nvme_queue { 76struct nvme_queue {
77 struct device *q_dmadev; 77 struct device *q_dmadev;
78 struct nvme_dev *dev; 78 struct nvme_dev *dev;
79 char irqname[24]; /* nvme4294967295-65535\0 */
79 spinlock_t q_lock; 80 spinlock_t q_lock;
80 struct nvme_command *sq_cmds; 81 struct nvme_command *sq_cmds;
81 volatile struct nvme_completion *cqes; 82 volatile struct nvme_completion *cqes;
@@ -1235,6 +1236,8 @@ static struct nvme_queue *nvme_alloc_queue(struct nvme_dev *dev, int qid,
1235 1236
1236 nvmeq->q_dmadev = dmadev; 1237 nvmeq->q_dmadev = dmadev;
1237 nvmeq->dev = dev; 1238 nvmeq->dev = dev;
1239 snprintf(nvmeq->irqname, sizeof(nvmeq->irqname), "nvme%dq%d",
1240 dev->instance, qid);
1238 spin_lock_init(&nvmeq->q_lock); 1241 spin_lock_init(&nvmeq->q_lock);
1239 nvmeq->cq_head = 0; 1242 nvmeq->cq_head = 0;
1240 nvmeq->cq_phase = 1; 1243 nvmeq->cq_phase = 1;
@@ -1297,7 +1300,7 @@ static int nvme_create_queue(struct nvme_queue *nvmeq, int qid)
1297 if (result < 0) 1300 if (result < 0)
1298 goto release_cq; 1301 goto release_cq;
1299 1302
1300 result = queue_request_irq(dev, nvmeq, "nvme"); 1303 result = queue_request_irq(dev, nvmeq, nvmeq->irqname);
1301 if (result < 0) 1304 if (result < 0)
1302 goto release_sq; 1305 goto release_sq;
1303 1306
@@ -1415,7 +1418,7 @@ static int nvme_configure_admin_queue(struct nvme_dev *dev)
1415 if (result) 1418 if (result)
1416 return result; 1419 return result;
1417 1420
1418 result = queue_request_irq(dev, nvmeq, "nvme admin"); 1421 result = queue_request_irq(dev, nvmeq, nvmeq->irqname);
1419 if (result) 1422 if (result)
1420 return result; 1423 return result;
1421 1424
@@ -1873,6 +1876,7 @@ static size_t db_bar_size(struct nvme_dev *dev, unsigned nr_io_queues)
1873 1876
1874static int nvme_setup_io_queues(struct nvme_dev *dev) 1877static int nvme_setup_io_queues(struct nvme_dev *dev)
1875{ 1878{
1879 struct nvme_queue *adminq = dev->queues[0];
1876 struct pci_dev *pdev = dev->pci_dev; 1880 struct pci_dev *pdev = dev->pci_dev;
1877 int result, cpu, i, vecs, nr_io_queues, size, q_depth; 1881 int result, cpu, i, vecs, nr_io_queues, size, q_depth;
1878 1882
@@ -1899,7 +1903,7 @@ static int nvme_setup_io_queues(struct nvme_dev *dev)
1899 } 1903 }
1900 1904
1901 /* Deregister the admin queue's interrupt */ 1905 /* Deregister the admin queue's interrupt */
1902 free_irq(dev->entry[0].vector, dev->queues[0]); 1906 free_irq(dev->entry[0].vector, adminq);
1903 1907
1904 vecs = nr_io_queues; 1908 vecs = nr_io_queues;
1905 for (i = 0; i < vecs; i++) 1909 for (i = 0; i < vecs; i++)
@@ -1937,9 +1941,9 @@ static int nvme_setup_io_queues(struct nvme_dev *dev)
1937 */ 1941 */
1938 nr_io_queues = vecs; 1942 nr_io_queues = vecs;
1939 1943
1940 result = queue_request_irq(dev, dev->queues[0], "nvme admin"); 1944 result = queue_request_irq(dev, adminq, adminq->irqname);
1941 if (result) { 1945 if (result) {
1942 dev->queues[0]->q_suspended = 1; 1946 adminq->q_suspended = 1;
1943 goto free_queues; 1947 goto free_queues;
1944 } 1948 }
1945 1949