diff options
author | Steve Sistare <steven.sistare@oracle.com> | 2025-01-15 11:00:27 -0800 |
---|---|---|
committer | Fabiano Rosas <farosas@suse.de> | 2025-01-29 11:43:03 -0300 |
commit | 57ad6ab804cd24d6dd4a08f40f83081c393ee0b9 (patch) | |
tree | 443087f3c1413c5187594bdcebfd8f50dcc37423 /backends | |
parent | ed19620846cfe0206d88fd37522a79de96ebddc6 (diff) | |
download | qemu-57ad6ab804cd24d6dd4a08f40f83081c393ee0b9.zip qemu-57ad6ab804cd24d6dd4a08f40f83081c393ee0b9.tar.gz qemu-57ad6ab804cd24d6dd4a08f40f83081c393ee0b9.tar.bz2 |
backends/hostmem-shm: factor out allocation of "anonymous shared memory with an fd"
Let's factor it out so we can reuse it.
Signed-off-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Link: https://lore.kernel.org/r/1736967650-129648-2-git-send-email-steven.sistare@oracle.com
Signed-off-by: Fabiano Rosas <farosas@suse.de>
Diffstat (limited to 'backends')
-rw-r--r-- | backends/hostmem-shm.c | 45 |
1 files changed, 4 insertions, 41 deletions
diff --git a/backends/hostmem-shm.c b/backends/hostmem-shm.c index 5551ba7..fabee41 100644 --- a/backends/hostmem-shm.c +++ b/backends/hostmem-shm.c @@ -25,11 +25,9 @@ struct HostMemoryBackendShm { static bool shm_backend_memory_alloc(HostMemoryBackend *backend, Error **errp) { - g_autoptr(GString) shm_name = g_string_new(NULL); g_autofree char *backend_name = NULL; uint32_t ram_flags; - int fd, oflag; - mode_t mode; + int fd; if (!backend->size) { error_setg(errp, "can't create shm backend with size 0"); @@ -41,48 +39,13 @@ shm_backend_memory_alloc(HostMemoryBackend *backend, Error **errp) return false; } - /* - * Let's use `mode = 0` because we don't want other processes to open our - * memory unless we share the file descriptor with them. - */ - mode = 0; - oflag = O_RDWR | O_CREAT | O_EXCL; - backend_name = host_memory_backend_get_name(backend); - - /* - * Some operating systems allow creating anonymous POSIX shared memory - * objects (e.g. FreeBSD provides the SHM_ANON constant), but this is not - * defined by POSIX, so let's create a unique name. - * - * From Linux's shm_open(3) man-page: - * For portable use, a shared memory object should be identified - * by a name of the form /somename;" - */ - g_string_printf(shm_name, "/qemu-" FMT_pid "-shm-%s", getpid(), - backend_name); - - fd = shm_open(shm_name->str, oflag, mode); + fd = qemu_shm_alloc(backend->size, errp); if (fd < 0) { - error_setg_errno(errp, errno, - "failed to create POSIX shared memory"); - return false; - } - - /* - * We have the file descriptor, so we no longer need to expose the - * POSIX shared memory object. However it will remain allocated as long as - * there are file descriptors pointing to it. - */ - shm_unlink(shm_name->str); - - if (ftruncate(fd, backend->size) == -1) { - error_setg_errno(errp, errno, - "failed to resize POSIX shared memory to %" PRIu64, - backend->size); - close(fd); return false; } + /* Let's do the same as memory-backend-ram,share=on would do. */ + backend_name = host_memory_backend_get_name(backend); ram_flags = RAM_SHARED; ram_flags |= backend->reserve ? 0 : RAM_NORESERVE; |