]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
misc: fastrpc: do not interrupt kernel calls
authorJorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org>
Wed, 9 Oct 2019 14:41:21 +0000 (15:41 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Oct 2019 13:28:11 +0000 (15:28 +0200)
the DSP firmware requires some calls to be held until processing has
completed: this is to guarantee that memory continues to be
accessible.

Nevertheless, the fastrpc driver chooses not support the case were
requests need to be held for unbounded amounts of time. If such a
use-case becomes necessary, this timeout will need to be revisited.

Signed-off-by: Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org>
Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20191009144123.24583-4-srinivas.kandagatla@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/fastrpc.c

index c0fe3419c685e356dc70eead5b9137e01a06b417..666c431380ce84171f620e69c482540e9a918379 100644 (file)
@@ -959,8 +959,13 @@ static int fastrpc_internal_invoke(struct fastrpc_user *fl,  u32 kernel,
        if (err)
                goto bail;
 
-       /* Wait for remote dsp to respond or time out */
-       err = wait_for_completion_interruptible(&ctx->work);
+       if (kernel) {
+               if (!wait_for_completion_timeout(&ctx->work, 10 * HZ))
+                       err = -ETIMEDOUT;
+       } else {
+               err = wait_for_completion_interruptible(&ctx->work);
+       }
+
        if (err)
                goto bail;