video: rockchip: rga3: fix buffer_handle leak on abnormal exit

Update driver version to 1.2.23

Signed-off-by: Yu Qiaowei <cerf.yu@rock-chips.com>
Change-Id: I011ea7aef6428969080f7835d1358e4b772b9b8f
This commit is contained in:
Yu Qiaowei
2022-12-09 10:46:16 +08:00
committed by Tao Huang
parent 8097063b30
commit 159107474b
2 changed files with 20 additions and 18 deletions

View File

@@ -87,7 +87,7 @@
#define DRIVER_MAJOR_VERISON 1
#define DRIVER_MINOR_VERSION 2
#define DRIVER_REVISION_VERSION 22
#define DRIVER_REVISION_VERSION 23
#define DRIVER_PATCH_VERSION
#define DRIVER_VERSION (STR(DRIVER_MAJOR_VERISON) "." STR(DRIVER_MINOR_VERSION) \

View File

@@ -1417,7 +1417,7 @@ static int rga_mm_get_buffer(struct rga_mm *mm,
ret = rga_mm_sync_dma_sg_for_device(internal_buffer, job, dir);
if (ret < 0) {
pr_err("sync sgt for device error!\n");
return ret;
goto put_internal_buffer;
}
}
@@ -1446,6 +1446,22 @@ static void rga_mm_put_buffer(struct rga_mm *mm,
mutex_unlock(&mm->lock);
}
static void rga_mm_put_channel_handle_info(struct rga_mm *mm,
struct rga_job *job,
struct rga_job_buffer *job_buf,
enum dma_data_direction dir)
{
if (job_buf->y_addr)
rga_mm_put_buffer(mm, job, job_buf->y_addr, dir);
if (job_buf->uv_addr)
rga_mm_put_buffer(mm, job, job_buf->uv_addr, dir);
if (job_buf->v_addr)
rga_mm_put_buffer(mm, job, job_buf->v_addr, dir);
if (job_buf->page_table)
free_pages((unsigned long)job_buf->page_table, job_buf->order);
}
static int rga_mm_get_channel_handle_info(struct rga_mm *mm,
struct rga_job *job,
struct rga_img_info_t *img,
@@ -1514,6 +1530,8 @@ static int rga_mm_get_channel_handle_info(struct rga_mm *mm,
ret = rga_mm_set_mmu_base(job, img, job_buf);
if (ret < 0) {
pr_err("Can't set RGA2 MMU_BASE from handle!\n");
rga_mm_put_channel_handle_info(mm, job, job_buf, dir);
return ret;
}
}
@@ -1521,22 +1539,6 @@ static int rga_mm_get_channel_handle_info(struct rga_mm *mm,
return 0;
}
static void rga_mm_put_channel_handle_info(struct rga_mm *mm,
struct rga_job *job,
struct rga_job_buffer *job_buf,
enum dma_data_direction dir)
{
if (job_buf->y_addr)
rga_mm_put_buffer(mm, job, job_buf->y_addr, dir);
if (job_buf->uv_addr)
rga_mm_put_buffer(mm, job, job_buf->uv_addr, dir);
if (job_buf->v_addr)
rga_mm_put_buffer(mm, job, job_buf->v_addr, dir);
if (job_buf->page_table)
free_pages((unsigned long)job_buf->page_table, job_buf->order);
}
static int rga_mm_get_handle_info(struct rga_job *job)
{
int ret = 0;