summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Aurabind <mail@aurabindo.in>2014-05-21 21:19:54 +0400
committerLee Jones <lee.jones@linaro.org>2014-06-03 11:11:11 +0400
commit7abafa0a66414e385d122bcbc655a1d55ecbaecf (patch)
treeb231eb008da455131e2b85840e1d69a03352e241
parent58a9e5b98360e8dcf9c958c0552fb35279e3933f (diff)
downloadlinux-7abafa0a66414e385d122bcbc655a1d55ecbaecf.tar.xz
mfd: abx500-core: Fix compiler warning larger stack frame
On systems with CONFIG_FRAME_WARN=1024, compiler warns the allocation of an object of struct device on stack. Make the allocation dynamically to fix the warning. Also change the caller's return type to int so as to account for error handling. drivers/mfd/abx500-core.c: In function ‘abx500_dump_all_banks’: drivers/mfd/abx500-core.c:167:1: warning: the frame size of 1032 bytes is larger than 1024 bytes [-Wframe-larger-than=] Signed-off-by: Aurabindo J <mail@aurabindo.in> Signed-off-by: Lee Jones <lee.jones@linaro.org>
-rw-r--r--drivers/mfd/abx500-core.c12
-rw-r--r--include/linux/mfd/abx500.h2
2 files changed, 9 insertions, 5 deletions
diff --git a/drivers/mfd/abx500-core.c b/drivers/mfd/abx500-core.c
index f3a15aa54d7b..d6d0ec4d21e4 100644
--- a/drivers/mfd/abx500-core.c
+++ b/drivers/mfd/abx500-core.c
@@ -151,19 +151,23 @@ int abx500_startup_irq_enabled(struct device *dev, unsigned int irq)
}
EXPORT_SYMBOL(abx500_startup_irq_enabled);
-void abx500_dump_all_banks(void)
+int abx500_dump_all_banks(void)
{
struct abx500_ops *ops;
- struct device dummy_child = {NULL};
+ struct device *dummy_child;
struct abx500_device_entry *dev_entry;
+ dummy_child = kzalloc(sizeof(struct device), GFP_KERNEL);
+ if (!dummy_child)
+ return -ENOMEM;
list_for_each_entry(dev_entry, &abx500_list, list) {
- dummy_child.parent = dev_entry->dev;
+ dummy_child->parent = dev_entry->dev;
ops = &dev_entry->ops;
if ((ops != NULL) && (ops->dump_all_banks != NULL))
- ops->dump_all_banks(&dummy_child);
+ ops->dump_all_banks(dummy_child);
}
+ kfree(dummy_child);
}
EXPORT_SYMBOL(abx500_dump_all_banks);
diff --git a/include/linux/mfd/abx500.h b/include/linux/mfd/abx500.h
index 3301b2031c8d..df2508f7f3d2 100644
--- a/include/linux/mfd/abx500.h
+++ b/include/linux/mfd/abx500.h
@@ -330,7 +330,7 @@ int abx500_mask_and_set_register_interruptible(struct device *dev, u8 bank,
int abx500_get_chip_id(struct device *dev);
int abx500_event_registers_startup_state_get(struct device *dev, u8 *event);
int abx500_startup_irq_enabled(struct device *dev, unsigned int irq);
-void abx500_dump_all_banks(void);
+int abx500_dump_all_banks(void);
struct abx500_ops {
int (*get_chip_id) (struct device *);