[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v1 10/13] numa: Introduce ram_block_notify_resized() and ram_bloc
From: |
David Hildenbrand |
Subject: |
[PATCH v1 10/13] numa: Introduce ram_block_notify_resized() and ram_block_notifiers_support_resize() |
Date: |
Mon, 3 Feb 2020 19:31:22 +0100 |
We want to actually resize ram blocks (make everything between
used_length and max_length inaccessible) - however, not all ram block
notifiers will support that.
So introduce a way to detect if any registered notifier does not support
it and add a way to notify all notifiers that support it.
Using ram_block_notifiers_support_resize(), we can keep the existing
handling for these special cases until they implement support (e.g.,
SEV, HAX) to resize.
Cc: Richard Henderson <address@hidden>
Cc: Paolo Bonzini <address@hidden>
Cc: "Dr. David Alan Gilbert" <address@hidden>
Cc: Eduardo Habkost <address@hidden>
Cc: Marcel Apfelbaum <address@hidden>
Signed-off-by: David Hildenbrand <address@hidden>
---
hw/core/numa.c | 21 +++++++++++++++++++++
include/exec/ramlist.h | 4 ++++
util/trace-events | 1 +
3 files changed, 26 insertions(+)
diff --git a/hw/core/numa.c b/hw/core/numa.c
index fed4046680..5ccfcbcd41 100644
--- a/hw/core/numa.c
+++ b/hw/core/numa.c
@@ -940,3 +940,24 @@ void ram_block_notify_remove(void *host, size_t size)
notifier->ram_block_removed(notifier, host, size);
}
}
+
+void ram_block_notify_resized(void *host, size_t oldsize, size_t newsize)
+{
+ RAMBlockNotifier *notifier;
+
+ QLIST_FOREACH(notifier, &ram_list.ramblock_notifiers, next) {
+ notifier->ram_block_resized(notifier, host, oldsize, newsize);
+ }
+}
+
+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 bc4faa1b00..33a380cbee 100644
--- a/include/exec/ramlist.h
+++ b/include/exec/ramlist.h
@@ -67,6 +67,8 @@ void qemu_mutex_unlock_ramlist(void);
struct RAMBlockNotifier {
void (*ram_block_added)(RAMBlockNotifier *n, void *host, size_t size);
void (*ram_block_removed)(RAMBlockNotifier *n, void *host, size_t size);
+ void (*ram_block_resized)(RAMBlockNotifier *n, void *host, size_t oldsize,
+ size_t newsize);
QLIST_ENTRY(RAMBlockNotifier) next;
};
@@ -74,6 +76,8 @@ void ram_block_notifier_add(RAMBlockNotifier *n);
void ram_block_notifier_remove(RAMBlockNotifier *n);
void ram_block_notify_add(void *host, size_t size);
void ram_block_notify_remove(void *host, size_t size);
+void ram_block_notify_resized(void *host, size_t oldsize, size_t newsize);
+bool ram_block_notifiers_support_resize(void);
void ram_block_dump(Monitor *mon);
diff --git a/util/trace-events b/util/trace-events
index 83b6639018..226f406c46 100644
--- a/util/trace-events
+++ b/util/trace-events
@@ -76,6 +76,7 @@ qemu_mutex_unlock(void *mutex, const char *file, const int
line) "released mutex
qemu_vfio_dma_reset_temporary(void *s) "s %p"
qemu_vfio_ram_block_added(void *s, void *p, size_t size) "s %p host %p size
0x%zx"
qemu_vfio_ram_block_removed(void *s, void *p, size_t size) "s %p host %p size
0x%zx"
+qemu_vfio_ram_block_resized(void *s, void *p, size_t oldsize, size_t newsizze)
"s %p host %p oldsize 0x%zx newsize 0x%zx"
qemu_vfio_find_mapping(void *s, void *p) "s %p host %p"
qemu_vfio_new_mapping(void *s, void *host, size_t size, int index, uint64_t
iova) "s %p host %p size %zu index %d iova 0x%"PRIx64
qemu_vfio_do_mapping(void *s, void *host, size_t size, uint64_t iova) "s %p
host %p size %zu iova 0x%"PRIx64
--
2.24.1
- Re: [PATCH v1 03/13] exec: Reuse qemu_ram_apply_settings() in qemu_ram_remap(), (continued)
- [PATCH v1 04/13] exec: Drop "shared" parameter from ram_block_add(), David Hildenbrand, 2020/02/03
- [PATCH v1 05/13] util/mmap-alloc: Factor out calculation of pagesize to mmap_pagesize(), David Hildenbrand, 2020/02/03
- [PATCH v1 07/13] util/mmap-alloc: Factor out populating of memory to mmap_populate(), David Hildenbrand, 2020/02/03
- [PATCH v1 10/13] numa: Introduce ram_block_notify_resized() and ram_block_notifiers_support_resize(),
David Hildenbrand <=
- [PATCH v1 09/13] util/mmap-alloc: Implement resizable mmaps, David Hildenbrand, 2020/02/03
- Re: [PATCH v1 09/13] util/mmap-alloc: Implement resizable mmaps, Murilo Opsfelder Araújo, 2020/02/06
- [PATCH v1 08/13] util/mmap-alloc: Prepare for resizable mmaps, David Hildenbrand, 2020/02/03