diff mbox

[v7,RESEND,6/8] exec: file_ram_alloc: don't exit if failed to preallocate memory

Message ID af177e1c0f33c444d3e1ee6bb625f13dcaceab58.1410240131.git.hutao@cn.fujitsu.com
State New
Headers show

Commit Message

Hu Tao Sept. 9, 2014, 5:27 a.m. UTC
When using monitor command object_add to add a memory backend file
but failed to preallocate memory for it, qemu exits silently. In
the case we'd better give an error message and keep guest running.

The problem can be reproduced as follows:

1. run qemu with -mem-prealloc
2. (monitor)object_add memory-backend-file,size=100000G,mem-path=/hugepages,id=mem-file0

Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---
 exec.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Paolo Bonzini Sept. 9, 2014, 11:23 a.m. UTC | #1
Il 09/09/2014 07:27, Hu Tao ha scritto:
> diff --git a/exec.c b/exec.c
> index 2b9c4c5..0362cd8 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -1129,8 +1129,8 @@ static void *file_ram_alloc(RAMBlock *block,
>      return area;
>  
>  error:
> -    if (mem_prealloc) {
> -        exit(1);
> +    if (area && area != MAP_FAILED) {
> +        munmap(area, memory);
>      }

"area" is being used uninitialized here, and os_mem_prealloc can still
do exit(1).  I'm not sure what this patch is doing...

Paolo

>      return NULL;
diff mbox

Patch

diff --git a/exec.c b/exec.c
index 2b9c4c5..0362cd8 100644
--- a/exec.c
+++ b/exec.c
@@ -1129,8 +1129,8 @@  static void *file_ram_alloc(RAMBlock *block,
     return area;
 
 error:
-    if (mem_prealloc) {
-        exit(1);
+    if (area && area != MAP_FAILED) {
+        munmap(area, memory);
     }
     return NULL;
 }