mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
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:
@@ -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) \
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user