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

Alexey Kardashevskiy aik at ozlabs.ru
Fri Jul 17 10:34:40 AEST 2020



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).



> 
>> 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
> 

-- 
Alexey


More information about the SLOF mailing list