diff options
author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2012-11-28 09:42:09 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2012-11-29 10:04:27 -0500 |
commit | 59f547ac5ba71a01232b023cb80f1fe05739dbbf (patch) | |
tree | 6177ff33d53e50ee1628d038b265e5ff959ed8c2 /drivers | |
parent | b4991f3f7bdc2402a3d7d841eb4376bda4f7a56b (diff) |
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')
-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, | |||
1032 | 1032 | ||
1033 | if (!drv->dbgfs_drv) { | 1033 | if (!drv->dbgfs_drv) { |
1034 | IWL_ERR(drv, "failed to create debugfs directory\n"); | 1034 | IWL_ERR(drv, "failed to create debugfs directory\n"); |
1035 | ret = -ENOMEM; | ||
1035 | goto err_free_drv; | 1036 | goto err_free_drv; |
1036 | } | 1037 | } |
1037 | 1038 | ||
@@ -1040,12 +1041,12 @@ struct iwl_drv *iwl_drv_start(struct iwl_trans *trans, | |||
1040 | 1041 | ||
1041 | if (!drv->trans->dbgfs_dir) { | 1042 | if (!drv->trans->dbgfs_dir) { |
1042 | IWL_ERR(drv, "failed to create transport debugfs directory\n"); | 1043 | IWL_ERR(drv, "failed to create transport debugfs directory\n"); |
1044 | ret = -ENOMEM; | ||
1043 | goto err_free_dbgfs; | 1045 | goto err_free_dbgfs; |
1044 | } | 1046 | } |
1045 | #endif | 1047 | #endif |
1046 | 1048 | ||
1047 | ret = iwl_request_firmware(drv, true); | 1049 | ret = iwl_request_firmware(drv, true); |
1048 | |||
1049 | if (ret) { | 1050 | if (ret) { |
1050 | IWL_ERR(trans, "Couldn't request the fw\n"); | 1051 | IWL_ERR(trans, "Couldn't request the fw\n"); |
1051 | goto err_fw; | 1052 | goto err_fw; |
@@ -1060,9 +1061,8 @@ err_free_dbgfs: | |||
1060 | err_free_drv: | 1061 | err_free_drv: |
1061 | #endif | 1062 | #endif |
1062 | kfree(drv); | 1063 | kfree(drv); |
1063 | drv = NULL; | ||
1064 | 1064 | ||
1065 | return drv; | 1065 | return ERR_PTR(ret); |
1066 | } | 1066 | } |
1067 | 1067 | ||
1068 | void iwl_drv_stop(struct iwl_drv *drv) | 1068 | 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) | |||
267 | const struct iwl_cfg *cfg = (struct iwl_cfg *)(ent->driver_data); | 267 | const struct iwl_cfg *cfg = (struct iwl_cfg *)(ent->driver_data); |
268 | struct iwl_trans *iwl_trans; | 268 | struct iwl_trans *iwl_trans; |
269 | struct iwl_trans_pcie *trans_pcie; | 269 | struct iwl_trans_pcie *trans_pcie; |
270 | int ret; | ||
270 | 271 | ||
271 | iwl_trans = iwl_trans_pcie_alloc(pdev, ent, cfg); | 272 | iwl_trans = iwl_trans_pcie_alloc(pdev, ent, cfg); |
272 | if (iwl_trans == NULL) | 273 | if (iwl_trans == NULL) |
@@ -276,11 +277,15 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
276 | 277 | ||
277 | trans_pcie = IWL_TRANS_GET_PCIE_TRANS(iwl_trans); | 278 | trans_pcie = IWL_TRANS_GET_PCIE_TRANS(iwl_trans); |
278 | trans_pcie->drv = iwl_drv_start(iwl_trans, cfg); | 279 | trans_pcie->drv = iwl_drv_start(iwl_trans, cfg); |
279 | if (!trans_pcie->drv) | 280 | |
281 | if (IS_ERR_OR_NULL(trans_pcie->drv)) { | ||
282 | ret = PTR_ERR(trans_pcie->drv); | ||
280 | goto out_free_trans; | 283 | goto out_free_trans; |
284 | } | ||
281 | 285 | ||
282 | /* register transport layer debugfs here */ | 286 | /* register transport layer debugfs here */ |
283 | if (iwl_trans_dbgfs_register(iwl_trans, iwl_trans->dbgfs_dir)) | 287 | ret = iwl_trans_dbgfs_register(iwl_trans, iwl_trans->dbgfs_dir); |
288 | if (ret) | ||
284 | goto out_free_drv; | 289 | goto out_free_drv; |
285 | 290 | ||
286 | return 0; | 291 | return 0; |
@@ -290,7 +295,7 @@ out_free_drv: | |||
290 | out_free_trans: | 295 | out_free_trans: |
291 | iwl_trans_pcie_free(iwl_trans); | 296 | iwl_trans_pcie_free(iwl_trans); |
292 | pci_set_drvdata(pdev, NULL); | 297 | pci_set_drvdata(pdev, NULL); |
293 | return -EFAULT; | 298 | return ret; |
294 | } | 299 | } |
295 | 300 | ||
296 | static void __devexit iwl_pci_remove(struct pci_dev *pdev) | 301 | static void __devexit iwl_pci_remove(struct pci_dev *pdev) |