summaryrefslogtreecommitdiffstats
path: root/drivers/of/fdt.c
diff options
context:
space:
mode:
authorGavin Shan <gwshan@linux.vnet.ibm.com>2016-05-13 13:31:39 +0200
committerRob Herring <robh@kernel.org>2016-05-19 16:16:35 +0200
commitdddc33e50a074152d0ba447dcaa6184b19dffab2 (patch)
tree1ec0f7d00c81ac6dd7ec87b98eee798e066c80cb /drivers/of/fdt.c
parentdrivers/of: Fix depth when unflattening devicetree (diff)
downloadlinux-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/fdt.c')
-rw-r--r--drivers/of/fdt.c16
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;