From 85aae7fa2c4bb7e76cd3d1db48483f7f3dc4b2e2 Mon Sep 17 00:00:00 2001 From: Mukund Madhusudan Atre Date: Wed, 26 Feb 2020 16:51:56 -0800 Subject: [PATCH] msm: camera: fd: Add balanced dynamic allocation for free in init The work data passed as payload to workq is statically allocated, which has kfree call during destroy, this fails during component unbind. Change allocation of work data to dynamic in fd hw manager. CRs-Fixed: 2584631 Change-Id: I0cd2a152d39793ce620e9a9fc2950ee91cefe6bf Signed-off-by: Mukund Madhusudan Atre --- drivers/cam_fd/fd_hw_mgr/cam_fd_hw_mgr.c | 3 +++ drivers/cam_fd/fd_hw_mgr/cam_fd_hw_mgr.h | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/cam_fd/fd_hw_mgr/cam_fd_hw_mgr.c b/drivers/cam_fd/fd_hw_mgr/cam_fd_hw_mgr.c index a293770542ec..f90ffc4eb7c4 100644 --- a/drivers/cam_fd/fd_hw_mgr/cam_fd_hw_mgr.c +++ b/drivers/cam_fd/fd_hw_mgr/cam_fd_hw_mgr.c @@ -2053,6 +2053,9 @@ int cam_fd_hw_mgr_init(struct device_node *of_node, goto detach_smmu; } + g_fd_hw_mgr.work_data = kcalloc(CAM_FD_WORKQ_NUM_TASK, + sizeof(struct cam_fd_mgr_work_data), GFP_KERNEL); + for (i = 0; i < CAM_FD_WORKQ_NUM_TASK; i++) g_fd_hw_mgr.work->task.pool[i].payload = &g_fd_hw_mgr.work_data[i]; diff --git a/drivers/cam_fd/fd_hw_mgr/cam_fd_hw_mgr.h b/drivers/cam_fd/fd_hw_mgr/cam_fd_hw_mgr.h index bbbc77bef6a3..61b3ae3b40a5 100644 --- a/drivers/cam_fd/fd_hw_mgr/cam_fd_hw_mgr.h +++ b/drivers/cam_fd/fd_hw_mgr/cam_fd_hw_mgr.h @@ -180,7 +180,7 @@ struct cam_fd_hw_mgr { struct cam_fd_hw_mgr_ctx ctx_pool[CAM_CTX_MAX]; struct cam_fd_mgr_frame_request frame_req[CAM_CTX_REQ_MAX]; struct cam_req_mgr_core_workq *work; - struct cam_fd_mgr_work_data work_data[CAM_FD_WORKQ_NUM_TASK]; + struct cam_fd_mgr_work_data *work_data; struct cam_fd_query_cap_cmd fd_caps; };