qcacld-3.0: Fix free_pool referencing in hdd_lro_desc_find
list_empty api does not work correctly on copied list head. Need to point to the original free_pool memory so that the spinlocking and list management apis work as expected on the original memory. Change-Id: I631466d156c83f70cb6ea06eec0e361081f294cc CRs-Fixed: 1070258
This commit is contained in:

gecommit door
qcabuildsw

bovenliggende
987ce39054
commit
2359ca00da
@@ -214,7 +214,7 @@ static int hdd_lro_desc_find(hdd_adapter_t *adapter,
|
|||||||
struct hdd_lro_desc_table *lro_hash_table;
|
struct hdd_lro_desc_table *lro_hash_table;
|
||||||
struct list_head *ptr;
|
struct list_head *ptr;
|
||||||
struct hdd_lro_desc_entry *entry;
|
struct hdd_lro_desc_entry *entry;
|
||||||
struct hdd_lro_desc_pool free_pool;
|
struct hdd_lro_desc_pool *free_pool;
|
||||||
struct hdd_lro_desc_info *desc_info = &adapter->lro_info.lro_desc_info;
|
struct hdd_lro_desc_info *desc_info = &adapter->lro_info.lro_desc_info;
|
||||||
|
|
||||||
*lro_desc = NULL;
|
*lro_desc = NULL;
|
||||||
@@ -245,24 +245,19 @@ static int hdd_lro_desc_find(hdd_adapter_t *adapter,
|
|||||||
qdf_spin_unlock_bh(&desc_info->lro_hash_lock);
|
qdf_spin_unlock_bh(&desc_info->lro_hash_lock);
|
||||||
|
|
||||||
/* no existing flow found, a new LRO desc needs to be allocated */
|
/* no existing flow found, a new LRO desc needs to be allocated */
|
||||||
free_pool = adapter->lro_info.lro_desc_info.lro_desc_pool;
|
free_pool = &adapter->lro_info.lro_desc_info.lro_desc_pool;
|
||||||
qdf_spin_lock_bh(&free_pool.lro_pool_lock);
|
qdf_spin_lock_bh(&free_pool->lro_pool_lock);
|
||||||
entry = list_first_entry_or_null(
|
entry = list_first_entry_or_null(
|
||||||
&free_pool.lro_free_list_head,
|
&free_pool->lro_free_list_head,
|
||||||
struct hdd_lro_desc_entry, lro_node);
|
struct hdd_lro_desc_entry, lro_node);
|
||||||
if (NULL == entry) {
|
if (NULL == entry) {
|
||||||
hdd_err("Could not allocate LRO desc!");
|
hdd_err("Could not allocate LRO desc!");
|
||||||
qdf_spin_unlock_bh(&free_pool.lro_pool_lock);
|
qdf_spin_unlock_bh(&free_pool->lro_pool_lock);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (list_empty(&entry->lro_node)) {
|
|
||||||
hdd_err("Reached max supported lro_desc range\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
list_del_init(&entry->lro_node);
|
list_del_init(&entry->lro_node);
|
||||||
qdf_spin_unlock_bh(&free_pool.lro_pool_lock);
|
qdf_spin_unlock_bh(&free_pool->lro_pool_lock);
|
||||||
|
|
||||||
if (NULL == entry->lro_desc) {
|
if (NULL == entry->lro_desc) {
|
||||||
hdd_err("entry->lro_desc is NULL!\n");
|
hdd_err("entry->lro_desc is NULL!\n");
|
||||||
|
Verwijs in nieuw issue
Block a user