Commit 2ac0f162 authored by Zhang Yi's avatar Zhang Yi Committed by Eduardo Habkost
Browse files

util/mmap-alloc: Add a 'is_pmem' parameter to qemu_ram_mmap



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: default avatarHaozhong Zhang <haozhong.zhang@intel.com>
Signed-off-by: default avatarZhang Yi <yi.z.zhang@linux.intel.com>
Reviewed-by: default avatarPankaj Gupta <pagupta@redhat.com>
Message-Id: <786c46862cfeb253ee0ea2f44d62ffe76edb7fa4.1549555521.git.yi.z.zhang@linux.intel.com>
Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Reviewed-by: default avatarPankaj Gupta <pagupta@redhat.com>
Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
parent 5b863f3e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1883,7 +1883,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");
+20 −1
Original line number Diff line number Diff line
@@ -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(int fd, void *ptr, size_t size);

+5 −1
Original line number Diff line number Diff line
@@ -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)
{
    int flags;
    int guardfd;
+1 −1
Original line number Diff line number Diff line
@@ -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;