qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] Replace calls to object_child_foreach() with ob


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH] Replace calls to object_child_foreach() with object_child_foreach_recursive()
Date: Tue, 26 Mar 2019 10:12:56 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1

On 26/03/19 08:43, Stefan Hajnoczi wrote:
> On Sun, Mar 10, 2019 at 02:39:13AM +0100, Ernest Esene wrote:
>> Replace calls to object_child_foreach() with object_child_foreach_recursive()
>> when applicable: nvdimm_device_list, nmi_monitor_handle, find_sysbus_device,
>> pc_dimm_slot2bitmap, build_dimm_list.
> 
> Ernest or Paolo: What is the rationale for this change?

The change could have been described better probably...  The idea is
that for example nvdimm_device_list could just stop invoking
object_child_foreach, because recursion is handled by
nvdimm_get_device_list:

>> @@ -41,7 +41,7 @@ static int nvdimm_device_list(Object *obj, void *opaque)
>>          *list = g_slist_append(*list, DEVICE(obj));
>>      }
>>  
>> -    object_child_foreach(obj, nvdimm_device_list, opaque);
>> +    object_child_foreach_recursive(obj, nvdimm_device_list, opaque);
>>      return 0;
>>  }
>>  
>> @@ -56,7 +56,8 @@ static GSList *nvdimm_get_device_list(void)
>>  {
>>      GSList *list = NULL;
>>  
>> -    object_child_foreach(qdev_get_machine(), nvdimm_device_list, &list);
>> +    object_child_foreach_recursive(qdev_get_machine(),
>> +                                   nvdimm_device_list, &list);
>>      return list;
>>  }

Likewise, the call to object_child_foreach could disappear here
(replaced by just a "return"):

>> diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c
>> index 9f9edbc..c16d57c 100644
>> --- a/hw/core/sysbus.c
>> +++ b/hw/core/sysbus.c
>> @@ -43,7 +43,7 @@ static int find_sysbus_device(Object *obj, void *opaque)
>>  
>>      if (!sbdev) {
>>          /* Container, traverse it for children */
>> -        return object_child_foreach(obj, find_sysbus_device, opaque);
>> +        return object_child_foreach_recursive(obj, find_sysbus_device, 
>> opaque);
>>      }
>>  
>>      find->func(sbdev, find->opaque);

and instead foreach_dynamic_sysbus_device would call
object_child_foreach_recursive.

You get the idea of what the change would be here:

>> diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c
>> index 152400b..844c8ac 100644
>> --- a/hw/mem/pc-dimm.c
>> +++ b/hw/mem/pc-dimm.c
>> @@ -84,7 +84,7 @@ static int pc_dimm_slot2bitmap(Object *obj, void *opaque)
>>          }
>>      }
>>  
>> -    object_child_foreach(obj, pc_dimm_slot2bitmap, opaque);
>> +    object_child_foreach_recursive(obj, pc_dimm_slot2bitmap, opaque);
>>      return 0;
>>  }
>>  
>> @@ -100,7 +100,8 @@ static int pc_dimm_get_free_slot(const int *hint, int 
>> max_slots, Error **errp)
>>      }
>>  
>>      bitmap = bitmap_new(max_slots);
>> -    object_child_foreach(qdev_get_machine(), pc_dimm_slot2bitmap, bitmap);
>> +    object_child_foreach_recursive(qdev_get_machine(),
>> +                                   pc_dimm_slot2bitmap, bitmap);
>>  
>>      /* check if requested slot is not occupied */
>>      if (hint) {

(similar to nvdimm_device_list) and here:

>> diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
>> index e3a6594..ce4b8a5 100644
>> --- a/hw/virtio/virtio-balloon.c
>> +++ b/hw/virtio/virtio-balloon.c
>> @@ -591,7 +591,7 @@ static int build_dimm_list(Object *obj, void *opaque)
>>          }
>>      }
>>  
>> -    object_child_foreach(obj, build_dimm_list, opaque);
>> +    object_child_foreach_recursive(obj, build_dimm_list, opaque);
>>      return 0;
>>  }

(similar to find_sysbus_device)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]