]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
mfd: reduce stack usage in mfd-core.c
authorIan Molton <spyro@f2s.com>
Fri, 25 Jul 2008 21:59:29 +0000 (22:59 +0100)
committerSamuel Ortiz <samuel@sortiz.org>
Sun, 19 Oct 2008 20:54:09 +0000 (22:54 +0200)
This patch moves the allocation of the resources off the stack in
mfd_add_device().

Signed-off-by: Ian Molton <spyro@f2s.com>
Signed-off-by: Samuel Ortiz <sameo@openedhand.com>
drivers/mfd/mfd-core.c

index 9c9c126ed334d406320088ce29e66a8f3958f15d..6c0d1bec4b76c1ab58ae0cbe86cc2539cc3b6375 100644 (file)
@@ -20,7 +20,7 @@ static int mfd_add_device(struct device *parent, int id,
                          struct resource *mem_base,
                          int irq_base)
 {
-       struct resource res[cell->num_resources];
+       struct resource *res;
        struct platform_device *pdev;
        int ret = -ENOMEM;
        int r;
@@ -29,14 +29,17 @@ static int mfd_add_device(struct device *parent, int id,
        if (!pdev)
                goto fail_alloc;
 
+       res = kzalloc(sizeof(*res) * cell->num_resources, GFP_KERNEL);
+       if (!res)
+               goto fail_device;
+
        pdev->dev.parent = parent;
 
        ret = platform_device_add_data(pdev,
                        cell->platform_data, cell->data_size);
        if (ret)
-               goto fail_device;
+               goto fail_res;
 
-       memset(res, 0, sizeof(res));
        for (r = 0; r < cell->num_resources; r++) {
                res[r].name = cell->resources[r].name;
                res[r].flags = cell->resources[r].flags;
@@ -64,11 +67,15 @@ static int mfd_add_device(struct device *parent, int id,
 
        ret = platform_device_add(pdev);
        if (ret)
-               goto fail_device;
+               goto fail_res;
+
+       kfree(res);
 
        return 0;
 
 /*     platform_device_del(pdev); */
+fail_res:
+       kfree(res);
 fail_device:
        platform_device_put(pdev);
 fail_alloc: