|
@@ -52,11 +52,12 @@ QDF_STATUS wlan_serialization_psoc_disable(struct wlan_objmgr_psoc *psoc)
|
|
if (status != QDF_STATUS_SUCCESS)
|
|
if (status != QDF_STATUS_SUCCESS)
|
|
ser_err("ser cleanning up all timer failed");
|
|
ser_err("ser cleanning up all timer failed");
|
|
|
|
|
|
|
|
+ /* Use lock to free to avoid any race where timer is still in use */
|
|
|
|
+ wlan_serialization_acquire_lock(&ser_soc_obj->timer_lock);
|
|
qdf_mem_free(ser_soc_obj->timers);
|
|
qdf_mem_free(ser_soc_obj->timers);
|
|
ser_soc_obj->timers = NULL;
|
|
ser_soc_obj->timers = NULL;
|
|
ser_soc_obj->max_active_cmds = 0;
|
|
ser_soc_obj->max_active_cmds = 0;
|
|
-
|
|
|
|
- wlan_serialization_destroy_lock(&ser_soc_obj->timer_lock);
|
|
|
|
|
|
+ wlan_serialization_release_lock(&ser_soc_obj->timer_lock);
|
|
error:
|
|
error:
|
|
return status;
|
|
return status;
|
|
}
|
|
}
|
|
@@ -87,7 +88,6 @@ QDF_STATUS wlan_serialization_psoc_enable(struct wlan_objmgr_psoc *psoc)
|
|
goto error;
|
|
goto error;
|
|
}
|
|
}
|
|
|
|
|
|
- wlan_serialization_create_lock(&ser_soc_obj->timer_lock);
|
|
|
|
status = QDF_STATUS_SUCCESS;
|
|
status = QDF_STATUS_SUCCESS;
|
|
|
|
|
|
error:
|
|
error:
|
|
@@ -127,6 +127,7 @@ static QDF_STATUS wlan_serialization_psoc_create_handler(
|
|
ser_err("Obj attach failed");
|
|
ser_err("Obj attach failed");
|
|
goto error;
|
|
goto error;
|
|
}
|
|
}
|
|
|
|
+ wlan_serialization_create_lock(&soc_ser_obj->timer_lock);
|
|
ser_debug("ser psoc obj created");
|
|
ser_debug("ser psoc obj created");
|
|
status = QDF_STATUS_SUCCESS;
|
|
status = QDF_STATUS_SUCCESS;
|
|
|
|
|
|
@@ -331,6 +332,7 @@ wlan_serialization_psoc_destroy_handler(struct wlan_objmgr_psoc *psoc,
|
|
if (status != QDF_STATUS_SUCCESS)
|
|
if (status != QDF_STATUS_SUCCESS)
|
|
ser_err("ser psoc private obj detach failed");
|
|
ser_err("ser psoc private obj detach failed");
|
|
|
|
|
|
|
|
+ wlan_serialization_destroy_lock(&ser_soc_obj->timer_lock);
|
|
ser_debug("ser psoc obj deleted with status %d", status);
|
|
ser_debug("ser psoc obj deleted with status %d", status);
|
|
qdf_mem_free(ser_soc_obj);
|
|
qdf_mem_free(ser_soc_obj);
|
|
|
|
|