aboutsummaryrefslogtreecommitdiff
path: root/exec.c
diff options
context:
space:
mode:
authorHu Tao <hutao@cn.fujitsu.com>2014-09-09 13:28:01 +0800
committerPaolo Bonzini <pbonzini@redhat.com>2014-09-09 13:41:44 +0200
commitfc7a5800ad13fa14529b38d2255fa87f11db626b (patch)
tree3fd5c1f7760777694b66c39e0c10f50e87c1e754 /exec.c
parent557529dd600fb0f1fc52e86c9679afa6a9368bc8 (diff)
exec: add parameter errp to gethugepagesize
Add parameter errp to gethugepagesize thus callers can handle errors. If user adds a memory-backend-file object using object_add command, specifying a non-existing directory for property mem-path, qemu will core dump with message: /nonexistingdir: No such file or directory Bad ram offset fffffffffffff000 Aborted (core dumped) This patch fixes the problem. With this patch, qemu reports an error message like: qemu-system-x86_64: -object memory-backend-file,mem-path=/nonexistingdir,id=mem-file0,size=128M: failed to get page size of file /nonexistingdir: No such file or directory Signed-off-by: Hu Tao <hutao@cn.fujitsu.com> Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'exec.c')
-rw-r--r--exec.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/exec.c b/exec.c
index 1100208760..dd1e57660a 100644
--- a/exec.c
+++ b/exec.c
@@ -1031,7 +1031,7 @@ void qemu_mutex_unlock_ramlist(void)
#define HUGETLBFS_MAGIC 0x958458f6
-static long gethugepagesize(const char *path)
+static long gethugepagesize(const char *path, Error **errp)
{
struct statfs fs;
int ret;
@@ -1041,7 +1041,8 @@ static long gethugepagesize(const char *path)
} while (ret != 0 && errno == EINTR);
if (ret != 0) {
- perror(path);
+ error_setg_errno(errp, errno, "failed to get page size of file %s",
+ path);
return 0;
}
@@ -1062,9 +1063,11 @@ static void *file_ram_alloc(RAMBlock *block,
void *area = NULL;
int fd;
uint64_t hpagesize;
+ Error *local_err = NULL;
- hpagesize = gethugepagesize(path);
- if (!hpagesize) {
+ hpagesize = gethugepagesize(path, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
goto error;
}