The fdlist is currently part of the meta buffer, computed during
put_args. This leads to code duplication when preparing and reading
critical meta buffer contents used by the FastRPC driver.

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 <[email protected]>
---
 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 ee652ef01534..679cd8997a00 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;
@@ -987,6 +988,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;
@@ -1089,18 +1091,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]) {
@@ -1122,9 +1116,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

Reply via email to