Commit 6f18c7e8 authored by Abel Vesa's avatar Abel Vesa Committed by Greg Kroah-Hartman

misc: fastrpc: Add fastrpc_remote_heap_alloc

Split fastrpc_buf_alloc in such a way it allows allocation of remote
heap too and add fastrpc_remote_heap_alloc to do so.
Co-developed-by: default avatarSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: default avatarAbel Vesa <abel.vesa@linaro.org>
Signed-off-by: default avatarSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20221125071405.148786-5-srinivas.kandagatla@linaro.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 1ce91d45
...@@ -369,7 +369,7 @@ static void fastrpc_buf_free(struct fastrpc_buf *buf) ...@@ -369,7 +369,7 @@ static void fastrpc_buf_free(struct fastrpc_buf *buf)
kfree(buf); kfree(buf);
} }
static int fastrpc_buf_alloc(struct fastrpc_user *fl, struct device *dev, static int __fastrpc_buf_alloc(struct fastrpc_user *fl, struct device *dev,
u64 size, struct fastrpc_buf **obuf) u64 size, struct fastrpc_buf **obuf)
{ {
struct fastrpc_buf *buf; struct fastrpc_buf *buf;
...@@ -397,14 +397,37 @@ static int fastrpc_buf_alloc(struct fastrpc_user *fl, struct device *dev, ...@@ -397,14 +397,37 @@ static int fastrpc_buf_alloc(struct fastrpc_user *fl, struct device *dev,
return -ENOMEM; return -ENOMEM;
} }
*obuf = buf;
return 0;
}
static int fastrpc_buf_alloc(struct fastrpc_user *fl, struct device *dev,
u64 size, struct fastrpc_buf **obuf)
{
int ret;
struct fastrpc_buf *buf;
ret = __fastrpc_buf_alloc(fl, dev, size, obuf);
if (ret)
return ret;
buf = *obuf;
if (fl->sctx && fl->sctx->sid) if (fl->sctx && fl->sctx->sid)
buf->phys += ((u64)fl->sctx->sid << 32); buf->phys += ((u64)fl->sctx->sid << 32);
*obuf = buf;
return 0; return 0;
} }
static int fastrpc_remote_heap_alloc(struct fastrpc_user *fl, struct device *dev,
u64 size, struct fastrpc_buf **obuf)
{
struct device *rdev = &fl->cctx->rpdev->dev;
return __fastrpc_buf_alloc(fl, rdev, size, obuf);
}
static void fastrpc_channel_ctx_free(struct kref *ref) static void fastrpc_channel_ctx_free(struct kref *ref)
{ {
struct fastrpc_channel_ctx *cctx; struct fastrpc_channel_ctx *cctx;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment