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 <[email protected]>
>> ---
>>  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;
>> +}
>> +
> 

Reply via email to