Re: [PATCH v7 1/4] misc: fastrpc: Move fdlist to invoke context structure
From: Ekansh Gupta
Date: Tue Apr 14 2026 - 04:38:43 EST
On 13-04-2026 19:38, Srinivas Kandagatla wrote:
>
>
> On 4/2/26 5:49 AM, Ekansh Gupta wrote:
>> The fdlist is currently part of the meta buffer which is set during
>> fastrpc_get_args(), this fdlist is getting recalculated during
>> fastrpc_put_args().
>>
>> Move fdlist to the invoke context structure to improve maintainability
>> and reduce redundancy. This centralizes its handling and simplifies
>> meta buffer preparation and reading logic.
>>
>> Signed-off-by: Ekansh Gupta <ekansh.gupta@xxxxxxxxxxxxxxxx>
>> ---
>> drivers/misc/fastrpc.c | 13 ++++---------
>> 1 file changed, 4 insertions(+), 9 deletions(-)
>>
>> diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c
>> index 47356a5d5804..11f4ae749e51 100644
>> --- a/drivers/misc/fastrpc.c
>> +++ b/drivers/misc/fastrpc.c
>> @@ -233,6 +233,7 @@ struct fastrpc_invoke_ctx {
>> int pid;
>> int client_id;
>> u32 sc;
>> + u64 *fdlist;
>> u32 *crc;
>> u64 ctxid;
>> u64 msg_sz;
>> @@ -1016,6 +1017,7 @@ static int fastrpc_get_args(u32 kernel, struct fastrpc_invoke_ctx *ctx)
>> rpra = ctx->buf->virt;
>> list = fastrpc_invoke_buf_start(rpra, ctx->nscalars);
>> pages = fastrpc_phy_page_start(list, ctx->nscalars);
>> + ctx->fdlist = (u64 *)(pages + ctx->nscalars);
>> args = (uintptr_t)ctx->buf->virt + metalen;
>> rlen = pkt_size - metalen;
>> ctx->rpra = rpra;
>> @@ -1118,18 +1120,11 @@ static int fastrpc_put_args(struct fastrpc_invoke_ctx *ctx,
>> union fastrpc_remote_arg *rpra = ctx->rpra;
>> struct fastrpc_user *fl = ctx->fl;
>> struct fastrpc_map *mmap = NULL;
>> - struct fastrpc_invoke_buf *list;
>> - struct fastrpc_phy_page *pages;
>> - u64 *fdlist;
>> - int i, inbufs, outbufs, handles;
>> + u64 *fdlist = ctx->fdlist;
>
> fdlist is available after input , output buffers and handles.
>
> why this is now changed to nscalars?
We can replace it as,
nscalars = inbufs + outbufs + handles
>
> --srini
>> + int i, inbufs;
>> int ret = 0;
>>
>> inbufs = REMOTE_SCALARS_INBUFS(ctx->sc);
>> - outbufs = REMOTE_SCALARS_OUTBUFS(ctx->sc);
>> - handles = REMOTE_SCALARS_INHANDLES(ctx->sc) + REMOTE_SCALARS_OUTHANDLES(ctx->sc);
>> - list = fastrpc_invoke_buf_start(rpra, ctx->nscalars);
>> - pages = fastrpc_phy_page_start(list, ctx->nscalars);
>> - fdlist = (uint64_t *)(pages + inbufs + outbufs + handles);
>>
>> for (i = inbufs; i < ctx->nbufs; ++i) {
>> if (!ctx->maps[i]) {
>