diff --git a/dp/wifi3.0/dp_tx_desc.h b/dp/wifi3.0/dp_tx_desc.h index 8ecb903858..720ec6ad15 100644 --- a/dp/wifi3.0/dp_tx_desc.h +++ b/dp/wifi3.0/dp_tx_desc.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -536,25 +536,25 @@ static inline struct dp_tx_desc_s *dp_tx_desc_alloc(struct dp_soc *soc, uint8_t desc_pool_id) { struct dp_tx_desc_s *tx_desc = NULL; + struct dp_tx_desc_pool_s *pool = &soc->tx_desc[desc_pool_id]; - TX_DESC_LOCK_LOCK(&soc->tx_desc[desc_pool_id].lock); + TX_DESC_LOCK_LOCK(&pool->lock); - tx_desc = soc->tx_desc[desc_pool_id].freelist; + tx_desc = pool->freelist; /* Pool is exhausted */ if (!tx_desc) { - TX_DESC_LOCK_UNLOCK(&soc->tx_desc[desc_pool_id].lock); + TX_DESC_LOCK_UNLOCK(&pool->lock); return NULL; } - soc->tx_desc[desc_pool_id].freelist = - soc->tx_desc[desc_pool_id].freelist->next; - soc->tx_desc[desc_pool_id].num_allocated++; - soc->tx_desc[desc_pool_id].num_free--; + pool->freelist = pool->freelist->next; + pool->num_allocated++; + pool->num_free--; tx_desc->flags = DP_TX_DESC_FLAG_ALLOCATED; - TX_DESC_LOCK_UNLOCK(&soc->tx_desc[desc_pool_id].lock); + TX_DESC_LOCK_UNLOCK(&pool->lock); return tx_desc; } @@ -575,20 +575,21 @@ static inline struct dp_tx_desc_s *dp_tx_desc_alloc_multiple( { struct dp_tx_desc_s *c_desc = NULL, *h_desc = NULL; uint8_t count; + struct dp_tx_desc_pool_s *pool = &soc->tx_desc[desc_pool_id]; - TX_DESC_LOCK_LOCK(&soc->tx_desc[desc_pool_id].lock); + TX_DESC_LOCK_LOCK(&pool->lock); if ((num_requested == 0) || - (soc->tx_desc[desc_pool_id].num_free < num_requested)) { - TX_DESC_LOCK_UNLOCK(&soc->tx_desc[desc_pool_id].lock); + (pool->num_free < num_requested)) { + TX_DESC_LOCK_UNLOCK(&pool->lock); QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, "%s, No Free Desc: Available(%d) num_requested(%d)", - __func__, soc->tx_desc[desc_pool_id].num_free, + __func__, pool->num_free, num_requested); return NULL; } - h_desc = soc->tx_desc[desc_pool_id].freelist; + h_desc = pool->freelist; /* h_desc should never be NULL since num_free > requested */ qdf_assert_always(h_desc); @@ -598,12 +599,12 @@ static inline struct dp_tx_desc_s *dp_tx_desc_alloc_multiple( c_desc->flags = DP_TX_DESC_FLAG_ALLOCATED; c_desc = c_desc->next; } - soc->tx_desc[desc_pool_id].num_free -= count; - soc->tx_desc[desc_pool_id].num_allocated += count; - soc->tx_desc[desc_pool_id].freelist = c_desc->next; + pool->num_free -= count; + pool->num_allocated += count; + pool->freelist = c_desc->next; c_desc->next = NULL; - TX_DESC_LOCK_UNLOCK(&soc->tx_desc[desc_pool_id].lock); + TX_DESC_LOCK_UNLOCK(&pool->lock); return h_desc; } @@ -618,19 +619,20 @@ static inline void dp_tx_desc_free(struct dp_soc *soc, struct dp_tx_desc_s *tx_desc, uint8_t desc_pool_id) { - TX_DESC_LOCK_LOCK(&soc->tx_desc[desc_pool_id].lock); - + struct dp_tx_desc_pool_s *pool = NULL; tx_desc->vdev = NULL; tx_desc->nbuf = NULL; tx_desc->flags = 0; - tx_desc->next = soc->tx_desc[desc_pool_id].freelist; - soc->tx_desc[desc_pool_id].freelist = tx_desc; - soc->tx_desc[desc_pool_id].num_allocated--; - soc->tx_desc[desc_pool_id].num_free++; - - TX_DESC_LOCK_UNLOCK(&soc->tx_desc[desc_pool_id].lock); + pool = &soc->tx_desc[desc_pool_id]; + TX_DESC_LOCK_LOCK(&pool->lock); + tx_desc->next = pool->freelist; + pool->freelist = tx_desc; + pool->num_allocated--; + pool->num_free++; + TX_DESC_LOCK_UNLOCK(&pool->lock); } + #endif /* QCA_LL_TX_FLOW_CONTROL_V2 */ #ifdef QCA_DP_TX_DESC_ID_CHECK