Message ID | 1690952258-31364-1-git-send-email-quic_ekangupt@quicinc.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | [v3] misc: fastrpc: Fix remote heap allocation request | expand |
On Wed, 02 Aug 2023 10:27:38 +0530, Ekansh Gupta wrote: > 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. > > [...] Applied, thanks! [1/1] misc: fastrpc: Fix remote heap allocation request commit: 098316374fead0383431cf678709f5609485ee21 Best regards,
diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index 30d4d04..8e002a4 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -1866,7 +1866,11 @@ static int fastrpc_req_mmap(struct fastrpc_user *fl, char __user *argp) return -EINVAL; } - err = fastrpc_buf_alloc(fl, fl->sctx->dev, req.size, &buf); + if (req.flags == ADSP_MMAP_REMOTE_HEAP_ADDR) + err = fastrpc_remote_heap_alloc(fl, dev, req.size, &buf); + else + err = fastrpc_buf_alloc(fl, dev, req.size, &buf); + if (err) { dev_err(dev, "failed to allocate buffer\n"); return err; @@ -1905,12 +1909,8 @@ static int fastrpc_req_mmap(struct fastrpc_user *fl, char __user *argp) /* Add memory to static PD pool, protection thru hypervisor */ if (req.flags == ADSP_MMAP_REMOTE_HEAP_ADDR && fl->cctx->vmcount) { - struct qcom_scm_vmperm perm; - - perm.vmid = QCOM_SCM_VMID_HLOS; - perm.perm = QCOM_SCM_PERM_RWX; - err = qcom_scm_assign_mem(buf->phys, buf->size, - &fl->cctx->perms, &perm, 1); + err = qcom_scm_assign_mem(buf->phys, (u64)buf->size, + &fl->cctx->perms, fl->cctx->vmperms, fl->cctx->vmcount); if (err) { dev_err(fl->sctx->dev, "Failed to assign memory phys 0x%llx size 0x%llx err %d", buf->phys, buf->size, err);