From fb117a895c2e6c92525828ab2cc96a78590d23db Mon Sep 17 00:00:00 2001 From: Yu Qiaowei Date: Tue, 10 Oct 2023 11:19:40 +0800 Subject: [PATCH] video: rockchip: rga3: fix multi-process import virtual address error When different processes import buffers, the same virtual address may exist, so current needs to be used for judgment. Change-Id: If522075de57d4e4fb02dbf5dfcaca4f23fb22de9 Signed-off-by: Yu Qiaowei --- drivers/video/rockchip/rga3/rga_mm.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/video/rockchip/rga3/rga_mm.c b/drivers/video/rockchip/rga3/rga_mm.c index 80a7bb3396ca..94b54d45af08 100644 --- a/drivers/video/rockchip/rga3/rga_mm.c +++ b/drivers/video/rockchip/rga3/rga_mm.c @@ -842,7 +842,8 @@ static int rga_mm_handle_remove(int id, void *ptr, void *data) static struct rga_internal_buffer * rga_mm_lookup_external(struct rga_mm *mm_session, - struct rga_external_buffer *external_buffer) + struct rga_external_buffer *external_buffer, + struct mm_struct *current_mm) { int id; struct dma_buf *dma_buf = NULL; @@ -875,8 +876,12 @@ rga_mm_lookup_external(struct rga_mm *mm_session, continue; if (temp_buffer->virt_addr->addr == external_buffer->memory) { - output_buffer = temp_buffer; - break; + if (temp_buffer->current_mm == current_mm) { + output_buffer = temp_buffer; + break; + } + + continue; } } @@ -2028,7 +2033,7 @@ uint32_t rga_mm_import_buffer(struct rga_external_buffer *external_buffer, mutex_lock(&mm->lock); /* first, Check whether to rga_mm */ - internal_buffer = rga_mm_lookup_external(mm, external_buffer); + internal_buffer = rga_mm_lookup_external(mm, external_buffer, current->mm); if (!IS_ERR_OR_NULL(internal_buffer)) { kref_get(&internal_buffer->refcount);