diff options
author | Christoph Hellwig <hch@lst.de> | 2017-04-13 03:06:43 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2017-04-18 14:43:29 -0400 |
commit | 0ff199cb48b4af6f29a1bf15d92d93f44a22eeb4 (patch) | |
tree | 3f69907be80d6e4cfcb5a184a2f60427debabc85 | |
parent | 704e8953d3e9db29d5d93c0bf6973d86fe15e679 (diff) |
nvme/pci: Switch to pci_request_irq()
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Keith Busch <keith.busch@intel.com>
-rw-r--r-- | drivers/nvme/host/pci.c | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index 26a5fd05fe88..925997127a6b 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c | |||
@@ -117,7 +117,6 @@ static inline struct nvme_dev *to_nvme_dev(struct nvme_ctrl *ctrl) | |||
117 | struct nvme_queue { | 117 | struct nvme_queue { |
118 | struct device *q_dmadev; | 118 | struct device *q_dmadev; |
119 | struct nvme_dev *dev; | 119 | struct nvme_dev *dev; |
120 | char irqname[24]; /* nvme4294967295-65535\0 */ | ||
121 | spinlock_t q_lock; | 120 | spinlock_t q_lock; |
122 | struct nvme_command *sq_cmds; | 121 | struct nvme_command *sq_cmds; |
123 | struct nvme_command __iomem *sq_cmds_io; | 122 | struct nvme_command __iomem *sq_cmds_io; |
@@ -204,11 +203,6 @@ static unsigned int nvme_cmd_size(struct nvme_dev *dev) | |||
204 | nvme_iod_alloc_size(dev, NVME_INT_BYTES(dev), NVME_INT_PAGES); | 203 | nvme_iod_alloc_size(dev, NVME_INT_BYTES(dev), NVME_INT_PAGES); |
205 | } | 204 | } |
206 | 205 | ||
207 | static int nvmeq_irq(struct nvme_queue *nvmeq) | ||
208 | { | ||
209 | return pci_irq_vector(to_pci_dev(nvmeq->dev->dev), nvmeq->cq_vector); | ||
210 | } | ||
211 | |||
212 | static int nvme_admin_init_hctx(struct blk_mq_hw_ctx *hctx, void *data, | 206 | static int nvme_admin_init_hctx(struct blk_mq_hw_ctx *hctx, void *data, |
213 | unsigned int hctx_idx) | 207 | unsigned int hctx_idx) |
214 | { | 208 | { |
@@ -962,7 +956,7 @@ static int nvme_suspend_queue(struct nvme_queue *nvmeq) | |||
962 | spin_unlock_irq(&nvmeq->q_lock); | 956 | spin_unlock_irq(&nvmeq->q_lock); |
963 | return 1; | 957 | return 1; |
964 | } | 958 | } |
965 | vector = nvmeq_irq(nvmeq); | 959 | vector = nvmeq->cq_vector; |
966 | nvmeq->dev->online_queues--; | 960 | nvmeq->dev->online_queues--; |
967 | nvmeq->cq_vector = -1; | 961 | nvmeq->cq_vector = -1; |
968 | spin_unlock_irq(&nvmeq->q_lock); | 962 | spin_unlock_irq(&nvmeq->q_lock); |
@@ -970,7 +964,7 @@ static int nvme_suspend_queue(struct nvme_queue *nvmeq) | |||
970 | if (!nvmeq->qid && nvmeq->dev->ctrl.admin_q) | 964 | if (!nvmeq->qid && nvmeq->dev->ctrl.admin_q) |
971 | blk_mq_stop_hw_queues(nvmeq->dev->ctrl.admin_q); | 965 | blk_mq_stop_hw_queues(nvmeq->dev->ctrl.admin_q); |
972 | 966 | ||
973 | free_irq(vector, nvmeq); | 967 | pci_free_irq(to_pci_dev(nvmeq->dev->dev), vector, nvmeq); |
974 | 968 | ||
975 | return 0; | 969 | return 0; |
976 | } | 970 | } |
@@ -1055,8 +1049,6 @@ static struct nvme_queue *nvme_alloc_queue(struct nvme_dev *dev, int qid, | |||
1055 | 1049 | ||
1056 | nvmeq->q_dmadev = dev->dev; | 1050 | nvmeq->q_dmadev = dev->dev; |
1057 | nvmeq->dev = dev; | 1051 | nvmeq->dev = dev; |
1058 | snprintf(nvmeq->irqname, sizeof(nvmeq->irqname), "nvme%dq%d", | ||
1059 | dev->ctrl.instance, qid); | ||
1060 | spin_lock_init(&nvmeq->q_lock); | 1052 | spin_lock_init(&nvmeq->q_lock); |
1061 | nvmeq->cq_head = 0; | 1053 | nvmeq->cq_head = 0; |
1062 | nvmeq->cq_phase = 1; | 1054 | nvmeq->cq_phase = 1; |
@@ -1079,12 +1071,16 @@ static struct nvme_queue *nvme_alloc_queue(struct nvme_dev *dev, int qid, | |||
1079 | 1071 | ||
1080 | static int queue_request_irq(struct nvme_queue *nvmeq) | 1072 | static int queue_request_irq(struct nvme_queue *nvmeq) |
1081 | { | 1073 | { |
1082 | if (use_threaded_interrupts) | 1074 | struct pci_dev *pdev = to_pci_dev(nvmeq->dev->dev); |
1083 | return request_threaded_irq(nvmeq_irq(nvmeq), nvme_irq_check, | 1075 | int nr = nvmeq->dev->ctrl.instance; |
1084 | nvme_irq, IRQF_SHARED, nvmeq->irqname, nvmeq); | 1076 | |
1085 | else | 1077 | if (use_threaded_interrupts) { |
1086 | return request_irq(nvmeq_irq(nvmeq), nvme_irq, IRQF_SHARED, | 1078 | return pci_request_irq(pdev, nvmeq->cq_vector, nvme_irq_check, |
1087 | nvmeq->irqname, nvmeq); | 1079 | nvme_irq, nvmeq, "nvme%dq%d", nr, nvmeq->qid); |
1080 | } else { | ||
1081 | return pci_request_irq(pdev, nvmeq->cq_vector, nvme_irq, | ||
1082 | NULL, nvmeq, "nvme%dq%d", nr, nvmeq->qid); | ||
1083 | } | ||
1088 | } | 1084 | } |
1089 | 1085 | ||
1090 | static void nvme_init_queue(struct nvme_queue *nvmeq, u16 qid) | 1086 | static void nvme_init_queue(struct nvme_queue *nvmeq, u16 qid) |
@@ -1440,7 +1436,7 @@ static int nvme_setup_io_queues(struct nvme_dev *dev) | |||
1440 | } | 1436 | } |
1441 | 1437 | ||
1442 | /* Deregister the admin queue's interrupt */ | 1438 | /* Deregister the admin queue's interrupt */ |
1443 | free_irq(pci_irq_vector(pdev, 0), adminq); | 1439 | pci_free_irq(pdev, 0, adminq); |
1444 | 1440 | ||
1445 | /* | 1441 | /* |
1446 | * If we enable msix early due to not intx, disable it again before | 1442 | * If we enable msix early due to not intx, disable it again before |