diff mbox series

optee: fix the dead loop problem when there is signal pending

Message ID 1515007850-17169-1-git-send-email-prime.zeng@hisilicon.com
State New
Headers show
Series optee: fix the dead loop problem when there is signal pending | expand

Commit Message

Zeng Tao Jan. 3, 2018, 7:30 p.m. UTC
when the current process is doing a rpc call from optee, and if there
is a signal pending on the process, it will enter dead loop if the
tee-supplicant is working correctly, fix the problem by breaking out
the loop when the rpc job is finished.

Signed-off-by: Zeng Tao <prime.zeng@hisilicon.com>

---
 drivers/tee/optee/supp.c | 7 +++++++
 1 file changed, 7 insertions(+)

-- 
2.7.4

Comments

Jens Wiklander Feb. 26, 2018, 8:18 p.m. UTC | #1
Hi Zeng Tao,

On Wed, Jan 3, 2018 at 8:30 PM, Zeng Tao <prime.zeng@hisilicon.com> wrote:
> when the current process is doing a rpc call from optee, and if there

> is a signal pending on the process, it will enter dead loop if the

> tee-supplicant is working correctly, fix the problem by breaking out

> the loop when the rpc job is finished.

>

> Signed-off-by: Zeng Tao <prime.zeng@hisilicon.com>

> ---

>  drivers/tee/optee/supp.c | 7 +++++++

>  1 file changed, 7 insertions(+)

>

> diff --git a/drivers/tee/optee/supp.c b/drivers/tee/optee/supp.c

> index b4ea067..170dedb 100644

> --- a/drivers/tee/optee/supp.c

> +++ b/drivers/tee/optee/supp.c

> @@ -107,6 +107,13 @@ u32 optee_supp_thrd_req(struct tee_context *ctx, u32 func, size_t num_params,

>                 mutex_unlock(&supp->ctx_mutex);

>                 if (interruptable)

>                         break;

> +

> +               /*

> +                * if there is signal pending, and the supplicant has finished

> +                * the rpc job, we need to break out the loop

> +                */

> +               if (try_wait_for_completion(&supp->data_from_supp))

> +                       break;

>         }

>

>         ret = supp->ret;

> --

> 2.7.4

>


Since this patch was posted there has been changes (during the merge
window) to this part of the code. Please rebase, test and post again.

Thanks,
Jens
diff mbox series

Patch

diff --git a/drivers/tee/optee/supp.c b/drivers/tee/optee/supp.c
index b4ea067..170dedb 100644
--- a/drivers/tee/optee/supp.c
+++ b/drivers/tee/optee/supp.c
@@ -107,6 +107,13 @@  u32 optee_supp_thrd_req(struct tee_context *ctx, u32 func, size_t num_params,
 		mutex_unlock(&supp->ctx_mutex);
 		if (interruptable)
 			break;
+
+		/*
+		 * if there is signal pending, and the supplicant has finished
+		 * the rpc job, we need to break out the loop
+		 */
+		if (try_wait_for_completion(&supp->data_from_supp))
+			break;
 	}
 
 	ret = supp->ret;