瀏覽代碼

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 <[email protected]>
Mukund Madhusudan Atre 5 年之前
父節點
當前提交
85aae7fa2c
共有 2 個文件被更改,包括 4 次插入1 次删除
  1. 3 0
      drivers/cam_fd/fd_hw_mgr/cam_fd_hw_mgr.c
  2. 1 1
      drivers/cam_fd/fd_hw_mgr/cam_fd_hw_mgr.h

+ 3 - 0
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;
 		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++)
 	for (i = 0; i < CAM_FD_WORKQ_NUM_TASK; i++)
 		g_fd_hw_mgr.work->task.pool[i].payload =
 		g_fd_hw_mgr.work->task.pool[i].payload =
 			&g_fd_hw_mgr.work_data[i];
 			&g_fd_hw_mgr.work_data[i];

+ 1 - 1
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_hw_mgr_ctx           ctx_pool[CAM_CTX_MAX];
 	struct cam_fd_mgr_frame_request    frame_req[CAM_CTX_REQ_MAX];
 	struct cam_fd_mgr_frame_request    frame_req[CAM_CTX_REQ_MAX];
 	struct cam_req_mgr_core_workq     *work;
 	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;
 	struct cam_fd_query_cap_cmd        fd_caps;
 };
 };