diff options
author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2012-11-28 15:42:09 +0100 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2012-11-29 16:04:27 +0100 |
commit | 59f547ac5ba71a01232b023cb80f1fe05739dbbf (patch) | |
tree | 6177ff33d53e50ee1628d038b265e5ff959ed8c2 /drivers/net/wireless/iwlwifi | |
parent | iwlwifi: clear trans->op_mode pointer when it is leaving (diff) | |
download | linux-59f547ac5ba71a01232b023cb80f1fe05739dbbf.tar.xz linux-59f547ac5ba71a01232b023cb80f1fe05739dbbf.zip |
iwlwifi: return real info in probe failure
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>
Diffstat (limited to 'drivers/net/wireless/iwlwifi')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-drv.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/drv.c | 11 |
2 files changed, 11 insertions, 6 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-drv.c b/drivers/net/wireless/iwlwifi/iwl-drv.c index 198634b75ed0..d3549f493a17 100644 --- a/drivers/net/wireless/iwlwifi/iwl-drv.c +++ b/drivers/net/wireless/iwlwifi/iwl-drv.c @@ -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) diff --git a/drivers/net/wireless/iwlwifi/pcie/drv.c b/drivers/net/wireless/iwlwifi/pcie/drv.c index 956fe6c370bc..a93a170b6f2c 100644 --- a/drivers/net/wireless/iwlwifi/pcie/drv.c +++ b/drivers/net/wireless/iwlwifi/pcie/drv.c @@ -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) |