misc: fastrpc: Add fastrpc_remote_heap_alloc
authorAbel Vesa <abel.vesa@linaro.org>
Fri, 25 Nov 2022 07:13:59 +0000 (07:13 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 25 Nov 2022 17:45:33 +0000 (18:45 +0100)
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: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Abel Vesa <abel.vesa@linaro.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20221125071405.148786-5-srinivas.kandagatla@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/fastrpc.c

index 3d58096..8b43fe5 100644 (file)
@@ -369,7 +369,7 @@ static void fastrpc_buf_free(struct fastrpc_buf *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)
 {
        struct fastrpc_buf *buf;
@@ -397,14 +397,37 @@ static int fastrpc_buf_alloc(struct fastrpc_user *fl, struct device *dev,
                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)
                buf->phys += ((u64)fl->sctx->sid << 32);
 
-       *obuf = buf;
-
        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)
 {
        struct fastrpc_channel_ctx *cctx;