qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH RFC 3/4] exec: don't exit unconditionally if fai


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH RFC 3/4] exec: don't exit unconditionally if failed to allocate memory
Date: Sat, 14 Jun 2014 19:07:39 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0

Il 14/06/2014 06:48, Hu Tao ha scritto:
return -1 instead.

Now user can add objects memory-backend-ram on-the-fly, fail it if
cannot allocate memory rather than quit qemu.

Signed-off-by: Hu Tao <address@hidden>

This needs an audit of all callers or, alternatively, we need to add memory_region_init_ram_nofail. Better leave it for after the merge.

Paolo

---
 backends/hostmem-ram.c | 3 +++
 exec.c                 | 6 +++++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/backends/hostmem-ram.c b/backends/hostmem-ram.c
index d9a8290..afb305d 100644
--- a/backends/hostmem-ram.c
+++ b/backends/hostmem-ram.c
@@ -28,6 +28,9 @@ ram_backend_memory_alloc(HostMemoryBackend *backend, Error 
**errp)
     path = object_get_canonical_path_component(OBJECT(backend));
     memory_region_init_ram(&backend->mr, OBJECT(backend), path,
                            backend->size);
+    if (backend->mr.ram_addr == -1) {
+        error_setg(errp, "can't allocate memory");
+    }
     g_free(path);
 }

diff --git a/exec.c b/exec.c
index 8705cc5..74560e5 100644
--- a/exec.c
+++ b/exec.c
@@ -1228,7 +1228,7 @@ static ram_addr_t ram_block_add(RAMBlock *new_block)
             if (!new_block->host) {
                 fprintf(stderr, "Cannot set up guest memory '%s': %s\n",
                         new_block->mr->name, strerror(errno));
-                exit(1);
+                return -1;
             }
             memory_try_enable_merging(new_block->host, new_block->length);
         }
@@ -1356,6 +1356,10 @@ void qemu_ram_free(ram_addr_t addr)
 {
     RAMBlock *block;

+    if (addr == -1) {
+        return;
+    }
+
     /* This assumes the iothread lock is taken here too.  */
     qemu_mutex_lock_ramlist();
     QTAILQ_FOREACH(block, &ram_list.blocks, next) {





reply via email to

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