qcacmn: Add debug log in dp_tx_delete_flow_pool

Add debug log in dp_tx_delete_flow_pool() to know if
all available tx descriptors have been released to the
pool or not

Change-Id: Id0684effd5c5c0b531bb2d4b3f08d929aaa85b5c
CRs-Fixed: 2463632
Tento commit je obsažen v:
Varun Reddy Yeturu
2019-06-06 15:37:21 -07:00
odevzdal nshrivas
rodič 1d4ac98ffe
revize 83a31a34b0
2 změnil soubory, kde provedl 19 přidání a 24 odebrání

Zobrazit soubor

@@ -107,8 +107,7 @@ QDF_STATUS dp_tx_desc_pool_alloc(struct dp_soc *soc, uint8_t pool_id,
desc_size, num_elem, desc_size, num_elem,
0, true); 0, true);
if (!tx_desc_pool->desc_pages.num_pages) { if (!tx_desc_pool->desc_pages.num_pages) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, dp_err("Multi page alloc fail, tx desc");
"Multi page alloc fail, tx desc");
goto fail_exit; goto fail_exit;
} }
@@ -120,8 +119,7 @@ QDF_STATUS dp_tx_desc_pool_alloc(struct dp_soc *soc, uint8_t pool_id,
if (qdf_mem_multi_page_link(soc->osdev, if (qdf_mem_multi_page_link(soc->osdev,
&tx_desc_pool->desc_pages, &tx_desc_pool->desc_pages,
desc_size, num_elem, true)) { desc_size, num_elem, true)) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, dp_err("invalid tx desc allocation - overflow num link");
"invalid tx desc allocation - overflow num link");
goto free_tx_desc; goto free_tx_desc;
} }

Zobrazit soubor

@@ -256,8 +256,7 @@ struct dp_tx_desc_pool_s *dp_tx_create_flow_pool(struct dp_soc *soc,
uint32_t start_threshold; uint32_t start_threshold;
if (flow_pool_id >= MAX_TXDESC_POOLS) { if (flow_pool_id >= MAX_TXDESC_POOLS) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, dp_err("invalid flow_pool_id %d", flow_pool_id);
"%s: invalid flow_pool_id %d", __func__, flow_pool_id);
return NULL; return NULL;
} }
pool = &soc->tx_desc[flow_pool_id]; pool = &soc->tx_desc[flow_pool_id];
@@ -265,6 +264,8 @@ struct dp_tx_desc_pool_s *dp_tx_create_flow_pool(struct dp_soc *soc,
if ((pool->status != FLOW_POOL_INACTIVE) || pool->pool_create_cnt) { if ((pool->status != FLOW_POOL_INACTIVE) || pool->pool_create_cnt) {
dp_tx_flow_pool_reattach(pool); dp_tx_flow_pool_reattach(pool);
qdf_spin_unlock_bh(&pool->flow_pool_lock); qdf_spin_unlock_bh(&pool->flow_pool_lock);
dp_err("cannot alloc desc, status=%d, create_cnt=%d",
pool->status, pool->pool_create_cnt);
return pool; return pool;
} }
@@ -307,31 +308,32 @@ int dp_tx_delete_flow_pool(struct dp_soc *soc, struct dp_tx_desc_pool_s *pool,
bool force) bool force)
{ {
if (!soc || !pool) { if (!soc || !pool) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, dp_err("pool or soc is NULL");
"%s: pool or soc is NULL", __func__);
QDF_ASSERT(0); QDF_ASSERT(0);
return ENOMEM; return ENOMEM;
} }
dp_info("pool create_cnt=%d, avail_desc=%d, size=%d, status=%d",
pool->pool_create_cnt, pool->avail_desc,
pool->pool_size, pool->status);
qdf_spin_lock_bh(&pool->flow_pool_lock); qdf_spin_lock_bh(&pool->flow_pool_lock);
if (!pool->pool_create_cnt) { if (!pool->pool_create_cnt) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
"flow pool either not created or alread deleted");
qdf_spin_unlock_bh(&pool->flow_pool_lock); qdf_spin_unlock_bh(&pool->flow_pool_lock);
dp_err("flow pool either not created or alread deleted");
return -ENOENT; return -ENOENT;
} }
pool->pool_create_cnt--; pool->pool_create_cnt--;
if (pool->pool_create_cnt) { if (pool->pool_create_cnt) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
"%s: pool is still attached, pending detach %d",
__func__, pool->pool_create_cnt);
qdf_spin_unlock_bh(&pool->flow_pool_lock); qdf_spin_unlock_bh(&pool->flow_pool_lock);
dp_err("pool is still attached, pending detach %d",
pool->pool_create_cnt);
return -EAGAIN; return -EAGAIN;
} }
if (pool->avail_desc < pool->pool_size) { if (pool->avail_desc < pool->pool_size) {
pool->status = FLOW_POOL_INVALID; pool->status = FLOW_POOL_INVALID;
qdf_spin_unlock_bh(&pool->flow_pool_lock); qdf_spin_unlock_bh(&pool->flow_pool_lock);
dp_err("avail desc less than pool size");
return -EAGAIN; return -EAGAIN;
} }
@@ -418,13 +420,11 @@ QDF_STATUS dp_tx_flow_pool_map_handler(struct dp_pdev *pdev, uint8_t flow_id,
enum htt_flow_type type = flow_type; enum htt_flow_type type = flow_type;
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO, dp_info("flow_id %d flow_type %d flow_pool_id %d flow_pool_size %d",
"%s: flow_id %d flow_type %d flow_pool_id %d flow_pool_size %d", flow_id, flow_type, flow_pool_id, flow_pool_size);
__func__, flow_id, flow_type, flow_pool_id, flow_pool_size);
if (qdf_unlikely(!soc)) { if (qdf_unlikely(!soc)) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, dp_err("soc is NULL");
"%s: soc is NULL", __func__);
return QDF_STATUS_E_FAULT; return QDF_STATUS_E_FAULT;
} }
soc->pool_stats.pool_map_count++; soc->pool_stats.pool_map_count++;
@@ -432,9 +432,8 @@ QDF_STATUS dp_tx_flow_pool_map_handler(struct dp_pdev *pdev, uint8_t flow_id,
pool = dp_tx_create_flow_pool(soc, flow_pool_id, pool = dp_tx_create_flow_pool(soc, flow_pool_id,
flow_pool_size); flow_pool_size);
if (!pool) { if (!pool) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, dp_err("creation of flow_pool %d size %d failed",
"%s: creation of flow_pool %d size %d failed", flow_pool_id, flow_pool_size);
__func__, flow_pool_id, flow_pool_size);
return QDF_STATUS_E_RESOURCES; return QDF_STATUS_E_RESOURCES;
} }
@@ -444,9 +443,7 @@ QDF_STATUS dp_tx_flow_pool_map_handler(struct dp_pdev *pdev, uint8_t flow_id,
dp_tx_flow_pool_vdev_map(pdev, pool, flow_id); dp_tx_flow_pool_vdev_map(pdev, pool, flow_id);
break; break;
default: default:
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, dp_err("flow type %d not supported", type);
"%s: flow type %d not supported !!!",
__func__, type);
break; break;
} }