We want to actually use resizeable allocations in resizeable ram blocks (IOW, make everything between used_length and max_length inaccessible) - however, not all ram block notifiers can support that.
Introduce a way to detect if any registered notifier does not support resizes - ram_block_notifiers_support_resize() - which we can later use to fallback to legacy handling if a registered notifier (esp., SEV and HAX) does not support actual resizes. Reviewed-by: Peter Xu <pet...@redhat.com> Cc: Richard Henderson <r...@twiddle.net> Cc: Paolo Bonzini <pbonz...@redhat.com> Cc: "Dr. David Alan Gilbert" <dgilb...@redhat.com> Cc: Eduardo Habkost <ehabk...@redhat.com> Cc: Marcel Apfelbaum <marcel.apfelb...@gmail.com> Cc: "Michael S. Tsirkin" <m...@redhat.com> Cc: Igor Mammedov <imamm...@redhat.com> Signed-off-by: David Hildenbrand <da...@redhat.com> --- hw/core/numa.c | 12 ++++++++++++ include/exec/ramlist.h | 1 + 2 files changed, 13 insertions(+) diff --git a/hw/core/numa.c b/hw/core/numa.c index 37ce175e13..1d5288c22c 100644 --- a/hw/core/numa.c +++ b/hw/core/numa.c @@ -914,3 +914,15 @@ void ram_block_notify_resize(void *host, size_t old_size, size_t new_size) } } } + +bool ram_block_notifiers_support_resize(void) +{ + RAMBlockNotifier *notifier; + + QLIST_FOREACH(notifier, &ram_list.ramblock_notifiers, next) { + if (!notifier->ram_block_resized) { + return false; + } + } + return true; +} diff --git a/include/exec/ramlist.h b/include/exec/ramlist.h index 293c0ddabe..ac5811be96 100644 --- a/include/exec/ramlist.h +++ b/include/exec/ramlist.h @@ -79,6 +79,7 @@ void ram_block_notifier_remove(RAMBlockNotifier *n); 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); void ram_block_notify_resize(void *host, size_t old_size, size_t new_size); +bool ram_block_notifiers_support_resize(void); void ram_block_dump(Monitor *mon); -- 2.24.1