From: "Michael S. Tsirkin" <mst@redhat.com>
To: Zhang Yi <yi.z.zhang@linux.intel.com>
Cc: xiaoguangrong.eric@gmail.com, stefanha@redhat.com,
pbonzini@redhat.com, pagupta@redhat.com,
yu.c.zhang@linux.intel.com, ehabkost@redhat.com,
qemu-devel@nongnu.org, imammedo@redhat.com,
dan.j.williams@intel.com
Subject: Re: [Qemu-devel] [PATCH V9 3/6] util/mmap-alloc: switch 'shared' to 'flags' parameter
Date: Wed, 16 Jan 2019 10:49:57 -0500 [thread overview]
Message-ID: <20190116104927-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <b1c0ccd8b18467b6df33e90c8606b184ed866251.1547624239.git.yi.z.zhang@linux.intel.com>
On Wed, Jan 16, 2019 at 04:10:45PM +0800, Zhang Yi wrote:
> As more flag parameters besides the existing 'shared' are going to be
> added to qemu_ram_mmap() and qemu_ram_alloc_from_{file,fd}(), let's
> switch 'shared' to a 'flags' parameter in advance, so as to ease the
> further additions.
>
> Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
> Signed-off-by: Zhang Yi <yi.z.zhang@linux.intel.com>
> ---
> exec.c | 7 ++++---
> include/qemu/mmap-alloc.h | 19 ++++++++++++++++++-
> util/mmap-alloc.c | 8 +++++---
> util/oslib-posix.c | 9 ++++++++-
> 4 files changed, 35 insertions(+), 8 deletions(-)
>
> diff --git a/exec.c b/exec.c
> index bb6170d..e92a7da 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -1810,6 +1810,7 @@ static void *file_ram_alloc(RAMBlock *block,
> ram_addr_t memory,
> int fd,
> bool truncate,
> + uint32_t flags,
> Error **errp)
> {
> void *area;
But given that flags is an un-annotated uint32_t does sparse
actually do any checks?
I'm lost ...
> @@ -1859,8 +1860,7 @@ static void *file_ram_alloc(RAMBlock *block,
> perror("ftruncate");
> }
>
> - area = qemu_ram_mmap(fd, memory, block->mr->align,
> - block->flags & RAM_SHARED);
> + area = qemu_ram_mmap(fd, memory, block->mr->align, flags);
> if (area == MAP_FAILED) {
> error_setg_errno(errp, errno,
> "unable to map backing store for guest RAM");
> @@ -2279,7 +2279,8 @@ RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr,
> new_block->used_length = size;
> new_block->max_length = size;
> new_block->flags = ram_flags;
> - new_block->host = file_ram_alloc(new_block, size, fd, !file_size, errp);
> + new_block->host = file_ram_alloc(new_block, size, fd, !file_size,
> + ram_flags, errp);
> if (!new_block->host) {
> g_free(new_block);
> return NULL;
> diff --git a/include/qemu/mmap-alloc.h b/include/qemu/mmap-alloc.h
> index 50385e3..6fe6ed4 100644
> --- a/include/qemu/mmap-alloc.h
> +++ b/include/qemu/mmap-alloc.h
> @@ -7,7 +7,24 @@ size_t qemu_fd_getpagesize(int fd);
>
> size_t qemu_mempath_getpagesize(const char *mem_path);
>
> -void *qemu_ram_mmap(int fd, size_t size, size_t align, bool shared);
> +/**
> + * qemu_ram_mmap: mmap the specified file or device.
> + *
> + * Parameters:
> + * @fd: the file or the device to mmap
> + * @size: the number of bytes to be mmaped
> + * @align: if not zero, specify the alignment of the starting mapping address;
> + * otherwise, the alignment in use will be determined by QEMU.
> + * @flags: specifies additional properties of the mapping, which can be one or
> + * bit-or of following values
> + * - RAM_SHARED: mmap with MAP_SHARED flag
> + * Other bits are ignored.
> + *
> + * Return:
> + * On success, return a pointer to the mapped area.
> + * On failure, return MAP_FAILED.
> + */
> +void *qemu_ram_mmap(int fd, size_t size, size_t align, uint32_t flags);
>
> void qemu_ram_munmap(void *ptr, size_t size);
>
> diff --git a/util/mmap-alloc.c b/util/mmap-alloc.c
> index fd329ec..8f0a740 100644
> --- a/util/mmap-alloc.c
> +++ b/util/mmap-alloc.c
> @@ -13,6 +13,7 @@
> #include "qemu/osdep.h"
> #include "qemu/mmap-alloc.h"
> #include "qemu/host-utils.h"
> +#include "exec/memory.h"
>
> #define HUGETLBFS_MAGIC 0x958458f6
>
> @@ -75,7 +76,7 @@ size_t qemu_mempath_getpagesize(const char *mem_path)
> return getpagesize();
> }
>
> -void *qemu_ram_mmap(int fd, size_t size, size_t align, bool shared)
> +void *qemu_ram_mmap(int fd, size_t size, size_t align, uint32_t flags)
> {
> /*
> * Note: this always allocates at least one extra page of virtual address
> @@ -92,11 +93,12 @@ void *qemu_ram_mmap(int fd, size_t size, size_t align, bool shared)
> * anonymous memory is OK.
> */
> int anonfd = fd == -1 || qemu_fd_getpagesize(fd) == getpagesize() ? -1 : fd;
> - int flags = anonfd == -1 ? MAP_ANONYMOUS : MAP_NORESERVE;
> - void *ptr = mmap(0, total, PROT_NONE, flags | MAP_PRIVATE, anonfd, 0);
> + int mmap_flags = anonfd == -1 ? MAP_ANONYMOUS : MAP_NORESERVE;
> + void *ptr = mmap(0, total, PROT_NONE, mmap_flags | MAP_PRIVATE, anonfd, 0);
> #else
> void *ptr = mmap(0, total, PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
> #endif
> + bool shared = flags & RAM_SHARED;
> size_t offset;
> void *ptr1;
>
> diff --git a/util/oslib-posix.c b/util/oslib-posix.c
> index fbd0dc8..75a0171 100644
> --- a/util/oslib-posix.c
> +++ b/util/oslib-posix.c
> @@ -54,6 +54,7 @@
> #endif
>
> #include "qemu/mmap-alloc.h"
> +#include "exec/memory.h"
>
> #ifdef CONFIG_DEBUG_STACK_USAGE
> #include "qemu/error-report.h"
> @@ -203,7 +204,13 @@ void *qemu_memalign(size_t alignment, size_t size)
> void *qemu_anon_ram_alloc(size_t size, uint64_t *alignment, bool shared)
> {
> size_t align = QEMU_VMALLOC_ALIGN;
> - void *ptr = qemu_ram_mmap(-1, size, align, shared);
> + uint32_t flags = 0;
> + void *ptr;
> +
> + if (shared) {
> + flags = RAM_SHARED;
> + }
> + ptr = qemu_ram_mmap(-1, size, align, flags);
>
> if (ptr == MAP_FAILED) {
> return NULL;
> --
> 2.7.4
next prev parent reply other threads:[~2019-01-16 15:50 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-16 8:10 [Qemu-devel] [PATCH V9 0/6] support MAP_SYNC for memory-backend-file Zhang Yi
2019-01-16 8:10 ` [Qemu-devel] [PATCH V9 1/6] numa: Fixed the memory leak of numa error message Zhang Yi
2019-01-16 15:56 ` Michael S. Tsirkin
2019-01-18 17:36 ` Eduardo Habkost
2019-01-16 8:10 ` [Qemu-devel] [PATCH V9 2/6] memory: use sparse feature define RAM_FLAG Zhang Yi
2019-01-16 15:55 ` Michael S. Tsirkin
2019-01-21 6:35 ` Yi Zhang
2019-01-21 20:24 ` Michael S. Tsirkin
2019-01-22 3:25 ` Yi Zhang
2019-01-16 8:10 ` [Qemu-devel] [PATCH V9 3/6] util/mmap-alloc: switch 'shared' to 'flags' parameter Zhang Yi
2019-01-16 15:49 ` Michael S. Tsirkin [this message]
2019-01-16 8:10 ` [Qemu-devel] [PATCH V9 4/6] util/mmap-alloc: support MAP_SYNC in qemu_ram_mmap() Zhang Yi
2019-01-16 15:58 ` Michael S. Tsirkin
2019-01-18 18:11 ` Eduardo Habkost
2019-01-21 5:15 ` Yi Zhang
2019-01-21 14:44 ` Eduardo Habkost
2019-01-22 3:21 ` Yi Zhang
2019-01-22 3:27 ` Michael S. Tsirkin
2019-01-22 17:33 ` Dan Williams
2019-01-22 18:47 ` Michael S. Tsirkin
2019-01-16 8:11 ` [Qemu-devel] [PATCH V9 5/6] hostmem: add more information in error messages Zhang Yi
2019-01-16 11:30 ` Stefano Garzarella
2019-01-16 8:11 ` [Qemu-devel] [PATCH V9 6/6] docs: Added MAP_SYNC documentation Zhang Yi
2019-01-16 15:40 ` Michael S. Tsirkin
2019-01-21 6:11 ` Yi Zhang
2019-01-21 7:21 ` Pankaj Gupta
2019-01-21 7:57 ` Yi Zhang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190116104927-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=dan.j.williams@intel.com \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=pagupta@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=xiaoguangrong.eric@gmail.com \
--cc=yi.z.zhang@linux.intel.com \
--cc=yu.c.zhang@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.