qcacld-3.0: Move memory free out of spinlock in ol_tso_seg_list_deinit
Assign the list to null inside the spinlock such that no one else can access the free nodes. Then free the list outside of the spinlock. This spinlock was causing a watchdog bark. Change-Id: I9a34c8c3ea8451004814bcabfcbb81744d71ec45 CRs-Fixed: 1052458
Esse commit está contido em:

commit de
Vishwajith Upendra

pai
f09b50d888
commit
5bf7482658
@@ -1882,18 +1882,19 @@ void ol_tso_seg_list_deinit(struct ol_txrx_pdev_t *pdev)
|
|||||||
|
|
||||||
qdf_spin_lock_bh(&pdev->tso_seg_pool.tso_mutex);
|
qdf_spin_lock_bh(&pdev->tso_seg_pool.tso_mutex);
|
||||||
c_element = pdev->tso_seg_pool.freelist;
|
c_element = pdev->tso_seg_pool.freelist;
|
||||||
for (i = 0; i < pdev->tso_seg_pool.pool_size; i++) {
|
i = pdev->tso_seg_pool.pool_size;
|
||||||
temp = c_element->next;
|
|
||||||
qdf_mem_free(c_element);
|
|
||||||
c_element = temp;
|
|
||||||
if (!c_element)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
pdev->tso_seg_pool.freelist = NULL;
|
pdev->tso_seg_pool.freelist = NULL;
|
||||||
pdev->tso_seg_pool.num_free = 0;
|
pdev->tso_seg_pool.num_free = 0;
|
||||||
pdev->tso_seg_pool.pool_size = 0;
|
pdev->tso_seg_pool.pool_size = 0;
|
||||||
|
|
||||||
qdf_spin_unlock_bh(&pdev->tso_seg_pool.tso_mutex);
|
qdf_spin_unlock_bh(&pdev->tso_seg_pool.tso_mutex);
|
||||||
qdf_spinlock_destroy(&pdev->tso_seg_pool.tso_mutex);
|
qdf_spinlock_destroy(&pdev->tso_seg_pool.tso_mutex);
|
||||||
|
|
||||||
|
while (i-- > 0 && c_element) {
|
||||||
|
temp = c_element->next;
|
||||||
|
qdf_mem_free(c_element);
|
||||||
|
c_element = temp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif /* FEATURE_TSO */
|
#endif /* FEATURE_TSO */
|
||||||
|
Referência em uma nova issue
Block a user