diff options
| -rw-r--r-- | drivers/infiniband/hw/hfi1/chip.c | 18 | ||||
| -rw-r--r-- | drivers/infiniband/hw/hfi1/hfi.h | 1 | ||||
| -rw-r--r-- | drivers/infiniband/hw/hfi1/init.c | 4 |
3 files changed, 16 insertions, 7 deletions
diff --git a/drivers/infiniband/hw/hfi1/chip.c b/drivers/infiniband/hw/hfi1/chip.c index 6660f920f42e..57f0df2f84f2 100644 --- a/drivers/infiniband/hw/hfi1/chip.c +++ b/drivers/infiniband/hw/hfi1/chip.c | |||
| @@ -8264,8 +8264,8 @@ static irqreturn_t sdma_interrupt(int irq, void *data) | |||
| 8264 | /* handle the interrupt(s) */ | 8264 | /* handle the interrupt(s) */ |
| 8265 | sdma_engine_interrupt(sde, status); | 8265 | sdma_engine_interrupt(sde, status); |
| 8266 | } else { | 8266 | } else { |
| 8267 | dd_dev_err_ratelimited(dd, "SDMA engine %u interrupt, but no status bits set\n", | 8267 | dd_dev_info_ratelimited(dd, "SDMA engine %u interrupt, but no status bits set\n", |
| 8268 | sde->this_idx); | 8268 | sde->this_idx); |
| 8269 | } | 8269 | } |
| 8270 | return IRQ_HANDLED; | 8270 | return IRQ_HANDLED; |
| 8271 | } | 8271 | } |
| @@ -12960,7 +12960,14 @@ static void disable_intx(struct pci_dev *pdev) | |||
| 12960 | pci_intx(pdev, 0); | 12960 | pci_intx(pdev, 0); |
| 12961 | } | 12961 | } |
| 12962 | 12962 | ||
| 12963 | static void clean_up_interrupts(struct hfi1_devdata *dd) | 12963 | /** |
| 12964 | * hfi1_clean_up_interrupts() - Free all IRQ resources | ||
| 12965 | * @dd: valid device data data structure | ||
| 12966 | * | ||
| 12967 | * Free the MSI or INTx IRQs and assoicated PCI resources, | ||
| 12968 | * if they have been allocated. | ||
| 12969 | */ | ||
| 12970 | void hfi1_clean_up_interrupts(struct hfi1_devdata *dd) | ||
| 12964 | { | 12971 | { |
| 12965 | int i; | 12972 | int i; |
| 12966 | 12973 | ||
| @@ -13321,7 +13328,7 @@ static int set_up_interrupts(struct hfi1_devdata *dd) | |||
| 13321 | return 0; | 13328 | return 0; |
| 13322 | 13329 | ||
| 13323 | fail: | 13330 | fail: |
| 13324 | clean_up_interrupts(dd); | 13331 | hfi1_clean_up_interrupts(dd); |
| 13325 | return ret; | 13332 | return ret; |
| 13326 | } | 13333 | } |
| 13327 | 13334 | ||
| @@ -14748,7 +14755,6 @@ void hfi1_start_cleanup(struct hfi1_devdata *dd) | |||
| 14748 | aspm_exit(dd); | 14755 | aspm_exit(dd); |
| 14749 | free_cntrs(dd); | 14756 | free_cntrs(dd); |
| 14750 | free_rcverr(dd); | 14757 | free_rcverr(dd); |
| 14751 | clean_up_interrupts(dd); | ||
| 14752 | finish_chip_resources(dd); | 14758 | finish_chip_resources(dd); |
| 14753 | } | 14759 | } |
| 14754 | 14760 | ||
| @@ -15204,7 +15210,7 @@ bail_free_rcverr: | |||
| 15204 | bail_free_cntrs: | 15210 | bail_free_cntrs: |
| 15205 | free_cntrs(dd); | 15211 | free_cntrs(dd); |
| 15206 | bail_clear_intr: | 15212 | bail_clear_intr: |
| 15207 | clean_up_interrupts(dd); | 15213 | hfi1_clean_up_interrupts(dd); |
| 15208 | bail_cleanup: | 15214 | bail_cleanup: |
| 15209 | hfi1_pcie_ddcleanup(dd); | 15215 | hfi1_pcie_ddcleanup(dd); |
| 15210 | bail_free: | 15216 | bail_free: |
diff --git a/drivers/infiniband/hw/hfi1/hfi.h b/drivers/infiniband/hw/hfi1/hfi.h index b42c22292597..5757d0e3482d 100644 --- a/drivers/infiniband/hw/hfi1/hfi.h +++ b/drivers/infiniband/hw/hfi1/hfi.h | |||
| @@ -1957,6 +1957,7 @@ void hfi1_verbs_unregister_sysfs(struct hfi1_devdata *dd); | |||
| 1957 | int qsfp_dump(struct hfi1_pportdata *ppd, char *buf, int len); | 1957 | int qsfp_dump(struct hfi1_pportdata *ppd, char *buf, int len); |
| 1958 | 1958 | ||
| 1959 | int hfi1_pcie_init(struct pci_dev *pdev, const struct pci_device_id *ent); | 1959 | int hfi1_pcie_init(struct pci_dev *pdev, const struct pci_device_id *ent); |
| 1960 | void hfi1_clean_up_interrupts(struct hfi1_devdata *dd); | ||
| 1960 | void hfi1_pcie_cleanup(struct pci_dev *pdev); | 1961 | void hfi1_pcie_cleanup(struct pci_dev *pdev); |
| 1961 | int hfi1_pcie_ddinit(struct hfi1_devdata *dd, struct pci_dev *pdev); | 1962 | int hfi1_pcie_ddinit(struct hfi1_devdata *dd, struct pci_dev *pdev); |
| 1962 | void hfi1_pcie_ddcleanup(struct hfi1_devdata *); | 1963 | void hfi1_pcie_ddcleanup(struct hfi1_devdata *); |
diff --git a/drivers/infiniband/hw/hfi1/init.c b/drivers/infiniband/hw/hfi1/init.c index 9b128268fb28..c676d1cb8755 100644 --- a/drivers/infiniband/hw/hfi1/init.c +++ b/drivers/infiniband/hw/hfi1/init.c | |||
| @@ -1058,8 +1058,9 @@ static void shutdown_device(struct hfi1_devdata *dd) | |||
| 1058 | } | 1058 | } |
| 1059 | dd->flags &= ~HFI1_INITTED; | 1059 | dd->flags &= ~HFI1_INITTED; |
| 1060 | 1060 | ||
| 1061 | /* mask interrupts, but not errors */ | 1061 | /* mask and clean up interrupts, but not errors */ |
| 1062 | set_intr_state(dd, 0); | 1062 | set_intr_state(dd, 0); |
| 1063 | hfi1_clean_up_interrupts(dd); | ||
| 1063 | 1064 | ||
| 1064 | for (pidx = 0; pidx < dd->num_pports; ++pidx) { | 1065 | for (pidx = 0; pidx < dd->num_pports; ++pidx) { |
| 1065 | ppd = dd->pport + pidx; | 1066 | ppd = dd->pport + pidx; |
| @@ -1704,6 +1705,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 1704 | dd_dev_err(dd, "Failed to create /dev devices: %d\n", -j); | 1705 | dd_dev_err(dd, "Failed to create /dev devices: %d\n", -j); |
| 1705 | 1706 | ||
| 1706 | if (initfail || ret) { | 1707 | if (initfail || ret) { |
| 1708 | hfi1_clean_up_interrupts(dd); | ||
| 1707 | stop_timers(dd); | 1709 | stop_timers(dd); |
| 1708 | flush_workqueue(ib_wq); | 1710 | flush_workqueue(ib_wq); |
| 1709 | for (pidx = 0; pidx < dd->num_pports; ++pidx) { | 1711 | for (pidx = 0; pidx < dd->num_pports; ++pidx) { |
