Browse Source

qcacld-3.0: Avoid deinit of TSO Seg lists if not initialized during pdev attach

Fix to avoid deinit of tso seg list and tso num seg list
during pdev detach if the lists are not initialized during
pdev post attach.

Currently, if htt_attach() fails as part of ol_txrx_post_pdev_attach(),
then it immediately returns from the function and not initializes
tso seg lists and during pdev_detach(), host tries to de-initialize
tso seg list and end up in a crash.

CRs-Fixed: 1113347
Change-Id: I91e077496a15a69edb9d41574f846bc3d1b73b31
Poddar, Siddarth 8 năm trước cách đây
mục cha
commit
b1200e37af
1 tập tin đã thay đổi với 10 bổ sung0 xóa
  1. 10 0
      core/dp/txrx/ol_tx.c

+ 10 - 0
core/dp/txrx/ol_tx.c

@@ -1867,6 +1867,11 @@ void ol_tso_seg_list_deinit(struct ol_txrx_pdev_t *pdev)
 	struct qdf_tso_seg_elem_t *c_element;
 	struct qdf_tso_seg_elem_t *temp;
 
+	/* pool size 0 implies that tso seg list is not initialised*/
+	if (pdev->tso_seg_pool.freelist == NULL &&
+	    pdev->tso_seg_pool.pool_size == 0)
+		return;
+
 	qdf_spin_lock_bh(&pdev->tso_seg_pool.tso_mutex);
 	c_element = pdev->tso_seg_pool.freelist;
 	i = pdev->tso_seg_pool.pool_size;
@@ -1947,6 +1952,11 @@ void ol_tso_num_seg_list_deinit(struct ol_txrx_pdev_t *pdev)
 	struct qdf_tso_num_seg_elem_t *c_element;
 	struct qdf_tso_num_seg_elem_t *temp;
 
+	/* pool size 0 implies that tso num seg list is not initialised*/
+	if (pdev->tso_num_seg_pool.freelist == NULL &&
+	    pdev->tso_num_seg_pool.num_seg_pool_size == 0)
+		return;
+
 	qdf_spin_lock_bh(&pdev->tso_num_seg_pool.tso_num_seg_mutex);
 	c_element = pdev->tso_num_seg_pool.freelist;
 	i = pdev->tso_num_seg_pool.num_seg_pool_size;