Loading drivers/misc/qseecom.c +7 −0 Original line number Original line Diff line number Diff line Loading @@ -331,6 +331,7 @@ struct qseecom_client_handle { struct qseecom_listener_handle { struct qseecom_listener_handle { u32 id; u32 id; bool unregister_pending; bool unregister_pending; bool release_called; }; }; static struct qseecom_control qseecom; static struct qseecom_control qseecom; Loading Loading @@ -1464,6 +1465,9 @@ static void __qseecom_processing_pending_lsnr_unregister(void) if (entry && entry->data) { if (entry && entry->data) { pr_debug("process pending unregister %d\n", pr_debug("process pending unregister %d\n", entry->data->listener.id); entry->data->listener.id); /* don't process if qseecom_release is not called*/ if (!entry->data->listener.release_called) break; ptr_svc = __qseecom_find_svc( ptr_svc = __qseecom_find_svc( entry->data->listener.id); entry->data->listener.id); if (ptr_svc) { if (ptr_svc) { Loading Loading @@ -2318,8 +2322,10 @@ static int __qseecom_reentrancy_process_incomplete_cmd( ret = -EINVAL; ret = -EINVAL; goto exit; goto exit; } } mutex_unlock(&listener_access_lock); ret = __qseecom_process_reentrancy_blocked_on_listener( ret = __qseecom_process_reentrancy_blocked_on_listener( resp, NULL, data); resp, NULL, data); mutex_lock(&listener_access_lock); if (ret) { if (ret) { pr_err("failed to process App(%d) %s blocked on listener %d\n", pr_err("failed to process App(%d) %s blocked on listener %d\n", data->client.app_id, data->client.app_id, Loading Loading @@ -7820,6 +7826,7 @@ static int qseecom_release(struct inode *inode, struct file *file) free_private_data = false; free_private_data = false; mutex_lock(&listener_access_lock); mutex_lock(&listener_access_lock); ret = qseecom_unregister_listener(data); ret = qseecom_unregister_listener(data); data->listener.release_called = true; mutex_unlock(&listener_access_lock); mutex_unlock(&listener_access_lock); break; break; case QSEECOM_CLIENT_APP: case QSEECOM_CLIENT_APP: Loading Loading
drivers/misc/qseecom.c +7 −0 Original line number Original line Diff line number Diff line Loading @@ -331,6 +331,7 @@ struct qseecom_client_handle { struct qseecom_listener_handle { struct qseecom_listener_handle { u32 id; u32 id; bool unregister_pending; bool unregister_pending; bool release_called; }; }; static struct qseecom_control qseecom; static struct qseecom_control qseecom; Loading Loading @@ -1464,6 +1465,9 @@ static void __qseecom_processing_pending_lsnr_unregister(void) if (entry && entry->data) { if (entry && entry->data) { pr_debug("process pending unregister %d\n", pr_debug("process pending unregister %d\n", entry->data->listener.id); entry->data->listener.id); /* don't process if qseecom_release is not called*/ if (!entry->data->listener.release_called) break; ptr_svc = __qseecom_find_svc( ptr_svc = __qseecom_find_svc( entry->data->listener.id); entry->data->listener.id); if (ptr_svc) { if (ptr_svc) { Loading Loading @@ -2318,8 +2322,10 @@ static int __qseecom_reentrancy_process_incomplete_cmd( ret = -EINVAL; ret = -EINVAL; goto exit; goto exit; } } mutex_unlock(&listener_access_lock); ret = __qseecom_process_reentrancy_blocked_on_listener( ret = __qseecom_process_reentrancy_blocked_on_listener( resp, NULL, data); resp, NULL, data); mutex_lock(&listener_access_lock); if (ret) { if (ret) { pr_err("failed to process App(%d) %s blocked on listener %d\n", pr_err("failed to process App(%d) %s blocked on listener %d\n", data->client.app_id, data->client.app_id, Loading Loading @@ -7820,6 +7826,7 @@ static int qseecom_release(struct inode *inode, struct file *file) free_private_data = false; free_private_data = false; mutex_lock(&listener_access_lock); mutex_lock(&listener_access_lock); ret = qseecom_unregister_listener(data); ret = qseecom_unregister_listener(data); data->listener.release_called = true; mutex_unlock(&listener_access_lock); mutex_unlock(&listener_access_lock); break; break; case QSEECOM_CLIENT_APP: case QSEECOM_CLIENT_APP: Loading