On Mon, Sep 01, 2025 at 11:03:34AM +0530, Ekansh Gupta wrote: > FD list is part of meta buffer which is calculated during put args. > Move fdlist to invoke context structure for better maintenance and > to avoid code duplicacy for calculation of critical meta buffer > contents that are used by fastrpc driver.
Please start with the description of a problem or an issue. > > Signed-off-by: Ekansh Gupta <ekansh.gu...@oss.qualcomm.com> > --- > drivers/misc/fastrpc.c | 16 +++++----------- > 1 file changed, 5 insertions(+), 11 deletions(-) > > diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c > index 621bce7e101c..0991ac487192 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; > @@ -985,6 +986,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; > @@ -1087,18 +1089,10 @@ 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; > + 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]) { > @@ -1120,9 +1114,9 @@ static int fastrpc_put_args(struct fastrpc_invoke_ctx > *ctx, > cleanup_fdlist: > /* Clean up fdlist which is updated by DSP */ > for (i = 0; i < FASTRPC_MAX_FDLIST; i++) { > - if (!fdlist[i]) > + if (!ctx->fdlist[i]) > break; > - if (!fastrpc_map_lookup(fl, (int)fdlist[i], &mmap)) > + if (!fastrpc_map_lookup(fl, (int)ctx->fdlist[i], &mmap)) > fastrpc_map_put(mmap); > } > > -- > 2.34.1 > -- With best wishes Dmitry