From ce094aa86b715922c844815d36f3267cb8ef20e2 Mon Sep 17 00:00:00 2001 From: Yu Qiaowei Date: Mon, 11 Sep 2023 16:45:26 +0800 Subject: [PATCH] video: rockchip: rga3: changing to close acquire_fence_fd in user-space Since GKI disables closing fd in the kernel, the acquire fence fd should be closed in user-space. Update driver version to 1.3.0 Change-Id: I9bf85d6a39b3564332fc00dc9fce01678dc1ce3b Signed-off-by: Yu Qiaowei --- drivers/video/rockchip/rga3/include/rga.h | 11 +++++++---- drivers/video/rockchip/rga3/include/rga_drv.h | 5 +++-- drivers/video/rockchip/rga3/rga_job.c | 16 +++++++++++++--- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/drivers/video/rockchip/rga3/include/rga.h b/drivers/video/rockchip/rga3/include/rga.h index 65a536c9da64..34a9245d9fd5 100644 --- a/drivers/video/rockchip/rga3/include/rga.h +++ b/drivers/video/rockchip/rga3/include/rga.h @@ -567,6 +567,12 @@ struct rga_img_info_t { uint16_t enable; }; +struct rga_feature { + uint32_t global_alpha_en:1; + uint32_t full_csc_clip_en:1; + uint32_t user_close_fence:1; +}; + struct rga_req { /* (enum) process mode sel */ uint8_t render_mode; @@ -689,10 +695,7 @@ struct rga_req { uint8_t fg_global_alpha; uint8_t bg_global_alpha; - struct { - uint32_t global_alpha_en:1; - uint32_t full_csc_clip_en:1; - } feature; + struct rga_feature feature; struct rga_csc_clip full_csc_clip; diff --git a/drivers/video/rockchip/rga3/include/rga_drv.h b/drivers/video/rockchip/rga3/include/rga_drv.h index c683e0a906dc..fff02e176ce7 100644 --- a/drivers/video/rockchip/rga3/include/rga_drv.h +++ b/drivers/video/rockchip/rga3/include/rga_drv.h @@ -86,8 +86,8 @@ #define STR(x) STR_HELPER(x) #define DRIVER_MAJOR_VERISON 1 -#define DRIVER_MINOR_VERSION 2 -#define DRIVER_REVISION_VERSION 27 +#define DRIVER_MINOR_VERSION 3 +#define DRIVER_REVISION_VERSION 0 #define DRIVER_PATCH_VERSION #define DRIVER_VERSION (STR(DRIVER_MAJOR_VERISON) "." STR(DRIVER_MINOR_VERSION) \ @@ -380,6 +380,7 @@ struct rga_request { */ struct mm_struct *current_mm; + struct rga_feature feature; /* TODO: add some common work */ }; diff --git a/drivers/video/rockchip/rga3/rga_job.c b/drivers/video/rockchip/rga3/rga_job.c index 6f7af63b944f..647fc2bd643c 100644 --- a/drivers/video/rockchip/rga3/rga_job.c +++ b/drivers/video/rockchip/rga3/rga_job.c @@ -536,12 +536,21 @@ static int rga_request_add_acquire_fence_callback(int acquire_fence_fd, __func__, acquire_fence_fd); return -EINVAL; } - /* close acquire fence fd */ + + if (!request->feature.user_close_fence) { + /* close acquire fence fd */ +#ifdef CONFIG_NO_GKI #if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0) - close_fd(acquire_fence_fd); + close_fd(acquire_fence_fd); #else - ksys_close(acquire_fence_fd); + ksys_close(acquire_fence_fd); #endif +#else + pr_err("Please update the driver to v1.2.28 to prevent acquire_fence_fd leaks."); + return -EFAULT; +#endif + } + ret = rga_dma_fence_get_status(acquire_fence); if (ret < 0) { @@ -972,6 +981,7 @@ struct rga_request *rga_request_config(struct rga_user_request *user_request) request->sync_mode = user_request->sync_mode; request->mpi_config_flags = user_request->mpi_config_flags; request->acquire_fence_fd = user_request->acquire_fence_fd; + request->feature = task_list[0].feature; spin_unlock_irqrestore(&request->lock, flags);