[SLOF] [PATCH slof] fdt: Avoid recursion when traversing tree

Greg Kurz groug at kaod.org
Fri Jul 17 17:42:25 AEST 2020


On Fri, 17 Jul 2020 10:34:40 +1000
Alexey Kardashevskiy <aik at ozlabs.ru> wrote:

> 
> 
> On 17/07/2020 01:54, Greg Kurz wrote:
> > Hi Alexey,
> > 
> > It seems it did again ! I haven't received this in my inbox, despite you've
> > put me on Cc... :-\
> > 
> > On Thu, 16 Jul 2020 14:55:42 +1000
> > Alexey Kardashevskiy <aik at ozlabs.ru> wrote:
> > 
> >> A loop over peers does not need recursion which becomes a problem with
> >> hundreds devices.
> >>
> > 
> > You're likely right but, per curiosity, do you have some numbers to
> > share ?
> 
> 
> This was discovered with just "-smp 2048,cores=512,threads=4" and the
> results were either "cas not implemented" or some other weird XIVE
> messages (I did not see any but Anton did).
> 

Oh, I was thinking to something like "it took 30 minutes to boot", but
you seem to be talking about dysfunction of SLOF, which would be caused
by stack exhaustion if I understand Segher's anwser correctly, right ?

> 
> 
> > 
> >> Cc: Greg Kurz <groug at kaod.org>
> >> Fixes: efa56b851fab ("fdt: Delete nodes of devices removed between boot and CAS")
> >> Suggested-by: Jordan Niethe <jniethe5 at gmail.com>
> >> Signed-off-by: Alexey Kardashevskiy <aik at ozlabs.ru>
> >> ---
> >>  board-qemu/slof/fdt.fs | 27 +++++++++++++++------------
> >>  1 file changed, 15 insertions(+), 12 deletions(-)
> >>
> >> diff --git a/board-qemu/slof/fdt.fs b/board-qemu/slof/fdt.fs
> >> index 7da4ff066702..03b1d4034d0a 100644
> >> --- a/board-qemu/slof/fdt.fs
> >> +++ b/board-qemu/slof/fdt.fs
> >> @@ -636,20 +636,23 @@ r> drop
> >>      THEN
> >>  ;
> >>  
> >> -: (fdt-cas-search-obsolete-nodes) ( start node -- )
> >> -    dup IF
> >> -	dup child 2 pick swap recurse
> >> -	dup peer 2 pick swap recurse
> >> -
> >> -	dup fdt-cas-node-obsolete? IF
> >> -	    fdt-debug IF dup ." Deleting obsolete node: " dup .node ." = " . cr THEN
> >> -	    dup delete-node
> >> -	THEN
> >> +: (fdt-cas-search-obsolete-nodes) ( node -- )
> >> +    dup child
> >> +    BEGIN
> >> +	dup
> >> +    WHILE
> >> +	dup recurse
> >> +	peer
> >> +    REPEAT
> >> +    drop
> >> +    dup fdt-cas-node-obsolete? IF
> >> +        fdt-debug IF dup ." Deleting obsolete node: " dup .node ." = " . cr THEN
> >> +        dup delete-node
> >>      THEN
> >> -    2drop
> >> +    drop
> >>  ;
> >>  
> >> -: fdt-cas-delete-obsolete-nodes ( start -- )
> >> +: fdt-cas-delete-obsolete-nodes ( -- )
> >>      s" /" find-device get-node (fdt-cas-search-obsolete-nodes)
> >>      fdt-cas-delete-obsolete-aliases
> >>  ;
> >> @@ -657,7 +660,7 @@ r> drop
> >>  : fdt-fix-cas-node ( start -- )
> >>      fdt-generation# 1+ to fdt-generation#
> >>      0 to fdt-cas-pass dup (fdt-fix-cas-node) drop \ Add phandles
> >> -    dup fdt-cas-delete-obsolete-nodes             \ Delete removed devices
> >> +    fdt-cas-delete-obsolete-nodes             \ Delete removed devices
> > 
> > Maybe keep the comment aligned with the other ones ?
> 
> May be :)
> 
> > 
> > Reviewed-by: Greg Kurz <groug at kaod.org>
> 
> 
> Thanks!
> 
> > 
> >>      1 to fdt-cas-pass dup (fdt-fix-cas-node) drop \ Patch+add other properties
> >>      2 to fdt-cas-pass dup (fdt-fix-cas-node) drop \ Delete phandles from pass 0
> >>      drop
> > 
> 



More information about the SLOF mailing list