aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wilcox <matthew.r.wilcox@intel.com>2014-01-27 15:57:22 -0500
committerMatthew Wilcox <matthew.r.wilcox@intel.com>2014-01-27 20:14:08 -0500
commit3193f07bb7ae723f33ac8e8b9db317a4f68d7d18 (patch)
treea0944b50506159a1c7bb9d2af983f120c3b23c8c
parent09ece1424f52a2d3ad0ab715e96b0fb342af4f03 (diff)
NVMe: Include device and queue numbers in interrupt name
On larger systems with many drives, it may help debugging to know which queue is tied to which interrupt, just by looking at /proc/interrupts. Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
-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