qcacld-3.0: call complete_all instead of complete()
Currently userspace waits on the dev/wlan node to know when the driver loading or SSR is successful. If 2 different userspace threads wait on this dev/wlan node then one thread is timing out as driver is completing the wait using the complete() API. To fix this issue, use complete_all() instead of complete() API Change-Id: Iedbd8dd78bead4e80880112b4164135e195ec42c CRs-Fixed: 3215173
This commit is contained in:

committed by
Madan Koyyalamudi

parent
8b88cdcc1f
commit
9cfe0d8174
@@ -677,8 +677,7 @@ hdd_mic_init_work(struct hdd_adapter *adapter)
|
|||||||
void hdd_start_complete(int ret)
|
void hdd_start_complete(int ret)
|
||||||
{
|
{
|
||||||
wlan_start_ret_val = ret;
|
wlan_start_ret_val = ret;
|
||||||
|
complete_all(&wlan_start_comp);
|
||||||
complete(&wlan_start_comp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -17955,20 +17954,21 @@ static ssize_t wlan_hdd_state_ctrl_param_write(struct file *filp,
|
|||||||
bool is_wait_for_ready = false;
|
bool is_wait_for_ready = false;
|
||||||
bool is_wlan_force_disabled;
|
bool is_wlan_force_disabled;
|
||||||
|
|
||||||
|
hdd_enter();
|
||||||
|
|
||||||
id = hdd_validate_wlan_string(user_buf);
|
id = hdd_validate_wlan_string(user_buf);
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case WLAN_OFF_STR:
|
case WLAN_OFF_STR:
|
||||||
pr_info("Wifi turning off from UI\n");
|
hdd_info("Wifi turning off from UI\n");
|
||||||
hdd_inform_wifi_off();
|
hdd_inform_wifi_off();
|
||||||
goto exit;
|
goto exit;
|
||||||
case WLAN_ON_STR:
|
case WLAN_ON_STR:
|
||||||
pr_info("Wifi Turning On from UI\n");
|
hdd_info("Wifi Turning On from UI\n");
|
||||||
break;
|
break;
|
||||||
case WLAN_WAIT_FOR_READY_STR:
|
case WLAN_WAIT_FOR_READY_STR:
|
||||||
is_wait_for_ready = true;
|
is_wait_for_ready = true;
|
||||||
pr_info("Wifi wait for ready from UI\n");
|
hdd_info("Wifi wait for ready from UI\n");
|
||||||
break;
|
break;
|
||||||
case WLAN_ENABLE_STR:
|
case WLAN_ENABLE_STR:
|
||||||
hdd_nofl_debug("Received WiFi enable from framework\n");
|
hdd_nofl_debug("Received WiFi enable from framework\n");
|
||||||
@@ -18010,7 +18010,6 @@ static ssize_t wlan_hdd_state_ctrl_param_write(struct file *filp,
|
|||||||
|
|
||||||
if (is_wait_for_ready)
|
if (is_wait_for_ready)
|
||||||
return count;
|
return count;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Flush idle shutdown work for cases to synchronize the wifi on
|
* Flush idle shutdown work for cases to synchronize the wifi on
|
||||||
* during the idle shutdown.
|
* during the idle shutdown.
|
||||||
@@ -18043,6 +18042,7 @@ static ssize_t wlan_hdd_state_ctrl_param_write(struct file *filp,
|
|||||||
hdd_ctx->is_wlan_disabled = false;
|
hdd_ctx->is_wlan_disabled = false;
|
||||||
}
|
}
|
||||||
exit:
|
exit:
|
||||||
|
hdd_exit();
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user