qcacmn: Add QDF Kmem cache support

Introduce QDF abstraction APIs for handling kmem cache
create/destroy/alloc/free

Change-Id: I46fa8e5e3891a3665fb230b737ef66ff65b5135e
CRs-Fixed: 3274919
此提交包含在:
Amir Patel
2022-08-29 11:45:18 +05:30
提交者 Madan Koyyalamudi
父節點 f9c54b61a3
當前提交 8983dd04f8
共有 3 個檔案被更改,包括 131 行新增0 行删除

查看文件

@@ -102,6 +102,7 @@ typedef struct __qdf_mempool_ctxt {
u_int32_t free_cnt;
} __qdf_mempool_ctxt_t;
typedef struct kmem_cache *qdf_kmem_cache_t;
#endif /* __KERNEL__ */
#define __page_size ((size_t)PAGE_SIZE)
@@ -210,6 +211,11 @@ int __qdf_mempool_init(qdf_device_t osdev, __qdf_mempool_t *pool, int pool_cnt,
void __qdf_mempool_destroy(qdf_device_t osdev, __qdf_mempool_t pool);
void *__qdf_mempool_alloc(qdf_device_t osdev, __qdf_mempool_t pool);
void __qdf_mempool_free(qdf_device_t osdev, __qdf_mempool_t pool, void *buf);
qdf_kmem_cache_t __qdf_kmem_cache_create(const char *cache_name,
qdf_size_t size);
void __qdf_kmem_cache_destroy(qdf_kmem_cache_t cache);
void* __qdf_kmem_cache_alloc(qdf_kmem_cache_t cache);
void __qdf_kmem_cache_free(qdf_kmem_cache_t cache, void *node);
#define QDF_RET_IP ((void *)_RET_IP_)
#define __qdf_mempool_elem_size(_pool) ((_pool)->elem_size)
@@ -606,6 +612,7 @@ __qdf_mem_set_dma_pa(qdf_device_t osdev,
mem_info->pa = dma_pa;
}
/**
* __qdf_mem_alloc_consistent() - allocates consistent qdf memory
* @osdev: OS device handle

查看文件

@@ -3068,3 +3068,74 @@ qdf_dma_addr_t qdf_mem_paddr_from_dmaaddr(qdf_device_t osdev,
qdf_export_symbol(qdf_mem_paddr_from_dmaaddr);
#endif
#ifdef QCA_KMEM_CACHE_SUPPORT
qdf_kmem_cache_t
__qdf_kmem_cache_create(const char *cache_name,
qdf_size_t size)
{
struct kmem_cache *cache;
cache = kmem_cache_create(cache_name, size,
0, 0, NULL);
if (!cache)
return NULL;
return cache;
}
qdf_export_symbol(__qdf_kmem_cache_create);
void
__qdf_kmem_cache_destroy(qdf_kmem_cache_t cache)
{
kmem_cache_destroy(cache);
}
qdf_export_symbol(__qdf_kmem_cache_destroy);
void*
__qdf_kmem_cache_alloc(qdf_kmem_cache_t cache)
{
int flags = GFP_KERNEL;
if (in_interrupt() || irqs_disabled() || in_atomic())
flags = GFP_ATOMIC;
return kmem_cache_alloc(cache, flags);
}
qdf_export_symbol(__qdf_kmem_cache_alloc);
void
__qdf_kmem_cache_free(qdf_kmem_cache_t cache, void *node)
{
kmem_cache_free(cache, node);
}
qdf_export_symbol(__qdf_kmem_cache_free);
#else
qdf_kmem_cache_t
__qdf_kmem_cache_create(const char *cache_name,
qdf_size_t size)
{
return NULL;
}
void
__qdf_kmem_cache_destroy(qdf_kmem_cache_t cache)
{
}
void *
__qdf_kmem_cache_alloc(qdf_kmem_cache_t cache)
{
return NULL;
}
void
__qdf_kmem_cache_free(qdf_kmem_cache_t cache, void *node)
{
}
#endif