Loading drivers/misc/qseecom.c +17 −5 Original line number Diff line number Diff line Loading @@ -1942,7 +1942,7 @@ static int __qseecom_process_blocked_on_listener_legacy( } static int __qseecom_process_blocked_on_listener_smcinvoke( struct qseecom_command_scm_resp *resp) struct qseecom_command_scm_resp *resp, uint32_t app_id) { struct qseecom_registered_listener_list *list_ptr; int ret = 0; Loading Loading @@ -1987,10 +1987,19 @@ static int __qseecom_process_blocked_on_listener_smcinvoke( &ireq, sizeof(ireq), &continue_resp, sizeof(continue_resp)); if (ret) { pr_err("scm_call for continue blocked req for session %d failed, ret %d\n", session_id, ret); /* retry with legacy cmd */ qseecom.smcinvoke_support = false; ireq.app_or_session_id = app_id; ret = qseecom_scm_call(SCM_SVC_TZSCHEDULER, 1, &ireq, sizeof(ireq), &continue_resp, sizeof(continue_resp)); qseecom.smcinvoke_support = true; if (ret) { pr_err("cont block req for app %d or session %d fail\n", app_id, session_id); goto exit; } } resp->result = QSEOS_RESULT_INCOMPLETE; exit: return ret; Loading @@ -2006,7 +2015,7 @@ static int __qseecom_process_reentrancy_blocked_on_listener( resp, ptr_app, data); else return __qseecom_process_blocked_on_listener_smcinvoke( resp); resp, data->client.app_id); } static int __qseecom_reentrancy_process_incomplete_cmd( struct qseecom_dev_handle *data, Loading Loading @@ -4787,6 +4796,9 @@ int qseecom_process_listener_from_smcinvoke(struct scm_desc *desc) resp.resp_type = desc->ret[1]; /*incomplete:unused;blocked:session_id*/ resp.data = desc->ret[2]; /*listener_id*/ dummy_private_data.client.app_id = desc->ret[1]; dummy_app_entry.app_id = desc->ret[1]; mutex_lock(&app_access_lock); if (qseecom.qsee_reentrancy_support) ret = __qseecom_process_reentrancy(&resp, &dummy_app_entry, Loading Loading
drivers/misc/qseecom.c +17 −5 Original line number Diff line number Diff line Loading @@ -1942,7 +1942,7 @@ static int __qseecom_process_blocked_on_listener_legacy( } static int __qseecom_process_blocked_on_listener_smcinvoke( struct qseecom_command_scm_resp *resp) struct qseecom_command_scm_resp *resp, uint32_t app_id) { struct qseecom_registered_listener_list *list_ptr; int ret = 0; Loading Loading @@ -1987,10 +1987,19 @@ static int __qseecom_process_blocked_on_listener_smcinvoke( &ireq, sizeof(ireq), &continue_resp, sizeof(continue_resp)); if (ret) { pr_err("scm_call for continue blocked req for session %d failed, ret %d\n", session_id, ret); /* retry with legacy cmd */ qseecom.smcinvoke_support = false; ireq.app_or_session_id = app_id; ret = qseecom_scm_call(SCM_SVC_TZSCHEDULER, 1, &ireq, sizeof(ireq), &continue_resp, sizeof(continue_resp)); qseecom.smcinvoke_support = true; if (ret) { pr_err("cont block req for app %d or session %d fail\n", app_id, session_id); goto exit; } } resp->result = QSEOS_RESULT_INCOMPLETE; exit: return ret; Loading @@ -2006,7 +2015,7 @@ static int __qseecom_process_reentrancy_blocked_on_listener( resp, ptr_app, data); else return __qseecom_process_blocked_on_listener_smcinvoke( resp); resp, data->client.app_id); } static int __qseecom_reentrancy_process_incomplete_cmd( struct qseecom_dev_handle *data, Loading Loading @@ -4787,6 +4796,9 @@ int qseecom_process_listener_from_smcinvoke(struct scm_desc *desc) resp.resp_type = desc->ret[1]; /*incomplete:unused;blocked:session_id*/ resp.data = desc->ret[2]; /*listener_id*/ dummy_private_data.client.app_id = desc->ret[1]; dummy_app_entry.app_id = desc->ret[1]; mutex_lock(&app_access_lock); if (qseecom.qsee_reentrancy_support) ret = __qseecom_process_reentrancy(&resp, &dummy_app_entry, Loading