[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 12/14] backends/hostmem-file: Allow to specify full p
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 12/14] backends/hostmem-file: Allow to specify full pathname for backing file |
Date: |
Wed, 4 Nov 2015 17:18:30 +0100 |
From: Pavel Fedin <address@hidden>
This allows to explicitly specify file name to use with the backend. This
is important when using it together with ivshmem in order to make it backed
by hugetlbfs. By default filename is autogenerated using mkstemp(), and the
file is unlink()ed after creation, effectively making it anonymous. This is
not very useful with ivshmem because it ends up in a memory which cannot be
accessed by something else.
Distinction between directory and file name is done by stat() check. If an
existing directory is given, the code keeps old behavior. Otherwise it
creates or opens a file with the given pathname.
Signed-off-by: Pavel Fedin <address@hidden>
Tested-by: Igor Skalkin <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
exec.c | 34 +++++++++++++++++++++-------------
qemu-doc.texi | 2 +-
2 files changed, 22 insertions(+), 14 deletions(-)
diff --git a/exec.c b/exec.c
index 819ecc3..1e8b51b 100644
--- a/exec.c
+++ b/exec.c
@@ -1205,6 +1205,7 @@ static void *file_ram_alloc(RAMBlock *block,
const char *path,
Error **errp)
{
+ struct stat st;
char *filename;
char *sanitized_name;
char *c;
@@ -1233,26 +1234,33 @@ static void *file_ram_alloc(RAMBlock *block,
goto error;
}
- /* Make name safe to use with mkstemp by replacing '/' with '_'. */
- sanitized_name = g_strdup(memory_region_name(block->mr));
- for (c = sanitized_name; *c != '\0'; c++) {
- if (*c == '/')
- *c = '_';
- }
+ if (!stat(path, &st) && S_ISDIR(st.st_mode)) {
+ /* Make name safe to use with mkstemp by replacing '/' with '_'. */
+ sanitized_name = g_strdup(memory_region_name(block->mr));
+ for (c = sanitized_name; *c != '\0'; c++) {
+ if (*c == '/') {
+ *c = '_';
+ }
+ }
- filename = g_strdup_printf("%s/qemu_back_mem.%s.XXXXXX", path,
- sanitized_name);
- g_free(sanitized_name);
+ filename = g_strdup_printf("%s/qemu_back_mem.%s.XXXXXX", path,
+ sanitized_name);
+ g_free(sanitized_name);
+
+ fd = mkstemp(filename);
+ if (fd >= 0) {
+ unlink(filename);
+ }
+ g_free(filename);
+ } else {
+ fd = open(path, O_RDWR | O_CREAT, 0644);
+ }
- fd = mkstemp(filename);
if (fd < 0) {
error_setg_errno(errp, errno,
"unable to create backing store for hugepages");
- g_free(filename);
goto error;
}
- unlink(filename);
- g_free(filename);
memory = ROUND_UP(memory, hpagesize);
diff --git a/qemu-doc.texi b/qemu-doc.texi
index 3126abd..460ab71 100644
--- a/qemu-doc.texi
+++ b/qemu-doc.texi
@@ -1299,7 +1299,7 @@ Instead of specifying the <shm size> using POSIX shm, you
may specify
a memory backend that has hugepage support:
@example
-qemu-system-i386 -object
memory-backend-file,size=1G,mem-path=/mnt/hugepages,id=mb1
+qemu-system-i386 -object
memory-backend-file,size=1G,mem-path=/mnt/hugepages/my-shmem-file,id=mb1
-device ivshmem,memdev=mb1
@end example
--
1.8.3.1
- [Qemu-devel] [PULL 05/14] qemu-log: remove -d ioport, (continued)
- [Qemu-devel] [PULL 05/14] qemu-log: remove -d ioport, Paolo Bonzini, 2015/11/04
- [Qemu-devel] [PULL 01/14] file_ram_alloc: propagate error to caller instead of terminating QEMU, Paolo Bonzini, 2015/11/04
- [Qemu-devel] [PULL 04/14] ioport: do not use CPU_LOG_IOPORT, Paolo Bonzini, 2015/11/04
- [Qemu-devel] [PULL 03/14] target-i386: fix pcmpxstrx equal-ordered (strstr) mode, Paolo Bonzini, 2015/11/04
- [Qemu-devel] [PULL 10/14] cpu-exec: Fix compiler warning (-Werror=clobbered), Paolo Bonzini, 2015/11/04
- [Qemu-devel] [PULL 06/14] pc: Set hw_version on all machine classes, Paolo Bonzini, 2015/11/04
- [Qemu-devel] [PULL 09/14] memory: call begin, log_start and commit when registering a new listener, Paolo Bonzini, 2015/11/04
- [Qemu-devel] [PULL 11/14] configure: disallow ccache during compile tests, Paolo Bonzini, 2015/11/04
- [Qemu-devel] [PULL 14/14] configure: disable FORTIFY_SOURCE under clang, Paolo Bonzini, 2015/11/04
- [Qemu-devel] [PULL 07/14] osdep: Rename qemu_{get, set}_version() to qemu_{, set_}hw_version(), Paolo Bonzini, 2015/11/04
- [Qemu-devel] [PULL 12/14] backends/hostmem-file: Allow to specify full pathname for backing file,
Paolo Bonzini <=
- [Qemu-devel] [PULL 13/14] iscsi: Translate scsi sense into error code, Paolo Bonzini, 2015/11/04
- [Qemu-devel] [PULL 08/14] megasas: Use qemu_hw_version() instead of QEMU_VERSION, Paolo Bonzini, 2015/11/04
- Re: [Qemu-devel] [PULL 00/14] Misc changes for QEMU 2.4-rc1, Peter Maydell, 2015/11/04
- Re: [Qemu-devel] [PULL 00/14] Misc changes for QEMU 2.4-rc1, Denis V. Lunev, 2015/11/04