diff options
author | 2024-06-06 11:33:06 +0200 | |
---|---|---|
committer | 2024-06-08 10:33:38 +0200 | |
commit | a2b6a96505097c54f5db4c77f66e9c47af4dad22 (patch) | |
tree | 4114a9480dc28e305404575b3e40b9ae953fec70 | |
parent | backends/hostmem: Report error when memory size is unaligned (diff) | |
download | qemu-a2b6a96505097c54f5db4c77f66e9c47af4dad22.tar.xz qemu-a2b6a96505097c54f5db4c77f66e9c47af4dad22.zip |
machine, hostmem: improve error messages for unsupported features
Detect early unsupported MADV_MERGEABLE and MADV_DONTDUMP, and print a clearer
error message that points to the deficiency of the host.
Cc: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r-- | backends/hostmem.c | 16 | ||||
-rw-r--r-- | hw/core/machine.c | 8 |
2 files changed, 24 insertions, 0 deletions
diff --git a/backends/hostmem.c b/backends/hostmem.c index 1edc0ede2a..6da3d7383e 100644 --- a/backends/hostmem.c +++ b/backends/hostmem.c @@ -170,6 +170,14 @@ static void host_memory_backend_set_merge(Object *obj, bool value, Error **errp) { HostMemoryBackend *backend = MEMORY_BACKEND(obj); + if (QEMU_MADV_MERGEABLE == QEMU_MADV_INVALID) { + if (value) { + error_setg(errp, "Memory merging is not supported on this host"); + } + assert(!backend->merge); + return; + } + if (!host_memory_backend_mr_inited(backend)) { backend->merge = value; return; @@ -196,6 +204,14 @@ static void host_memory_backend_set_dump(Object *obj, bool value, Error **errp) { HostMemoryBackend *backend = MEMORY_BACKEND(obj); + if (QEMU_MADV_DONTDUMP == QEMU_MADV_INVALID) { + if (!value) { + error_setg(errp, "Dumping guest memory cannot be disabled on this host"); + } + assert(backend->dump); + return; + } + if (!host_memory_backend_mr_inited(backend)) { backend->dump = value; return; diff --git a/hw/core/machine.c b/hw/core/machine.c index a0ee43ca5c..c93d249244 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -428,6 +428,10 @@ static void machine_set_dump_guest_core(Object *obj, bool value, Error **errp) { MachineState *ms = MACHINE(obj); + if (!value && QEMU_MADV_DONTDUMP == QEMU_MADV_INVALID) { + error_setg(errp, "Dumping guest memory cannot be disabled on this host"); + return; + } ms->dump_guest_core = value; } @@ -442,6 +446,10 @@ static void machine_set_mem_merge(Object *obj, bool value, Error **errp) { MachineState *ms = MACHINE(obj); + if (value && QEMU_MADV_MERGEABLE == QEMU_MADV_INVALID) { + error_setg(errp, "Memory merging is not supported on this host"); + return; + } ms->mem_merge = value; } |