Re: [PATCH v11 4/4] misc: fastrpc: Add polling mode support for fastRPC driver
From: Ekansh Gupta
Date: Thu May 21 2026 - 00:13:43 EST
On 20-05-2026 19:06, Dmitry Baryshkov wrote:
> 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?
okay, right. I was handling this with only poll mode as an option, I'll
move this after request_id check.>
>> +
>> + 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;
>> +}
>> +
>