@@ -65,10 +65,7 @@ struct nicpf {
bool mbx_lock[MAX_NUM_VFS_SUPPORTED];
/* MSI-X */
- bool msix_enabled;
u8 num_vec;
- struct msix_entry *msix_entries;
- bool irq_allocated[NIC_PF_MSIX_VECTORS];
char irq_name[NIC_PF_MSIX_VECTORS][20];
};
@@ -1088,7 +1085,7 @@ static irqreturn_t nic_mbx_intr_handler(int irq, void *nic_irq)
u64 intr;
u8 vf, vf_per_mbx_reg = 64;
- if (irq == nic->msix_entries[NIC_PF_INTR_ID_MBOX0].vector)
+ if (irq == pci_irq_vector(nic->pdev, NIC_PF_INTR_ID_MBOX0))
mbx = 0;
else
mbx = 1;
@@ -1107,76 +1104,30 @@ static irqreturn_t nic_mbx_intr_handler(int irq, void *nic_irq)
return IRQ_HANDLED;
}
-static int nic_enable_msix(struct nicpf *nic)
+static int nic_register_interrupts(struct nicpf *nic)
{
int i, ret;
- nic->num_vec = pci_msix_vec_count(nic->pdev);
-
- nic->msix_entries = kmalloc_array(nic->num_vec,
- sizeof(struct msix_entry),
- GFP_KERNEL);
- if (!nic->msix_entries)
- return -ENOMEM;
-
- for (i = 0; i < nic->num_vec; i++)
- nic->msix_entries[i].entry = i;
-
- ret = pci_enable_msix(nic->pdev, nic->msix_entries, nic->num_vec);
- if (ret) {
+ /* Enable MSI-X */
+ ret = pci_alloc_irq_vectors(nic->pdev, nic->num_vec, nic->num_vec,
+ PCI_IRQ_MSIX);
+ if (ret < 0) {
dev_err(&nic->pdev->dev,
"Request for #%d msix vectors failed, returned %d\n",
nic->num_vec, ret);
- kfree(nic->msix_entries);
return ret;
}
- nic->msix_enabled = 1;
- return 0;
-}
-
-static void nic_disable_msix(struct nicpf *nic)
-{
- if (nic->msix_enabled) {
- pci_disable_msix(nic->pdev);
- kfree(nic->msix_entries);
- nic->msix_enabled = 0;
- nic->num_vec = 0;
- }
-}
-
-static void nic_free_all_interrupts(struct nicpf *nic)
-{
- int irq;
-
- for (irq = 0; irq < nic->num_vec; irq++) {
- if (nic->irq_allocated[irq])
- free_irq(nic->msix_entries[irq].vector, nic);
- nic->irq_allocated[irq] = false;
- }
-}
-
-static int nic_register_interrupts(struct nicpf *nic)
-{
- int i, ret;
-
- /* Enable MSI-X */
- ret = nic_enable_msix(nic);
- if (ret)
- return ret;
-
/* Register mailbox interrupt handler */
for (i = NIC_PF_INTR_ID_MBOX0; i < nic->num_vec; i++) {
sprintf(nic->irq_name[i],
"NICPF Mbox%d", (i - NIC_PF_INTR_ID_MBOX0));
- ret = request_irq(nic->msix_entries[i].vector,
+ ret = request_irq(pci_irq_vector(nic->pdev, i),
nic_mbx_intr_handler, 0,
nic->irq_name[i], nic);
if (ret)
goto fail;
-
- nic->irq_allocated[i] = true;
}
/* Enable mailbox interrupt */
@@ -1185,15 +1136,19 @@ static int nic_register_interrupts(struct nicpf *nic)
fail:
dev_err(&nic->pdev->dev, "Request irq failed\n");
- nic_free_all_interrupts(nic);
- nic_disable_msix(nic);
+ while (--i >= 0)
+ free_irq(pci_irq_vector(nic->pdev, i), nic);
+ pci_free_irq_vectors(nic->pdev);
return ret;
}
static void nic_unregister_interrupts(struct nicpf *nic)
{
- nic_free_all_interrupts(nic);
- nic_disable_msix(nic);
+ int i;
+
+ for (i = 0; i < nic->num_vec; i++)
+ free_irq(pci_irq_vector(nic->pdev, i), nic);
+ pci_free_irq_vectors(nic->pdev);
}
static int nic_num_sqs_en(struct nicpf *nic, int vf_en)
Remove the deprecated pci_enable_msix API in favour of it's successor. Signed-off-by: Christoph Hellwig <hch@lst.de> --- drivers/net/ethernet/cavium/thunder/nic_main.c | 75 ++++++-------------------- 1 file changed, 15 insertions(+), 60 deletions(-)