mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 16:16:15 -04:00
qcacld-3.0: Fix deadlock in hdd_adapter_lock usage
hdd_adapter_lock is acquired from MC thread and hif_napi soft IRQ context so it should be acquired using spin_lock_bh such that when MC thread is holding the lock soft IRQ can't pre-empt it and lead to deadlock Change-Id: Iee4a4905bf7cc09cba9bd26f416d505eb47a5c96 CRs-Fixed: 981886
This commit is contained in:
parent
7e16b0a68f
commit
dd4dd08b2c
1 changed files with 12 additions and 12 deletions
|
|
@ -3272,10 +3272,10 @@ QDF_STATUS hdd_get_front_adapter(hdd_context_t *hdd_ctx,
|
|||
hdd_adapter_list_node_t **padapterNode)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
qdf_spin_lock(&hdd_ctx->hdd_adapter_lock);
|
||||
qdf_spin_lock_bh(&hdd_ctx->hdd_adapter_lock);
|
||||
status = qdf_list_peek_front(&hdd_ctx->hddAdapters,
|
||||
(qdf_list_node_t **) padapterNode);
|
||||
qdf_spin_unlock(&hdd_ctx->hdd_adapter_lock);
|
||||
qdf_spin_unlock_bh(&hdd_ctx->hdd_adapter_lock);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
@ -3284,12 +3284,12 @@ QDF_STATUS hdd_get_next_adapter(hdd_context_t *hdd_ctx,
|
|||
hdd_adapter_list_node_t **pNextAdapterNode)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
qdf_spin_lock(&hdd_ctx->hdd_adapter_lock);
|
||||
qdf_spin_lock_bh(&hdd_ctx->hdd_adapter_lock);
|
||||
status = qdf_list_peek_next(&hdd_ctx->hddAdapters,
|
||||
(qdf_list_node_t *) adapterNode,
|
||||
(qdf_list_node_t **) pNextAdapterNode);
|
||||
|
||||
qdf_spin_unlock(&hdd_ctx->hdd_adapter_lock);
|
||||
qdf_spin_unlock_bh(&hdd_ctx->hdd_adapter_lock);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
@ -3297,10 +3297,10 @@ QDF_STATUS hdd_remove_adapter(hdd_context_t *hdd_ctx,
|
|||
hdd_adapter_list_node_t *adapterNode)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
qdf_spin_lock(&hdd_ctx->hdd_adapter_lock);
|
||||
qdf_spin_lock_bh(&hdd_ctx->hdd_adapter_lock);
|
||||
status = qdf_list_remove_node(&hdd_ctx->hddAdapters,
|
||||
&adapterNode->node);
|
||||
qdf_spin_unlock(&hdd_ctx->hdd_adapter_lock);
|
||||
qdf_spin_unlock_bh(&hdd_ctx->hdd_adapter_lock);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
@ -3308,10 +3308,10 @@ QDF_STATUS hdd_remove_front_adapter(hdd_context_t *hdd_ctx,
|
|||
hdd_adapter_list_node_t **padapterNode)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
qdf_spin_lock(&hdd_ctx->hdd_adapter_lock);
|
||||
qdf_spin_lock_bh(&hdd_ctx->hdd_adapter_lock);
|
||||
status = qdf_list_remove_front(&hdd_ctx->hddAdapters,
|
||||
(qdf_list_node_t **) padapterNode);
|
||||
qdf_spin_unlock(&hdd_ctx->hdd_adapter_lock);
|
||||
qdf_spin_unlock_bh(&hdd_ctx->hdd_adapter_lock);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
@ -3319,10 +3319,10 @@ QDF_STATUS hdd_add_adapter_back(hdd_context_t *hdd_ctx,
|
|||
hdd_adapter_list_node_t *adapterNode)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
qdf_spin_lock(&hdd_ctx->hdd_adapter_lock);
|
||||
qdf_spin_lock_bh(&hdd_ctx->hdd_adapter_lock);
|
||||
status = qdf_list_insert_back(&hdd_ctx->hddAdapters,
|
||||
(qdf_list_node_t *) adapterNode);
|
||||
qdf_spin_unlock(&hdd_ctx->hdd_adapter_lock);
|
||||
qdf_spin_unlock_bh(&hdd_ctx->hdd_adapter_lock);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
@ -3330,10 +3330,10 @@ QDF_STATUS hdd_add_adapter_front(hdd_context_t *hdd_ctx,
|
|||
hdd_adapter_list_node_t *adapterNode)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
qdf_spin_lock(&hdd_ctx->hdd_adapter_lock);
|
||||
qdf_spin_lock_bh(&hdd_ctx->hdd_adapter_lock);
|
||||
status = qdf_list_insert_front(&hdd_ctx->hddAdapters,
|
||||
(qdf_list_node_t *) adapterNode);
|
||||
qdf_spin_unlock(&hdd_ctx->hdd_adapter_lock);
|
||||
qdf_spin_unlock_bh(&hdd_ctx->hdd_adapter_lock);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue