Currently only file backed memory backend can be created with a "share" flag in order to allow sharing guest RAM with other processes in the host. Add the "share" flag also to RAM Memory Backend in order to allow remapping parts of the guest RAM to different host virtual addresses. This is needed by the RDMA devices in order to remap non-contiguous QEMU virtual addresses to a contiguous virtual address range. Moved the "share" flag to the Host Memory base class, modified phys_mem_alloc to include the new parameter and a new interface memory_region_init_ram_shared_nomigrate. There are no functional changes if the new flag is not used. Reviewed-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Marcel Apfelbaum <marcel@redhat.com>
71 lines
1.9 KiB
C
71 lines
1.9 KiB
C
/*
|
|
* QEMU Host Memory Backend
|
|
*
|
|
* Copyright (C) 2013-2014 Red Hat Inc
|
|
*
|
|
* Authors:
|
|
* Igor Mammedov <imammedo@redhat.com>
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
* See the COPYING file in the top-level directory.
|
|
*/
|
|
|
|
#ifndef SYSEMU_HOSTMEM_H
|
|
#define SYSEMU_HOSTMEM_H
|
|
|
|
#include "sysemu/sysemu.h" /* for MAX_NODES */
|
|
#include "qom/object.h"
|
|
#include "exec/memory.h"
|
|
#include "qemu/bitmap.h"
|
|
|
|
#define TYPE_MEMORY_BACKEND "memory-backend"
|
|
#define MEMORY_BACKEND(obj) \
|
|
OBJECT_CHECK(HostMemoryBackend, (obj), TYPE_MEMORY_BACKEND)
|
|
#define MEMORY_BACKEND_GET_CLASS(obj) \
|
|
OBJECT_GET_CLASS(HostMemoryBackendClass, (obj), TYPE_MEMORY_BACKEND)
|
|
#define MEMORY_BACKEND_CLASS(klass) \
|
|
OBJECT_CLASS_CHECK(HostMemoryBackendClass, (klass), TYPE_MEMORY_BACKEND)
|
|
|
|
typedef struct HostMemoryBackend HostMemoryBackend;
|
|
typedef struct HostMemoryBackendClass HostMemoryBackendClass;
|
|
|
|
/**
|
|
* HostMemoryBackendClass:
|
|
* @parent_class: opaque parent class container
|
|
*/
|
|
struct HostMemoryBackendClass {
|
|
ObjectClass parent_class;
|
|
|
|
void (*alloc)(HostMemoryBackend *backend, Error **errp);
|
|
};
|
|
|
|
/**
|
|
* @HostMemoryBackend
|
|
*
|
|
* @parent: opaque parent object container
|
|
* @size: amount of memory backend provides
|
|
* @mr: MemoryRegion representing host memory belonging to backend
|
|
*/
|
|
struct HostMemoryBackend {
|
|
/* private */
|
|
Object parent;
|
|
|
|
/* protected */
|
|
char *id;
|
|
uint64_t size;
|
|
bool merge, dump;
|
|
bool prealloc, force_prealloc, is_mapped, share;
|
|
DECLARE_BITMAP(host_nodes, MAX_NODES + 1);
|
|
HostMemPolicy policy;
|
|
|
|
MemoryRegion mr;
|
|
};
|
|
|
|
bool host_memory_backend_mr_inited(HostMemoryBackend *backend);
|
|
MemoryRegion *host_memory_backend_get_memory(HostMemoryBackend *backend,
|
|
Error **errp);
|
|
|
|
void host_memory_backend_set_mapped(HostMemoryBackend *backend, bool mapped);
|
|
bool host_memory_backend_is_mapped(HostMemoryBackend *backend);
|
|
#endif
|