]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
remoteproc: Clone rproc_ops in rproc_alloc()
authorBjorn Andersson <bjorn.andersson@linaro.org>
Fri, 5 Jan 2018 23:58:00 +0000 (15:58 -0800)
committerBjorn Andersson <bjorn.andersson@linaro.org>
Mon, 15 Jan 2018 17:29:34 +0000 (09:29 -0800)
In order to allow rproc_alloc() to, in a future patch, update entries in
the "ops" struct we need to make a local copy of it.

Reviewed-By: Loic Pallardy <loic.pallardy@st.com>
Tested-By: Loic Pallardy <loic.pallardy@st.com>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
drivers/remoteproc/remoteproc_core.c
include/linux/remoteproc.h

index 208ccf709cad4888f5bc99eae1185a590949ef96..dbf685dbafcffb3b76867a769ca647df538c7249 100644 (file)
@@ -1342,6 +1342,7 @@ static void rproc_type_release(struct device *dev)
                ida_simple_remove(&rproc_dev_index, rproc->index);
 
        kfree(rproc->firmware);
+       kfree(rproc->ops);
        kfree(rproc);
 }
 
@@ -1406,9 +1407,15 @@ struct rproc *rproc_alloc(struct device *dev, const char *name,
                return NULL;
        }
 
+       rproc->ops = kmemdup(ops, sizeof(*ops), GFP_KERNEL);
+       if (!rproc->ops) {
+               kfree(p);
+               kfree(rproc);
+               return NULL;
+       }
+
        rproc->firmware = p;
        rproc->name = name;
-       rproc->ops = ops;
        rproc->priv = &rproc[1];
        rproc->auto_boot = true;
 
index 6fdc62e29d6fc631203d22b770eca8906062b4b1..cc4d30a790b30b6a659867635d8f9bcbca492827 100644 (file)
@@ -419,7 +419,7 @@ struct rproc {
        const char *name;
        char *firmware;
        void *priv;
-       const struct rproc_ops *ops;
+       struct rproc_ops *ops;
        struct device dev;
        const struct rproc_fw_ops *fw_ops;
        atomic_t power;