[GEDI] [PATCH v6 08/13] numa: use QLIST_FOREACH_SAFE() for RAM block notifiers

David Hildenbrand david at redhat.com
Mon Oct 10 11:49:45 UTC 2022


On 06.10.22 23:35, Stefan Hajnoczi wrote:
> Make list traversal work when a callback removes a notifier
> mid-traversal. This is a cleanup to prevent bugs in the future.
> 
> Signed-off-by: Stefan Hajnoczi <stefanha at redhat.com>
> ---
>   hw/core/numa.c | 9 ++++++---
>   1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/hw/core/numa.c b/hw/core/numa.c
> index 31e6fe1caa..ea24a5fa8c 100644
> --- a/hw/core/numa.c
> +++ b/hw/core/numa.c
> @@ -857,8 +857,9 @@ void ram_block_notifier_remove(RAMBlockNotifier *n)
>   void ram_block_notify_add(void *host, size_t size, size_t max_size)
>   {
>       RAMBlockNotifier *notifier;
> +    RAMBlockNotifier *next;
>   
> -    QLIST_FOREACH(notifier, &ram_list.ramblock_notifiers, next) {
> +    QLIST_FOREACH_SAFE(notifier, &ram_list.ramblock_notifiers, next, next) {
>           if (notifier->ram_block_added) {
>               notifier->ram_block_added(notifier, host, size, max_size);
>           }
> @@ -868,8 +869,9 @@ void ram_block_notify_add(void *host, size_t size, size_t max_size)
>   void ram_block_notify_remove(void *host, size_t size, size_t max_size)
>   {
>       RAMBlockNotifier *notifier;
> +    RAMBlockNotifier *next;
>   
> -    QLIST_FOREACH(notifier, &ram_list.ramblock_notifiers, next) {
> +    QLIST_FOREACH_SAFE(notifier, &ram_list.ramblock_notifiers, next, next) {
>           if (notifier->ram_block_removed) {
>               notifier->ram_block_removed(notifier, host, size, max_size);
>           }
> @@ -879,8 +881,9 @@ void ram_block_notify_remove(void *host, size_t size, size_t max_size)
>   void ram_block_notify_resize(void *host, size_t old_size, size_t new_size)
>   {
>       RAMBlockNotifier *notifier;
> +    RAMBlockNotifier *next;
>   
> -    QLIST_FOREACH(notifier, &ram_list.ramblock_notifiers, next) {
> +    QLIST_FOREACH_SAFE(notifier, &ram_list.ramblock_notifiers, next, next) {
>           if (notifier->ram_block_resized) {
>               notifier->ram_block_resized(notifier, host, old_size, new_size);
>           }

Reviewed-by: David Hildenbrand <david at redhat.com>

-- 
Thanks,

David / dhildenb



More information about the integration mailing list