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 <cerf.yu@rock-chips.com>
This commit is contained in:
Yu Qiaowei
2023-10-10 11:19:40 +08:00
committed by 余乔伟
parent 4d0c0e51b6
commit fb117a895c

View File

@@ -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);