mfd: reduce stack usage in mfd-core.c
Ian Molton [Fri, 25 Jul 2008 21:59:29 +0000 (22:59 +0100)]
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 9c9c126..6c0d1be 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: