Loading drivers/misc/qseecom.c +7 −24 Original line number Diff line number Diff line Loading @@ -1952,6 +1952,7 @@ static int __qseecom_process_incomplete_cmd(struct qseecom_dev_handle *data, } qseecom.app_block_ref_cnt--; wake_up_interruptible_all(&qseecom.app_block_wq); if (rc) return rc; Loading Loading @@ -2296,24 +2297,15 @@ static int __qseecom_reentrancy_process_incomplete_cmd( */ static void __qseecom_reentrancy_check_if_no_app_blocked(uint32_t smc_id) { sigset_t new_sigset, old_sigset; if (qseecom.qsee_reentrancy_support > QSEE_REENTRANCY_PHASE_0 && qseecom.qsee_reentrancy_support < QSEE_REENTRANCY_PHASE_3 && IS_OWNER_TRUSTED_OS(TZ_SYSCALL_OWNER_ID(smc_id))) { /* thread sleep until this app unblocked */ while (qseecom.app_block_ref_cnt > 0) { sigfillset(&new_sigset); sigprocmask(SIG_SETMASK, &new_sigset, &old_sigset); mutex_unlock(&app_access_lock); do { if (!wait_event_interruptible( qseecom.app_block_wq, (qseecom.app_block_ref_cnt == 0))) break; } while (1); wait_event_interruptible(qseecom.app_block_wq, (!qseecom.app_block_ref_cnt)); mutex_lock(&app_access_lock); sigprocmask(SIG_SETMASK, &old_sigset, NULL); } } } Loading @@ -2326,24 +2318,15 @@ static void __qseecom_reentrancy_check_if_no_app_blocked(uint32_t smc_id) static void __qseecom_reentrancy_check_if_this_app_blocked( struct qseecom_registered_app_list *ptr_app) { sigset_t new_sigset, old_sigset; if (qseecom.qsee_reentrancy_support) { ptr_app->check_block++; while (ptr_app->app_blocked || qseecom.app_block_ref_cnt > 1) { /* thread sleep until this app unblocked */ sigfillset(&new_sigset); sigprocmask(SIG_SETMASK, &new_sigset, &old_sigset); mutex_unlock(&app_access_lock); do { if (!wait_event_interruptible( qseecom.app_block_wq, wait_event_interruptible(qseecom.app_block_wq, (!ptr_app->app_blocked && qseecom.app_block_ref_cnt <= 1))) break; } while (1); qseecom.app_block_ref_cnt <= 1)); mutex_lock(&app_access_lock); sigprocmask(SIG_SETMASK, &old_sigset, NULL); } ptr_app->check_block--; } Loading Loading @@ -3245,7 +3228,7 @@ int __qseecom_process_reentrancy(struct qseecom_command_scm_resp *resp, ret = __qseecom_reentrancy_process_incomplete_cmd(data, resp); ptr_app->app_blocked = false; qseecom.app_block_ref_cnt--; wake_up_interruptible(&qseecom.app_block_wq); wake_up_interruptible_all(&qseecom.app_block_wq); if (ret) pr_err("process_incomplete_cmd failed err: %d\n", ret); Loading Loading
drivers/misc/qseecom.c +7 −24 Original line number Diff line number Diff line Loading @@ -1952,6 +1952,7 @@ static int __qseecom_process_incomplete_cmd(struct qseecom_dev_handle *data, } qseecom.app_block_ref_cnt--; wake_up_interruptible_all(&qseecom.app_block_wq); if (rc) return rc; Loading Loading @@ -2296,24 +2297,15 @@ static int __qseecom_reentrancy_process_incomplete_cmd( */ static void __qseecom_reentrancy_check_if_no_app_blocked(uint32_t smc_id) { sigset_t new_sigset, old_sigset; if (qseecom.qsee_reentrancy_support > QSEE_REENTRANCY_PHASE_0 && qseecom.qsee_reentrancy_support < QSEE_REENTRANCY_PHASE_3 && IS_OWNER_TRUSTED_OS(TZ_SYSCALL_OWNER_ID(smc_id))) { /* thread sleep until this app unblocked */ while (qseecom.app_block_ref_cnt > 0) { sigfillset(&new_sigset); sigprocmask(SIG_SETMASK, &new_sigset, &old_sigset); mutex_unlock(&app_access_lock); do { if (!wait_event_interruptible( qseecom.app_block_wq, (qseecom.app_block_ref_cnt == 0))) break; } while (1); wait_event_interruptible(qseecom.app_block_wq, (!qseecom.app_block_ref_cnt)); mutex_lock(&app_access_lock); sigprocmask(SIG_SETMASK, &old_sigset, NULL); } } } Loading @@ -2326,24 +2318,15 @@ static void __qseecom_reentrancy_check_if_no_app_blocked(uint32_t smc_id) static void __qseecom_reentrancy_check_if_this_app_blocked( struct qseecom_registered_app_list *ptr_app) { sigset_t new_sigset, old_sigset; if (qseecom.qsee_reentrancy_support) { ptr_app->check_block++; while (ptr_app->app_blocked || qseecom.app_block_ref_cnt > 1) { /* thread sleep until this app unblocked */ sigfillset(&new_sigset); sigprocmask(SIG_SETMASK, &new_sigset, &old_sigset); mutex_unlock(&app_access_lock); do { if (!wait_event_interruptible( qseecom.app_block_wq, wait_event_interruptible(qseecom.app_block_wq, (!ptr_app->app_blocked && qseecom.app_block_ref_cnt <= 1))) break; } while (1); qseecom.app_block_ref_cnt <= 1)); mutex_lock(&app_access_lock); sigprocmask(SIG_SETMASK, &old_sigset, NULL); } ptr_app->check_block--; } Loading Loading @@ -3245,7 +3228,7 @@ int __qseecom_process_reentrancy(struct qseecom_command_scm_resp *resp, ret = __qseecom_reentrancy_process_incomplete_cmd(data, resp); ptr_app->app_blocked = false; qseecom.app_block_ref_cnt--; wake_up_interruptible(&qseecom.app_block_wq); wake_up_interruptible_all(&qseecom.app_block_wq); if (ret) pr_err("process_incomplete_cmd failed err: %d\n", ret); Loading