iwlwifi: return real info in probe failure
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Wed, 28 Nov 2012 14:42:09 +0000 (16:42 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 29 Nov 2012 15:04:27 +0000 (16:04 +0100)
Don't return a hard coded -EFAULT, but rather the error
that occurred in the flow.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/iwlwifi/iwl-drv.c
drivers/net/wireless/iwlwifi/pcie/drv.c

index 198634b..d3549f4 100644 (file)
@@ -1032,6 +1032,7 @@ struct iwl_drv *iwl_drv_start(struct iwl_trans *trans,
 
        if (!drv->dbgfs_drv) {
                IWL_ERR(drv, "failed to create debugfs directory\n");
+               ret = -ENOMEM;
                goto err_free_drv;
        }
 
@@ -1040,12 +1041,12 @@ struct iwl_drv *iwl_drv_start(struct iwl_trans *trans,
 
        if (!drv->trans->dbgfs_dir) {
                IWL_ERR(drv, "failed to create transport debugfs directory\n");
+               ret = -ENOMEM;
                goto err_free_dbgfs;
        }
 #endif
 
        ret = iwl_request_firmware(drv, true);
-
        if (ret) {
                IWL_ERR(trans, "Couldn't request the fw\n");
                goto err_fw;
@@ -1060,9 +1061,8 @@ err_free_dbgfs:
 err_free_drv:
 #endif
        kfree(drv);
-       drv = NULL;
 
-       return drv;
+       return ERR_PTR(ret);
 }
 
 void iwl_drv_stop(struct iwl_drv *drv)
index 956fe6c..a93a170 100644 (file)
@@ -267,6 +267,7 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        const struct iwl_cfg *cfg = (struct iwl_cfg *)(ent->driver_data);
        struct iwl_trans *iwl_trans;
        struct iwl_trans_pcie *trans_pcie;
+       int ret;
 
        iwl_trans = iwl_trans_pcie_alloc(pdev, ent, cfg);
        if (iwl_trans == NULL)
@@ -276,11 +277,15 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 
        trans_pcie = IWL_TRANS_GET_PCIE_TRANS(iwl_trans);
        trans_pcie->drv = iwl_drv_start(iwl_trans, cfg);
-       if (!trans_pcie->drv)
+
+       if (IS_ERR_OR_NULL(trans_pcie->drv)) {
+               ret = PTR_ERR(trans_pcie->drv);
                goto out_free_trans;
+       }
 
        /* register transport layer debugfs here */
-       if (iwl_trans_dbgfs_register(iwl_trans, iwl_trans->dbgfs_dir))
+       ret = iwl_trans_dbgfs_register(iwl_trans, iwl_trans->dbgfs_dir);
+       if (ret)
                goto out_free_drv;
 
        return 0;
@@ -290,7 +295,7 @@ out_free_drv:
 out_free_trans:
        iwl_trans_pcie_free(iwl_trans);
        pci_set_drvdata(pdev, NULL);
-       return -EFAULT;
+       return ret;
 }
 
 static void __devexit iwl_pci_remove(struct pci_dev *pdev)