From: Ekansh Gupta <[email protected]>

The initial buffer allocated for the Audio PD memory pool is never added
to the pool because pageslen is set to 0. As a result, the buffer is not
registered with Audio PD and is never used, causing a memory leak. Audio
PD immediately falls back to allocating memory from the remote heap since
the pool starts out empty.

Fix this by setting pageslen to 1 so that the initially allocated buffer
is correctly registered and becomes part of the Audio PD memory pool.

Fixes: 0871561055e66 ("misc: fastrpc: Add support for audiopd")
Cc: [email protected]
Signed-off-by: Ekansh Gupta <[email protected]>
Signed-off-by: Jianping Li <[email protected]>
---
 drivers/misc/fastrpc.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c
index 5524354f3ccc..80a636962357 100644
--- a/drivers/misc/fastrpc.c
+++ b/drivers/misc/fastrpc.c
@@ -1373,7 +1373,9 @@ static int fastrpc_init_create_static_process(struct 
fastrpc_user *fl,
                err = PTR_ERR(name);
                goto err;
        }
-
+       inbuf.client_id = fl->client_id;
+       inbuf.namelen = init.namelen;
+       inbuf.pageslen = 0;
        if (!fl->cctx->remote_heap) {
                err = fastrpc_remote_heap_alloc(fl, fl->sctx->dev, init.memlen,
                                                &fl->cctx->remote_heap);
@@ -1396,12 +1398,10 @@ static int fastrpc_init_create_static_process(struct 
fastrpc_user *fl,
                                goto err_map;
                        }
                        scm_done = true;
+                       inbuf.pageslen = 1;
                }
        }
 
-       inbuf.client_id = fl->client_id;
-       inbuf.namelen = init.namelen;
-       inbuf.pageslen = 0;
        fl->pd = USER_PD;
 
        args[0].ptr = (u64)(uintptr_t)&inbuf;
-- 
2.43.0

Reply via email to