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 <cerf.yu@rock-chips.com>
This commit is contained in:
Yu Qiaowei
2023-09-11 16:45:26 +08:00
committed by Tao Huang
parent 9e5cbd33fc
commit ce094aa86b
3 changed files with 23 additions and 9 deletions

View File

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

View File

@@ -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 */
};

View File

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