Linux: TransportRpmsg: Fix Mutex Deadlock Issue
[ipc/ipcdev.git] / linux / patches / 3.8.0 / omapl138 / 0004-Add-support-to-rproc_alloc-for-a-default-firmware-na.patch
1 From e974894771cfb415d1d2ed3d67c5a2677df8e54d Mon Sep 17 00:00:00 2001
2 From: Robert Tivy <rtivy@ti.com>
3 Date: Fri, 8 Mar 2013 10:33:39 -0800
4 Subject: [PATCH v8 4/7] Add support to rproc_alloc() for a default firmware
5  name
7 Signed-off-by: Robert Tivy <rtivy@ti.com>
8 ---
9  drivers/remoteproc/remoteproc_core.c |   25 +++++++++++++++++++++++--
10  1 file changed, 23 insertions(+), 2 deletions(-)
12 diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
13 index dd3bfaf..94c9b74 100644
14 --- a/drivers/remoteproc/remoteproc_core.c
15 +++ b/drivers/remoteproc/remoteproc_core.c
16 @@ -1222,19 +1222,40 @@ struct rproc *rproc_alloc(struct device *dev, const char *name,
17                                 const char *firmware, int len)
18  {
19         struct rproc *rproc;
20 +       char *template = "rproc-%s-fw";
21 +       char *p;
22 +       int name_len = 0;
23  
24         if (!dev || !name || !ops)
25                 return NULL;
26  
27 -       rproc = kzalloc(sizeof(struct rproc) + len, GFP_KERNEL);
28 +       if (!firmware)
29 +               /*
30 +                * Make room for default firmware name (minus %s plus '\0').
31 +                * If the caller didn't pass in a firmware name then
32 +                * construct a default name.  We're already glomming 'len'
33 +                * bytes onto the end of the struct rproc allocation, so do
34 +                * a few more for the default firmware name (but only if
35 +                * the caller doesn't pass one).
36 +                */
37 +               name_len = strlen(name) + strlen(template) - 2 + 1;
38 +
39 +       rproc = kzalloc(sizeof(struct rproc) + len + name_len, GFP_KERNEL);
40         if (!rproc) {
41                 dev_err(dev, "%s: kzalloc failed\n", __func__);
42                 return NULL;
43         }
44  
45 +       if (!firmware) {
46 +               p = (char *)rproc + sizeof(struct rproc) + len;
47 +               sprintf(p, template, name);
48 +       } else {
49 +               p = (char *)firmware;
50 +       }
51 +
52 +       rproc->firmware = p;
53         rproc->name = name;
54         rproc->ops = ops;
55 -       rproc->firmware = firmware;
56         rproc->priv = &rproc[1];
57  
58         device_initialize(&rproc->dev);
59 -- 
60 1.7.9.4