diff mbox

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

Message ID a1ba6e5c4396928e465266be10fe106f14efec18.1408096657.git.hutao@cn.fujitsu.com
State New
Headers show

Commit Message

Hu Tao Aug. 15, 2014, 10:07 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

Peter Crosthwaite Aug. 19, 2014, 12:45 p.m. UTC | #1
On Fri, Aug 15, 2014 at 8:07 PM, Hu Tao <hutao@cn.fujitsu.com> wrote:
> 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>

Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>

> ---
>  exec.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/exec.c b/exec.c
> index 787cc7a..c361752 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -1094,8 +1094,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;
>  }
> --
> 1.9.3
>
>
diff mbox

Patch

diff --git a/exec.c b/exec.c
index 787cc7a..c361752 100644
--- a/exec.c
+++ b/exec.c
@@ -1094,8 +1094,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;
 }