Skip to content

Commit ada6c2d

Browse files
Ekansh Guptagregkh
authored andcommitted
misc: fastrpc: Fix remote heap allocation request
Remote heap is used by DSP audioPD on need basis. This memory is allocated from reserved CMA memory region and is then shared with audioPD to use it for it's functionality. Current implementation of remote heap is not allocating the memory from CMA region, instead it is allocating the memory from SMMU context bank. The arguments passed to scm call for the reassignment of ownership is also not correct. Added changes to allocate CMA memory and have a proper ownership reassignment. Fixes: 532ad70 ("misc: fastrpc: Add mmap request assigning for static PD pool") Cc: stable <stable@kernel.org> Tested-by: Ekansh Gupta <quic_ekangupt@quicinc.com> Signed-off-by: Ekansh Gupta <quic_ekangupt@quicinc.com> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Link: https://lore.kernel.org/r/20230811115643.38578-2-srinivas.kandagatla@linaro.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 48e3210 commit ada6c2d

1 file changed

Lines changed: 7 additions & 7 deletions

File tree

drivers/misc/fastrpc.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1867,7 +1867,11 @@ static int fastrpc_req_mmap(struct fastrpc_user *fl, char __user *argp)
18671867
return -EINVAL;
18681868
}
18691869

1870-
err = fastrpc_buf_alloc(fl, fl->sctx->dev, req.size, &buf);
1870+
if (req.flags == ADSP_MMAP_REMOTE_HEAP_ADDR)
1871+
err = fastrpc_remote_heap_alloc(fl, dev, req.size, &buf);
1872+
else
1873+
err = fastrpc_buf_alloc(fl, dev, req.size, &buf);
1874+
18711875
if (err) {
18721876
dev_err(dev, "failed to allocate buffer\n");
18731877
return err;
@@ -1906,12 +1910,8 @@ static int fastrpc_req_mmap(struct fastrpc_user *fl, char __user *argp)
19061910

19071911
/* Add memory to static PD pool, protection thru hypervisor */
19081912
if (req.flags == ADSP_MMAP_REMOTE_HEAP_ADDR && fl->cctx->vmcount) {
1909-
struct qcom_scm_vmperm perm;
1910-
1911-
perm.vmid = QCOM_SCM_VMID_HLOS;
1912-
perm.perm = QCOM_SCM_PERM_RWX;
1913-
err = qcom_scm_assign_mem(buf->phys, buf->size,
1914-
&fl->cctx->perms, &perm, 1);
1913+
err = qcom_scm_assign_mem(buf->phys, (u64)buf->size,
1914+
&fl->cctx->perms, fl->cctx->vmperms, fl->cctx->vmcount);
19151915
if (err) {
19161916
dev_err(fl->sctx->dev, "Failed to assign memory phys 0x%llx size 0x%llx err %d",
19171917
buf->phys, buf->size, err);

0 commit comments

Comments
 (0)