diff mbox

drivers/of: Fix build warning in populate_node()

Message ID 1463139099-23363-1-git-send-email-gwshan@linux.vnet.ibm.com
State Not Applicable
Headers show

Commit Message

Gavin Shan May 13, 2016, 11:31 a.m. UTC
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: 9ffa9eb ("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>
---
 drivers/of/fdt.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

Comments

Rob Herring May 16, 2016, 2:11 p.m. UTC | #1
On Fri, May 13, 2016 at 09:31:39PM +1000, Gavin Shan wrote:
> 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: 9ffa9eb ("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>
> ---
>  drivers/of/fdt.c | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)

Applied, thanks.

Rob
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index c95054c..34344a8 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;