[2/2] fdtgrep: fix fdtgrep_find_regions() error with some device trees

Message ID 20200108203516.22268-2-agust@denx.de
State New
Headers show
Series
  • [1/2] fdtgrep: fix typos in error output
Related show

Commit Message

Anatolij Gustschin Jan. 8, 2020, 8:35 p.m.
With some device trees (i.e. i.MX6 SoC) and longer REMOVE_PROPS list
the fdtgrep tool stops with "Internal error with fdtgrep_find_regions()".
Increase 'max_regions' count to avoid such errors.

Signed-off-by: Anatolij Gustschin <agust at denx.de>
---
 tools/fdtgrep.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Simon Glass Jan. 9, 2020, 8:04 p.m. | #1
On Thu, 9 Jan 2020 at 09:35, Anatolij Gustschin <agust at denx.de> wrote:
>
> With some device trees (i.e. i.MX6 SoC) and longer REMOVE_PROPS list
> the fdtgrep tool stops with "Internal error with fdtgrep_find_regions()".
> Increase 'max_regions' count to avoid such errors.
>
> Signed-off-by: Anatolij Gustschin <agust at denx.de>
> ---
>  tools/fdtgrep.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Reviewed-by: Simon Glass <sjg at chromium.org>

Wow that's a lot. I wonder if we should adjust it to be unlimited?
Patrick Delaunay Jan. 10, 2020, 7:58 a.m. | #2
Hi,

> From: U-Boot <u-boot-bounces at lists.denx.de> On Behalf Of Simon Glass
> Sent: jeudi 9 janvier 2020 21:04
> 
> On Thu, 9 Jan 2020 at 09:35, Anatolij Gustschin <agust at denx.de> wrote:
> >
> > With some device trees (i.e. i.MX6 SoC) and longer REMOVE_PROPS list
> > the fdtgrep tool stops with "Internal error with fdtgrep_find_regions()".
> > Increase 'max_regions' count to avoid such errors.
> >
> > Signed-off-by: Anatolij Gustschin <agust at denx.de>
> > ---
> >  tools/fdtgrep.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> Reviewed-by: Simon Glass <sjg at chromium.org>
> 
> Wow that's a lot. I wonder if we should adjust it to be unlimited?

I see the same issue for device-tree when number of pincontrol node > 100 in SPL
(only see for debug use case).

But normally it is managed in the function
(2 loops and re-alloc for the second loop if size > 100).

But the loop is not correctly managed, I think it is a issue introduced by 
Commit e178db1d7736a92951fdc7f1fd9b8ecf4d2877ba
fdtgrep: Fix logic of free() in do_fdtgrep()

=> retrun -1 added for the 1rst loop.

I have locally a patch, but I don't yet upstream it....
It is done today with:
	"tools: ftdgrep: correct the find regions loop in do_fdtgrep"
	http://patchwork.ozlabs.org/project/uboot/list/?series=152371

Anatolij can you confirm that my patch correct also your issue ?

Regards

Patrick
Anatolij Gustschin Jan. 12, 2020, 7:43 p.m. | #3
Hi Patrick,

On Fri, 10 Jan 2020 07:58:41 +0000
Patrick DELAUNAY patrick.delaunay at st.com wrote:
...
> I have locally a patch, but I don't yet upstream it....
> It is done today with:
> 	"tools: ftdgrep: correct the find regions loop in do_fdtgrep"
> 	http://patchwork.ozlabs.org/project/uboot/list/?series=152371
> 
> Anatolij can you confirm that my patch correct also your issue ?

Yes, your patch helps. Thanks!

--
Anatolij

Patch

diff --git a/tools/fdtgrep.c b/tools/fdtgrep.c
index 052d419692..8f71b1cd7f 100644
--- a/tools/fdtgrep.c
+++ b/tools/fdtgrep.c
@@ -778,7 +778,7 @@  static int do_fdtgrep(struct display_info *disp, const char *filename)
 {
 	struct fdt_region *region = NULL;
 	int max_regions;
-	int count = 100;
+	int count = 110;
 	char path[1024];
 	char *blob;
 	int i, ret;