ivshmem-net: Switch to pci_alloc_irq_vectors
authorJan Kiszka <jan.kiszka@siemens.com>
Tue, 23 May 2017 15:41:00 +0000 (17:41 +0200)
committerLeonard Crestez <leonard.crestez@nxp.com>
Wed, 17 Apr 2019 23:51:34 +0000 (02:51 +0300)
Required by 4.12, and it also simplifies our code. Needs to be folded
into the initial patch eventually.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
(cherry picked from commit e2401b8567da9e02d5f674584ef7363f810525f1)
(cherry picked from commit 8d2959392ca3accaa25223308a075f64afd66464)
Signed-off-by: Vipul Kumar <vipul_kumar@mentor.com>
drivers/net/ivshmem-net.c

index 0e770ca..fd7d78b 100644 (file)
@@ -114,8 +114,6 @@ struct ivshm_net {
        u32 peer_id;
 
        struct pci_dev *pdev;
-       struct msix_entry msix;
-       bool using_msix;
 };
 
 static void *ivshm_net_desc_data(struct ivshm_net *in,
@@ -793,22 +791,21 @@ static int ivshm_net_probe(struct pci_dev *pdev,
        struct ivshmem_regs __iomem *regs;
        resource_size_t shmaddr;
        resource_size_t shmlen;
-       int interrupt;
        char *device_name;
        void *shm;
        u32 ivpos;
-       int err;
+       int ret;
 
-       err = pcim_enable_device(pdev);
-       if (err) {
-               dev_err(&pdev->dev, "pci_enable_device: %d\n", err);
-               return err;
+       ret = pcim_enable_device(pdev);
+       if (ret) {
+               dev_err(&pdev->dev, "pci_enable_device: %d\n", ret);
+               return ret;
        }
 
-       err = pcim_iomap_regions(pdev, BIT(0), DRV_NAME);
-       if (err) {
-               dev_err(&pdev->dev, "pcim_iomap_regions: %d\n", err);
-               return err;
+       ret = pcim_iomap_regions(pdev, BIT(0), DRV_NAME);
+       if (ret) {
+               dev_err(&pdev->dev, "pcim_iomap_regions: %d\n", ret);
+               return ret;
        }
 
        regs = pcim_iomap_table(pdev)[0];
@@ -869,8 +866,8 @@ static int ivshm_net_probe(struct pci_dev *pdev,
        spin_lock_init(&in->tx_free_lock);
        spin_lock_init(&in->tx_clean_lock);
 
-       err = ivshm_net_calc_qsize(ndev);
-       if (err)
+       ret = ivshm_net_calc_qsize(ndev);
+       if (ret)
                goto err_free;
 
        in->state_wq = alloc_ordered_workqueue(device_name, 0);
@@ -889,25 +886,21 @@ static int ivshm_net_probe(struct pci_dev *pdev,
        netif_carrier_off(ndev);
        netif_napi_add(ndev, &in->napi, ivshm_net_poll, NAPI_POLL_WEIGHT);
 
-       err = register_netdev(ndev);
-       if (err)
+       ret = register_netdev(ndev);
+       if (ret)
                goto err_wq;
 
-       err = pci_enable_msix(pdev, &in->msix, 1);
-       if (!err) {
-               interrupt = in->msix.vector;
-               in->using_msix = true;
-       } else {
-               interrupt = pdev->irq;
-               in->using_msix = false;
-       }
+       ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_LEGACY | PCI_IRQ_MSIX);
+       if (ret < 0)
+               goto err_alloc_irq;
 
-       err = request_irq(interrupt, ivshm_net_int, 0, device_name, ndev);
-       if (err)
-               goto err_int;
+       ret = request_irq(pci_irq_vector(pdev, 0), ivshm_net_int, 0,
+                         device_name, ndev);
+       if (ret)
+               goto err_request_irq;
 
        pci_set_master(pdev);
-       if (!in->using_msix)
+       if (!pdev->msix_enabled)
                writel(IVSHMEM_INTX_ENABLE, &in->ivshm_regs->intxctrl);
 
        writel(IVSHM_NET_STATE_RESET, &in->ivshm_regs->lstate);
@@ -915,16 +908,16 @@ static int ivshm_net_probe(struct pci_dev *pdev,
 
        return 0;
 
-err_int:
-       if (in->using_msix)
-               pci_disable_msix(pdev);
+err_request_irq:
+       pci_free_irq_vectors(pdev);
+err_alloc_irq:
        unregister_netdev(ndev);
 err_wq:
        destroy_workqueue(in->state_wq);
 err_free:
        free_netdev(ndev);
 
-       return err;
+       return ret;
 }
 
 static void ivshm_net_remove(struct pci_dev *pdev)
@@ -934,13 +927,10 @@ static void ivshm_net_remove(struct pci_dev *pdev)
 
        writel(IVSHM_NET_STATE_RESET, &in->ivshm_regs->lstate);
 
-       if (in->using_msix)  {
-               free_irq(in->msix.vector, ndev);
-               pci_disable_msix(pdev);
-       } else {
+       if (!pdev->msix_enabled)
                writel(0, &in->ivshm_regs->intxctrl);
-               free_irq(pdev->irq, ndev);
-       }
+       free_irq(pci_irq_vector(pdev, 0), ndev);
+       pci_free_irq_vectors(pdev);
 
        unregister_netdev(ndev);
        cancel_work_sync(&in->state_work);