qcacmn: Use page frag cache to allocate page fragments

Use per pdev page frag cache to allocate page fragments
to efficiently use memory.

Change-Id: I8a16175ac72d56bcd9783ff0590710aa779454cb
CRs-Fixed: 3611781
This commit is contained in:
Jeevan Kukkalli
2023-09-13 14:46:01 +05:30
committed by Rahul Choudhary
parent 8993389ed1
commit bafd3ffd85
4 changed files with 10 additions and 1 deletions

View File

@@ -239,7 +239,7 @@ dp_pdev_frag_alloc_and_map(struct dp_soc *dp_soc,
QDF_STATUS ret = QDF_STATUS_E_FAILURE;
(nbuf_frag_info_t->virt_addr).vaddr =
qdf_frag_alloc(NULL, rx_desc_pool->buf_size);
qdf_frag_alloc(&rx_desc_pool->pf_cache, rx_desc_pool->buf_size);
if (!((nbuf_frag_info_t->virt_addr).vaddr)) {
dp_err("Frag alloc failed");
@@ -3234,6 +3234,8 @@ void dp_rx_enable_mon_dest_frag(struct rx_desc_pool *rx_desc_pool,
rx_desc_pool->rx_mon_dest_frag_enable = is_mon_dest_desc;
if (is_mon_dest_desc)
dp_alert("Feature DP_RX_MON_MEM_FRAG for mon_dest is enabled");
else
qdf_frag_cache_drain(&rx_desc_pool->pf_cache);
}
#else
void dp_rx_enable_mon_dest_frag(struct rx_desc_pool *rx_desc_pool,

View File

@@ -267,6 +267,7 @@ void dp_rx_desc_pool_deinit(struct dp_soc *soc,
/* Deinitialize rx mon desr frag flag */
rx_desc_pool->rx_mon_dest_frag_enable = false;
qdf_frag_cache_drain(&rx_desc_pool->pf_cache);
soc->arch_ops.dp_rx_desc_pool_deinit(soc, rx_desc_pool, pool_id);
@@ -463,6 +464,7 @@ void dp_rx_desc_pool_deinit(struct dp_soc *soc,
/* Deinitialize rx mon dest frag flag */
rx_desc_pool->rx_mon_dest_frag_enable = false;
qdf_frag_cache_drain(&rx_desc_pool->pf_cache);
soc->arch_ops.dp_rx_desc_pool_deinit(soc, rx_desc_pool,
pool_id);

View File

@@ -565,6 +565,7 @@ enum dp_ctxt_type {
* @buf_size: Buffer size
* @buf_alignment: Buffer alignment
* @rx_mon_dest_frag_enable: Enable frag processing for mon dest buffer
* @pf_cache: page frag cache
* @desc_type: type of desc this pool serves
*/
struct rx_desc_pool {
@@ -581,6 +582,7 @@ struct rx_desc_pool {
uint16_t buf_size;
uint8_t buf_alignment;
bool rx_mon_dest_frag_enable;
qdf_frag_cache_t pf_cache;
enum qdf_dp_desc_type desc_type;
};

View File

@@ -829,6 +829,9 @@ void __qdf_frag_cache_drain(qdf_frag_cache_t *pf_cache)
{
struct page *page;
if (!pf_cache->va)
return;
page = virt_to_page(pf_cache->va);
__page_frag_cache_drain(page, pf_cache->pagecnt_bias);
memset(pf_cache, 0, sizeof(*pf_cache));