Browse Source

qcacmn: Fix for the rx_desc leak

In dp_rx_get_free_desc_list() corrected the
return value in case when the number of requested
rx_desc are not available in the pool

Change-Id: I3de026726e885b8fe707f7c7318cc1936be73e65
CRs-Fixed: 2202247
Chaithanya Garrepalli 7 years ago
parent
commit
8e5e2f86c4
1 changed files with 3 additions and 8 deletions
  1. 3 8
      dp/wifi3.0/dp_rx_desc.c

+ 3 - 8
dp/wifi3.0/dp_rx_desc.c

@@ -115,21 +115,16 @@ uint16_t dp_rx_get_free_desc_list(struct dp_soc *soc, uint32_t pool_id,
 
 	qdf_spin_lock_bh(&soc->rx_desc_mutex[pool_id]);
 
-	*desc_list = rx_desc_pool->freelist;
-
-	if (!(*desc_list)) {
-		qdf_spin_unlock_bh(&soc->rx_desc_mutex[pool_id]);
-		return 0;
-	}
+	*desc_list = *tail = rx_desc_pool->freelist;
 
 	for (count = 0; count < num_descs; count++) {
 
-		*tail = rx_desc_pool->freelist;
-		rx_desc_pool->freelist = rx_desc_pool->freelist->next;
 		if (qdf_unlikely(!rx_desc_pool->freelist)) {
 			qdf_spin_unlock_bh(&soc->rx_desc_mutex[pool_id]);
 			return count;
 		}
+		*tail = rx_desc_pool->freelist;
+		rx_desc_pool->freelist = rx_desc_pool->freelist->next;
 	}
 	(*tail)->next = NULL;
 	qdf_spin_unlock_bh(&soc->rx_desc_mutex[pool_id]);