]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
IB/hfi1: Check device id early during init
authorTadeusz Struk <tadeusz.struk@intel.com>
Tue, 21 Mar 2017 00:25:29 +0000 (17:25 -0700)
committerDoug Ledford <dledford@redhat.com>
Wed, 5 Apr 2017 18:45:09 +0000 (14:45 -0400)
If there is a wrong device passed to the driver it should fail early,
without trying to initialize the device only to find out that it has
an invalid device later during the init.

Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Tadeusz Struk <tadeusz.struk@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/hfi1/init.c

index f40864e9a3b24502f18d377762e33b266547a75d..9bfb8ebe28b19d1882bf9459fd6fc189f25253b8 100644 (file)
@@ -1425,6 +1425,16 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        /* First, lock the non-writable module parameters */
        HFI1_CAP_LOCK();
 
+       /* Validate dev ids */
+       if (!(ent->device == PCI_DEVICE_ID_INTEL0 ||
+             ent->device == PCI_DEVICE_ID_INTEL1)) {
+               hfi1_early_err(&pdev->dev,
+                              "Failing on unknown Intel deviceid 0x%x\n",
+                              ent->device);
+               ret = -ENODEV;
+               goto bail;
+       }
+
        /* Validate some global module parameters */
        ret = init_validate_rcvhdrcnt(&pdev->dev, rcvhdrcnt);
        if (ret)
@@ -1470,15 +1480,6 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        if (ret)
                goto bail;
 
-       if (!(ent->device == PCI_DEVICE_ID_INTEL0 ||
-             ent->device == PCI_DEVICE_ID_INTEL1)) {
-               hfi1_early_err(&pdev->dev,
-                              "Failing on unknown Intel deviceid 0x%x\n",
-                              ent->device);
-               ret = -ENODEV;
-               goto clean_bail;
-       }
-
        /*
         * Do device-specific initialization, function table setup, dd
         * allocation, etc.