d42e2de7bc
When using monitor command object_add to add a memory backend whose size is way too big to allocate memory for it, qemu just exits. In the case we'd better give an error message and keep guest running. The problem can be reproduced as follows: 1. run qemu 2. (monitor)object_add memory-backend-ram,size=100000G,id=ram0 Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
54 lines
1.2 KiB
C
54 lines
1.2 KiB
C
/*
|
|
* QEMU Host Memory Backend
|
|
*
|
|
* Copyright (C) 2013-2014 Red Hat Inc
|
|
*
|
|
* Authors:
|
|
* Igor Mammedov <imammedo@redhat.com>
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
* See the COPYING file in the top-level directory.
|
|
*/
|
|
#include "sysemu/hostmem.h"
|
|
#include "qom/object_interfaces.h"
|
|
|
|
#define TYPE_MEMORY_BACKEND_RAM "memory-backend-ram"
|
|
|
|
|
|
static void
|
|
ram_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
|
|
{
|
|
char *path;
|
|
|
|
if (!backend->size) {
|
|
error_setg(errp, "can't create backend with size 0");
|
|
return;
|
|
}
|
|
|
|
path = object_get_canonical_path_component(OBJECT(backend));
|
|
memory_region_init_ram(&backend->mr, OBJECT(backend), path,
|
|
backend->size, errp);
|
|
g_free(path);
|
|
}
|
|
|
|
static void
|
|
ram_backend_class_init(ObjectClass *oc, void *data)
|
|
{
|
|
HostMemoryBackendClass *bc = MEMORY_BACKEND_CLASS(oc);
|
|
|
|
bc->alloc = ram_backend_memory_alloc;
|
|
}
|
|
|
|
static const TypeInfo ram_backend_info = {
|
|
.name = TYPE_MEMORY_BACKEND_RAM,
|
|
.parent = TYPE_MEMORY_BACKEND,
|
|
.class_init = ram_backend_class_init,
|
|
};
|
|
|
|
static void register_types(void)
|
|
{
|
|
type_register_static(&ram_backend_info);
|
|
}
|
|
|
|
type_init(register_types);
|