> > From: Zhang Yi <yi.z.zh...@linux.intel.com> > > besides the existing 'shared' flags, we are going to add > 'is_pmem' to qemu_ram_mmap(), which indicated the memory backend > file is a persist memory. > > Signed-off-by: Haozhong Zhang <haozhong.zh...@intel.com> > Signed-off-by: Zhang Yi <yi.z.zh...@linux.intel.com> > --- > exec.c | 2 +- > include/qemu/mmap-alloc.h | 21 ++++++++++++++++++++- > util/mmap-alloc.c | 6 +++++- > util/oslib-posix.c | 2 +- > 4 files changed, 27 insertions(+), 4 deletions(-) > > diff --git a/exec.c b/exec.c > index bb6170d..27cea52 100644 > --- a/exec.c > +++ b/exec.c > @@ -1860,7 +1860,7 @@ static void *file_ram_alloc(RAMBlock *block, > } > > area = qemu_ram_mmap(fd, memory, block->mr->align, > - block->flags & RAM_SHARED); > + block->flags & RAM_SHARED, block->flags & > RAM_PMEM); > if (area == MAP_FAILED) { > error_setg_errno(errp, errno, > "unable to map backing store for guest RAM"); > diff --git a/include/qemu/mmap-alloc.h b/include/qemu/mmap-alloc.h > index 50385e3..190688a 100644 > --- a/include/qemu/mmap-alloc.h > +++ b/include/qemu/mmap-alloc.h > @@ -7,7 +7,26 @@ 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. > + * @shared: map has RAM_SHARED flag. > + * @is_pmem: map has RAM_PMEM flag. > + * > + * 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, > + bool shared, > + bool is_pmem); > > void qemu_ram_munmap(void *ptr, size_t size); > > diff --git a/util/mmap-alloc.c b/util/mmap-alloc.c > index fd329ec..97bbeed 100644 > --- a/util/mmap-alloc.c > +++ b/util/mmap-alloc.c > @@ -75,7 +75,11 @@ 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, > + bool shared, > + bool is_pmem) > { > /* > * Note: this always allocates at least one extra page of virtual > address > diff --git a/util/oslib-posix.c b/util/oslib-posix.c > index fbd0dc8..040937f 100644 > --- a/util/oslib-posix.c > +++ b/util/oslib-posix.c > @@ -203,7 +203,7 @@ 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); > + void *ptr = qemu_ram_mmap(-1, size, align, shared, false); > > if (ptr == MAP_FAILED) { > return NULL; > -- > 2.7.4
Looks good to me. Reviewed-by: pagu...@redhat.com > > >