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:

committed by
Rahul Choudhary

parent
8993389ed1
commit
bafd3ffd85
@@ -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,
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
};
|
||||
|
||||
|
@@ -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));
|
||||
|
Reference in New Issue
Block a user