summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Johnson <jjohnson@codeaurora.org>2017-02-02 08:54:48 -0800
committerqcabuildsw <qcabuildsw@localhost>2017-02-03 13:50:41 -0800
commitd55dcbadccbe60463df24b82152c5317d06c08c2 (patch)
tree4ea766cfa8f270a0431cd133deb9943121bffb5f
parentd1ae706c831e95331b64a256c1107d2c18c56f80 (diff)
qcacld-3.0: Change hdd_open_interfaces() to return errno
Desk review of hdd_wlan_startup() revealed improper use of the adapter returned by hdd_open_interfaces() since in the failure case multiple calls will be made to hdd_debugfs_exit() for that returned adapter. Further review revealed the fact that having hdd_open_interfaces() return an adapter is illogical since hdd_open_interfaces() can legitimately open multiple interfaces, and hence the return value should simply indicate whether all required interfaces were opened or not. So update hdd_open_interfaces() to return errno instead of an adapter. Change-Id: I71117c32f053dad97a5c4bcaef33af27a903f511 CRs-Fixed: 2001662
-rw-r--r--core/hdd/src/wlan_hdd_main.c91
1 files changed, 43 insertions, 48 deletions
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index e8ef3c6b27c7..8c459d976c39 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -6794,6 +6794,22 @@ static inline int hdd_open_p2p_interface(hdd_context_t *hdd_ctx,
}
#endif
+static int hdd_open_ocb_interface(hdd_context_t *hdd_ctx, bool rtnl_held)
+{
+ hdd_adapter_t *adapter;
+ int ret = 0;
+
+ adapter = hdd_open_adapter(hdd_ctx, QDF_OCB_MODE, "wlanocb%d",
+ wlan_hdd_get_intf_addr(hdd_ctx),
+ NET_NAME_UNKNOWN, rtnl_held);
+ if (adapter == NULL) {
+ hdd_err("Failed to open 802.11p interface");
+ ret = -ENOSPC;
+ }
+
+ return ret;
+}
+
/**
* hdd_start_station_adapter()- Start the Station Adapter
* @adapter: HDD adapter
@@ -6884,56 +6900,43 @@ int hdd_start_ftm_adapter(hdd_adapter_t *adapter)
*
* Open all the interfaces like STA, P2P and OCB based on the configuration.
*
- * Return: Primary adapter on success and PTR_ERR on failure
+ * Return: 0 if all interfaces were created, otherwise negative errno
*/
-static hdd_adapter_t *hdd_open_interfaces(hdd_context_t *hdd_ctx,
- bool rtnl_held)
+static int hdd_open_interfaces(hdd_context_t *hdd_ctx, bool rtnl_held)
{
- hdd_adapter_t *adapter = NULL;
- hdd_adapter_t *adapter_11p = NULL;
+ hdd_adapter_t *adapter;
int ret;
- if (hdd_ctx->config->dot11p_mode == WLAN_HDD_11P_STANDALONE) {
+ if (hdd_ctx->config->dot11p_mode == WLAN_HDD_11P_STANDALONE)
/* Create only 802.11p interface */
- adapter = hdd_open_adapter(hdd_ctx, QDF_OCB_MODE, "wlanocb%d",
- wlan_hdd_get_intf_addr(hdd_ctx),
- NET_NAME_UNKNOWN, rtnl_held);
+ return hdd_open_ocb_interface(hdd_ctx, rtnl_held);
- if (adapter == NULL)
- return ERR_PTR(-ENOSPC);
-
- return adapter;
- }
adapter = hdd_open_adapter(hdd_ctx, QDF_STA_MODE, "wlan%d",
wlan_hdd_get_intf_addr(hdd_ctx),
NET_NAME_UNKNOWN, rtnl_held);
if (adapter == NULL)
- return ERR_PTR(-ENOSPC);
+ return -ENOSPC;
+
/* fast roaming is allowed only on first STA, i.e. wlan adapter */
adapter->fast_roaming_allowed = true;
ret = hdd_open_p2p_interface(hdd_ctx, rtnl_held);
if (ret)
- goto err_close_adapter;
+ goto err_close_adapters;
/* Open 802.11p Interface */
if (hdd_ctx->config->dot11p_mode == WLAN_HDD_11P_CONCURRENT) {
- adapter_11p = hdd_open_adapter(hdd_ctx, QDF_OCB_MODE,
- "wlanocb%d",
- wlan_hdd_get_intf_addr(hdd_ctx),
- NET_NAME_UNKNOWN, rtnl_held);
- if (adapter_11p == NULL) {
- hdd_err("Failed to open 802.11p interface");
- goto err_close_adapter;
- }
+ ret = hdd_open_ocb_interface(hdd_ctx, rtnl_held);
+ if (ret)
+ goto err_close_adapters;
}
- return adapter;
+ return 0;
-err_close_adapter:
+err_close_adapters:
hdd_close_all_adapters(hdd_ctx, rtnl_held);
- return ERR_PTR(ret);
+ return ret;
}
/**
@@ -8208,8 +8211,7 @@ static void hdd_register_debug_callback(void)
int hdd_wlan_startup(struct device *dev)
{
QDF_STATUS status;
- hdd_adapter_t *adapter = NULL;
- hdd_context_t *hdd_ctx = NULL;
+ hdd_context_t *hdd_ctx;
int ret;
void *hif_sc;
bool rtnl_held;
@@ -8233,7 +8235,7 @@ int hdd_wlan_startup(struct device *dev)
hdd_green_ap_init(hdd_ctx);
- ret = hdd_wlan_start_modules(hdd_ctx, adapter, false);
+ ret = hdd_wlan_start_modules(hdd_ctx, NULL, false);
if (ret) {
hdd_alert("Failed to start modules: %d", ret);
goto err_exit_nl_srv;
@@ -8267,22 +8269,20 @@ int hdd_wlan_startup(struct device *dev)
rtnl_held = hdd_hold_rtnl_lock();
- adapter = hdd_open_interfaces(hdd_ctx, rtnl_held);
-
- if (IS_ERR(adapter)) {
- hdd_alert("Failed to open interface, adapter is NULL");
- ret = PTR_ERR(adapter);
+ ret = hdd_open_interfaces(hdd_ctx, rtnl_held);
+ if (ret) {
+ hdd_alert("Failed to open interfaces: %d", ret);
goto err_release_rtnl_lock;
}
hif_sc = cds_get_context(QDF_MODULE_ID_HIF);
if (!hif_sc) {
hdd_err("HIF context is NULL");
- goto err_close_adapter;
+ goto err_close_adapters;
}
/*
* target hw version/revision would only be retrieved after firmware
- * donwload
+ * download
*/
hif_get_hw_info(hif_sc, &hdd_ctx->target_hw_version,
&hdd_ctx->target_hw_revision,
@@ -8327,11 +8327,11 @@ int hdd_wlan_startup(struct device *dev)
ret = hdd_register_notifiers(hdd_ctx);
if (ret)
- goto err_debugfs_exit;
+ goto err_close_adapters;
status = wlansap_global_init();
if (QDF_IS_STATUS_ERROR(status))
- goto err_debugfs_exit;
+ goto err_close_adapters;
hdd_runtime_suspend_context_init(hdd_ctx);
memdump_init();
@@ -8364,10 +8364,7 @@ int hdd_wlan_startup(struct device *dev)
complete(&wlan_start_comp);
goto success;
-err_debugfs_exit:
- hdd_debugfs_exit(adapter);
-
-err_close_adapter:
+err_close_adapters:
hdd_close_all_adapters(hdd_ctx, rtnl_held);
err_release_rtnl_lock:
@@ -9703,11 +9700,9 @@ static int hdd_register_req_mode(hdd_context_t *hdd_ctx,
rtnl_held = hdd_hold_rtnl_lock();
switch (mode) {
case QDF_GLOBAL_MISSION_MODE:
- adapter = hdd_open_interfaces(hdd_ctx, rtnl_held);
- if (IS_ERR(adapter)) {
- hdd_alert("Failed to open interface, adapter is NULL");
- ret = -EINVAL;
- }
+ ret = hdd_open_interfaces(hdd_ctx, rtnl_held);
+ if (ret)
+ hdd_alert("Failed to open interfaces: %d", ret);
break;
case QDF_GLOBAL_FTM_MODE:
adapter = hdd_open_adapter(hdd_ctx, QDF_FTM_MODE, "wlan%d",