Jelajahi Sumber

msm: eva: Adding kref count for cvp_get_inst_from_id

Adding count for instance

Change-Id: I1de6e3d4371f1b473907390afafa11e41806671b
Signed-off-by: Pranay Varma Kopanati <[email protected]>
Pranay Varma Kopanati 10 bulan lalu
induk
melakukan
9ab52a824a
1 mengubah file dengan 7 tambahan dan 3 penghapusan
  1. 7 3
      msm/eva/hfi_response_handler.c

+ 7 - 3
msm/eva/hfi_response_handler.c

@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
- * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2023-2024, Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
 #include <linux/bitops.h>
@@ -487,7 +487,7 @@ retry:
 			}
 		}
 
-		inst = match ? inst : NULL;
+		inst = match && kref_get_unless_zero(&inst->kref) ? inst : NULL;
 		mutex_unlock(&core->lock);
 	} else {
 		if (core->state == CVP_CORE_UNINIT)
@@ -546,6 +546,7 @@ static int hfi_process_session_dump_notify(u32 device_id,
 	info->response_type = HAL_SESSION_DUMP_NOTIFY;
 	info->response.cmd = cmd_done;
 
+	cvp_put_inst(inst);
 	return 0;
 }
 
@@ -584,7 +585,7 @@ static int hfi_process_session_cvp_msg(u32 device_id,
 	sess_msg = cvp_kmem_cache_zalloc(&cvp_driver->msg_cache, GFP_KERNEL);
 	if (sess_msg == NULL) {
 		dprintk(CVP_ERR, "%s runs out msg cache memory\n", __func__);
-		return -ENOMEM;
+		goto error_no_mem;
 	}
 
 	memcpy(&sess_msg->pkt, pkt, get_msg_size(pkt));
@@ -607,11 +608,14 @@ static int hfi_process_session_cvp_msg(u32 device_id,
 
 	info->response_type = HAL_NO_RESP;
 
+	cvp_put_inst(inst);
 	return 0;
 
 error_handle_msg:
 	spin_unlock(&sq->lock);
 	cvp_kmem_cache_free(&cvp_driver->msg_cache, sess_msg);
+error_no_mem:
+	cvp_put_inst(inst);
 	return -ENOMEM;
 }