Re: [PATCH v11 4/4] misc: fastrpc: Add polling mode support for fastRPC driver

From: Dmitry Baryshkov

Date: Wed May 20 2026 - 09:42:53 EST


On Wed, May 20, 2026 at 12:20:47PM +0530, Ekansh Gupta wrote:
> For any remote call to DSP, after sending an invocation message,
> fastRPC driver waits for glink response and during this time the
> CPU can go into low power modes. This adds latency to overall fastrpc
> call as CPU wakeup and scheduling latencies are included. Add polling
> mode support with which fastRPC driver will poll continuously on a
> memory after sending a message to remote subsystem which will eliminate
> CPU wakeup and scheduling latencies and reduce fastRPC overhead. In case
> poll timeout happens, the call will fallback to normal RPC mode. Poll
> mode can be enabled by user by using FASTRPC_IOCTL_SET_OPTION ioctl
> request with FASTRPC_POLL_MODE request id.
>
> Signed-off-by: Ekansh Gupta <ekansh.gupta@xxxxxxxxxxxxxxxx>
> ---
> drivers/misc/fastrpc.c | 167 ++++++++++++++++++++++++++++++++++--
> include/uapi/misc/fastrpc.h | 29 +++++++
> 2 files changed, 189 insertions(+), 7 deletions(-)
>
> @@ -1813,6 +1907,35 @@ static int fastrpc_get_info_from_kernel(struct fastrpc_ioctl_capability *cap,
> return 0;
> }
>
> +static int fastrpc_set_option(struct fastrpc_user *fl, char __user *argp)
> +{
> + struct fastrpc_ioctl_set_option opt = {0};
> + int i;
> +
> + if (!fl->cctx->poll_mode_supported)
> + return -EOPNOTSUPP;

This is being handled too early. What if the user passes any other
option?

> +
> + if (copy_from_user(&opt, argp, sizeof(opt)))
> + return -EFAULT;
> +
> + for (i = 0; i < ARRAY_SIZE(opt.reserved); i++) {
> + if (opt.reserved[i] != 0)
> + return -EINVAL;
> + }
> +
> + if (opt.request_id != FASTRPC_POLL_MODE)
> + return -EINVAL;
> +
> + if (opt.value == FASTRPC_POLL_MODE_ENABLE)
> + fl->poll_mode = true;
> + else if (opt.value == FASTRPC_POLL_MODE_DISABLE)
> + fl->poll_mode = false;
> + else
> + return -EINVAL;
> +
> + return 0;
> +}
> +

--
With best wishes
Dmitry