From e5e83432a8567b042f1eb8715afb8c3f610da9ad Mon Sep 17 00:00:00 2001 From: jiazhongfeng Date: Wed, 23 Oct 2024 10:05:12 +0800 Subject: [PATCH] Add Support for numa being initialized with mem 0 and memory hotplug on it --- backends/hostmem-file.c | 1 - backends/hostmem.c | 9 +++------ hw/core/machine.c | 5 ++++- hw/core/numa.c | 4 ++++ 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/backends/hostmem-file.c b/backends/hostmem-file.c index cd038024fa..6be6d40541 100644 --- a/backends/hostmem-file.c +++ b/backends/hostmem-file.c @@ -43,7 +43,6 @@ file_backend_memory_alloc(HostMemoryBackend *backend, Error **errp) gchar *name; if (!backend->size) { - error_setg(errp, "can't create backend with size 0"); return; } if (!fb->mem_path) { diff --git a/backends/hostmem.c b/backends/hostmem.c index c9ddaec849..ae35274620 100644 --- a/backends/hostmem.c +++ b/backends/hostmem.c @@ -64,12 +64,6 @@ host_memory_backend_set_size(Object *obj, Visitor *v, const char *name, if (!visit_type_size(v, name, &value, errp)) { return; } - if (!value) { - error_setg(errp, - "property '%s' of %s doesn't take value '%" PRIu64 "'", - name, object_get_typename(obj), value); - return; - } backend->size = value; } @@ -337,6 +331,9 @@ host_memory_backend_memory_complete(UserCreatable *uc, Error **errp) goto out; } + if (0 == backend->size) { + return; + } ptr = memory_region_get_ram_ptr(&backend->mr); sz = memory_region_size(&backend->mr); diff --git a/hw/core/machine.c b/hw/core/machine.c index cb539104a1..68b08f2c86 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -1104,7 +1104,10 @@ MemoryRegion *machine_consume_memdev(MachineState *machine, HostMemoryBackend *backend) { MemoryRegion *ret = host_memory_backend_get_memory(backend); - + if (NULL == ret) + { + return ret; + } if (memory_region_is_mapped(ret)) { error_report("memory backend %s can't be used multiple times.", object_get_canonical_path_component(OBJECT(backend))); diff --git a/hw/core/numa.c b/hw/core/numa.c index 1aa05dcf42..1b9eac4051 100644 --- a/hw/core/numa.c +++ b/hw/core/numa.c @@ -629,6 +629,10 @@ static void numa_init_memdev_container(MachineState *ms, MemoryRegion *ram) continue; } MemoryRegion *seg = machine_consume_memdev(ms, backend); + if (seg == NULL) + { + continue; + } memory_region_add_subregion(ram, addr, seg); addr += size; } -- Gitee