diff options
-rw-r--r-- | drivers/block/nvme-core.c | 14 |
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 { | |||
76 | struct nvme_queue { | 76 | struct 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 | ||
1874 | static int nvme_setup_io_queues(struct nvme_dev *dev) | 1877 | static 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 | ||