diff options
author | Gavin Shan <gwshan@linux.vnet.ibm.com> | 2016-05-13 13:31:39 +0200 |
---|---|---|
committer | Rob Herring <robh@kernel.org> | 2016-05-19 16:16:35 +0200 |
commit | dddc33e50a074152d0ba447dcaa6184b19dffab2 (patch) | |
tree | 1ec0f7d00c81ac6dd7ec87b98eee798e066c80cb /drivers/of | |
parent | drivers/of: Fix depth when unflattening devicetree (diff) | |
download | linux-dddc33e50a074152d0ba447dcaa6184b19dffab2.tar.xz linux-dddc33e50a074152d0ba447dcaa6184b19dffab2.zip |
drivers/of: Fix build warning in populate_node()
Function populate_node() is used to unflatten FDT blob to device
tree. It supports maximal 64 level of device nodes. There is one
array @fpsizes[64] tracking the full name length of last unflattened
device node in the corresponding level (index of element in the
array - 1). Build warning is seen with CONFIG_FRAME_WARN=1024 like
below on ARM64 as Geert reported. The issue can be reproduced on
PPC64 as well.
$ make drivers/of/fdt.o
drivers/of/fdt.c:443:1: warning: the frame size of 1136 bytes is \
larger than 1024 bytes [-Wframe-larger-than=]
This changes the data type of @fpsizes[i] from "unsigned long" to
"unsigned int" to avoid the build warning. The return value type
of populate_node() and its @fpsize argument is adjusted accordingly.
With this applied, 256 bytes saved from the stack frame on ARM64 and
PPC64 platforms and the above warning isn't seen.
Fixes: 50800082f176 ("drivers/of: Avoid recursively calling unflatten_dt_node()")
Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
Signed-off-by: Rob Herring <robh@kernel.org>
Diffstat (limited to 'drivers/of')
-rw-r--r-- | drivers/of/fdt.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index b352f67d710b..14f2f8c7c260 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -264,13 +264,13 @@ static void populate_properties(const void *blob, *pprev = NULL; } -static unsigned long populate_node(const void *blob, - int offset, - void **mem, - struct device_node *dad, - unsigned long fpsize, - struct device_node **pnp, - bool dryrun) +static unsigned int populate_node(const void *blob, + int offset, + void **mem, + struct device_node *dad, + unsigned int fpsize, + struct device_node **pnp, + bool dryrun) { struct device_node *np; const char *pathp; @@ -397,7 +397,7 @@ static int unflatten_dt_nodes(const void *blob, struct device_node *root; int offset = 0, depth = 0; #define FDT_MAX_DEPTH 64 - unsigned long fpsizes[FDT_MAX_DEPTH]; + unsigned int fpsizes[FDT_MAX_DEPTH]; struct device_node *nps[FDT_MAX_DEPTH]; void *base = mem; bool dryrun = !base; |