[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v7 08/13] numa: use QLIST_FOREACH_SAFE() for RAM block notifiers
From: |
Stefan Hajnoczi |
Subject: |
[PATCH v7 08/13] numa: use QLIST_FOREACH_SAFE() for RAM block notifiers |
Date: |
Thu, 13 Oct 2022 14:59:03 -0400 |
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@redhat.com>
Reviewed-by: David Hildenbrand <david@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);
}
--
2.37.3
- [PATCH v7 02/13] blkio: add libblkio block driver, (continued)
- [PATCH v7 02/13] blkio: add libblkio block driver, Stefan Hajnoczi, 2022/10/13
- [PATCH v7 03/13] numa: call ->ram_block_removed() in ram_block_notifer_remove(), Stefan Hajnoczi, 2022/10/13
- [PATCH v7 04/13] block: pass size to bdrv_unregister_buf(), Stefan Hajnoczi, 2022/10/13
- [PATCH v7 05/13] block: use BdrvRequestFlags type for supported flag fields, Stefan Hajnoczi, 2022/10/13
- [PATCH v7 06/13] block: add BDRV_REQ_REGISTERED_BUF request flag, Stefan Hajnoczi, 2022/10/13
- [PATCH v7 07/13] block: return errors from bdrv_register_buf(), Stefan Hajnoczi, 2022/10/13
- [PATCH v7 11/13] stubs: add qemu_ram_block_from_host() and qemu_ram_get_fd(), Stefan Hajnoczi, 2022/10/13
- [PATCH v7 09/13] block: add BlockRAMRegistrar, Stefan Hajnoczi, 2022/10/13
- [PATCH v7 08/13] numa: use QLIST_FOREACH_SAFE() for RAM block notifiers,
Stefan Hajnoczi <=
- [PATCH v7 10/13] exec/cpu-common: add qemu_ram_get_fd(), Stefan Hajnoczi, 2022/10/13
- [PATCH v7 13/13] virtio-blk: use BDRV_REQ_REGISTERED_BUF optimization hint, Stefan Hajnoczi, 2022/10/13
- [PATCH v7 12/13] blkio: implement BDRV_REQ_REGISTERED_BUF optimization, Stefan Hajnoczi, 2022/10/13
- Re: [PATCH v7 00/13] blkio: add libblkio BlockDriver, Stefano Garzarella, 2022/10/19
- Re: [PATCH v7 00/13] blkio: add libblkio BlockDriver, Stefan Hajnoczi, 2022/10/26