qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v2 6/7] hostmem: Handle remapping of RAM


From: David Hildenbrand
Subject: Re: [PATCH v2 6/7] hostmem: Handle remapping of RAM
Date: Tue, 12 Nov 2024 23:24:14 +0100
User-agent: Mozilla Thunderbird

On 12.11.24 19:17, William Roche wrote:
On 11/12/24 14:45, David Hildenbrand wrote:
On 07.11.24 11:21, “William Roche wrote:
From: David Hildenbrand <david@redhat.com>

Let's register a RAM block notifier and react on remap notifications.
Simply re-apply the settings. Warn only when something goes wrong.

Note: qemu_ram_remap() will not remap when RAM_PREALLOC is set. Could be
that hostmem is still missing to update that flag ...

Signed-off-by: David Hildenbrand <david@redhat.com>
Signed-off-by: William Roche <william.roche@oracle.com>
---
   backends/hostmem.c       | 29 +++++++++++++++++++++++++++++
   include/sysemu/hostmem.h |  1 +
   2 files changed, 30 insertions(+)

diff --git a/backends/hostmem.c b/backends/hostmem.c
index bf85d716e5..fbd8708664 100644
--- a/backends/hostmem.c
+++ b/backends/hostmem.c
@@ -361,11 +361,32 @@ static void
host_memory_backend_set_prealloc_threads(Object *obj, Visitor *v,
       backend->prealloc_threads = value;
   }
+static void host_memory_backend_ram_remapped(RAMBlockNotifier *n,
void *host,
+                                             size_t offset, size_t size)
+{
+    HostMemoryBackend *backend = container_of(n, HostMemoryBackend,
+                                              ram_notifier);
+    Error *err = NULL;
+
+    if (!host_memory_backend_mr_inited(backend) ||
+        memory_region_get_ram_ptr(&backend->mr) != host) {
+        return;
+    }
+
+    host_memory_backend_apply_settings(backend, host + offset, size,
&err);
+    if (err) {
+        warn_report_err(err);

I wonder if we want to fail hard instead, or have a way to tell the
notifier that something wen wrong.


It depends on what the caller would do with this information. Is there a
way to workaround the problem ? (I don't think so)

Primarily only preallocation will fail, and that ...

Can the VM continue to run without doing anything about it ? (Maybe?)


... will make crash the QEMU at some point later (SIGBUS), which is very bad.

Currently all numa notifiers don't return errors.

This function is only called from ram_block_notify_remap() in
qemu_ram_remap(), I would vote for a "fail hard" in case where the
settings are mandatory to continue.

"fail hard" is likely the best approach for now.

--
Cheers,

David / dhildenb




reply via email to

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