From d2247b240320157ee8c9a2346f05ae48a9de7a36 Mon Sep 17 00:00:00 2001 From: Han Gao Date: Sat, 20 Jul 2024 15:44:28 +0800 Subject: [PATCH] vidmem: implement dma_buf_ops release to free buffers This commit implement dma_buf_ops release to free buffer in function _dmabuf_release(struct dma_buf *dmabuf). Default use pr_debug for dynamic debug in macro DEBUG_PRINT. Signed-off-by: xianbing Zhu Change-Id: Id0a5841ccf8459c469034866dd2878e8698a57a4 Signed-off-by: Han Gao --- .../video/video_memory/driver/video_memory.c | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/drivers/video/video_memory/driver/video_memory.c b/drivers/video/video_memory/driver/video_memory.c index 0ecb5d31c..0f8112926 100644 --- a/drivers/video/video_memory/driver/video_memory.c +++ b/drivers/video/video_memory/driver/video_memory.c @@ -184,6 +184,7 @@ #ifndef VIDMEM_DEBUG #define DEBUG_PRINT(...) \ do { \ + pr_debug(__VA_ARGS__);\ } while (0) #else #undef DEBUG_PRINT @@ -205,7 +206,7 @@ struct mem_block bool is_vi_mem; bool cache_en; void *va; - + struct file *filp; union { /* Pointer to a array of pages. */ @@ -261,6 +262,11 @@ getPhysical( IN unsigned int Offset, OUT unsigned long * Physical ); +void +GFP_Free( + IN struct file *filp, + IN unsigned long bus_address + ); static struct file_node * find_and_delete_file_node(struct file *filp) { @@ -701,6 +707,20 @@ OnError: static void _dmabuf_release(struct dma_buf *dmabuf) { + struct mem_block *memBlk = dmabuf->priv; + unsigned long physical; + + if (!memBlk) + return; + if(!memBlk->filp) + { + DEBUG_PRINT("[vidmem] %s, %d: memBlk filp null\n", __func__, __LINE__); + return; + } + getPhysical(memBlk, 0, &physical); + DEBUG_PRINT("[vidmem] %s, %d: free physical %llx\n", __func__, __LINE__,physical); + GFP_Free(memBlk->filp,physical); + } static void *_dmabuf_kmap(struct dma_buf *dmabuf, unsigned long offset) @@ -749,6 +769,7 @@ DMABUF_Export( } memBlk = &mnode->memBlk; + memBlk->filp = filp; dmabuf = memBlk->dmabuf; if (dmabuf == NULL) @@ -818,7 +839,7 @@ DMABUF_Import( } memBlk = &mnode->memBlk; - + memBlk->filp = filp; /* Import dma buf handle. */ memBlk->dmabuf = dma_buf_get(FD); if (!memBlk->dmabuf)