memory, exec: switch file ram allocation functions to 'flags' parameters
As more flag parameters besides the existing 'share' are going to be added to following functions memory_region_init_ram_from_file qemu_ram_alloc_from_fd qemu_ram_alloc_from_file let's switch them to use the 'flags' parameters so as to ease future flag additions. The existing 'share' flag is converted to the RAM_SHARED bit in ram_flags, and other flag bits are ignored by above functions right now. Signed-off-by: Junyan He <junyan.he@intel.com> Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
b0e5de9381
commit
cbfc017103
@ -58,7 +58,8 @@ file_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
|
|||||||
path = object_get_canonical_path(OBJECT(backend));
|
path = object_get_canonical_path(OBJECT(backend));
|
||||||
memory_region_init_ram_from_file(&backend->mr, OBJECT(backend),
|
memory_region_init_ram_from_file(&backend->mr, OBJECT(backend),
|
||||||
path,
|
path,
|
||||||
backend->size, fb->align, backend->share,
|
backend->size, fb->align,
|
||||||
|
backend->share ? RAM_SHARED : 0,
|
||||||
fb->mem_path, errp);
|
fb->mem_path, errp);
|
||||||
g_free(path);
|
g_free(path);
|
||||||
}
|
}
|
||||||
|
10
exec.c
10
exec.c
@ -2238,7 +2238,7 @@ static void ram_block_add(RAMBlock *new_block, Error **errp, bool shared)
|
|||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr,
|
RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr,
|
||||||
bool share, int fd,
|
uint32_t ram_flags, int fd,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
RAMBlock *new_block;
|
RAMBlock *new_block;
|
||||||
@ -2280,14 +2280,14 @@ RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr,
|
|||||||
new_block->mr = mr;
|
new_block->mr = mr;
|
||||||
new_block->used_length = size;
|
new_block->used_length = size;
|
||||||
new_block->max_length = size;
|
new_block->max_length = size;
|
||||||
new_block->flags = share ? RAM_SHARED : 0;
|
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, errp);
|
||||||
if (!new_block->host) {
|
if (!new_block->host) {
|
||||||
g_free(new_block);
|
g_free(new_block);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ram_block_add(new_block, &local_err, share);
|
ram_block_add(new_block, &local_err, ram_flags & RAM_SHARED);
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
g_free(new_block);
|
g_free(new_block);
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
@ -2299,7 +2299,7 @@ RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr,
|
|||||||
|
|
||||||
|
|
||||||
RAMBlock *qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr,
|
RAMBlock *qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr,
|
||||||
bool share, const char *mem_path,
|
uint32_t ram_flags, const char *mem_path,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
@ -2311,7 +2311,7 @@ RAMBlock *qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
block = qemu_ram_alloc_from_fd(size, mr, share, fd, errp);
|
block = qemu_ram_alloc_from_fd(size, mr, ram_flags, fd, errp);
|
||||||
if (!block) {
|
if (!block) {
|
||||||
if (created) {
|
if (created) {
|
||||||
unlink(mem_path);
|
unlink(mem_path);
|
||||||
|
@ -640,6 +640,7 @@ void memory_region_init_resizeable_ram(MemoryRegion *mr,
|
|||||||
void *host),
|
void *host),
|
||||||
Error **errp);
|
Error **errp);
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* memory_region_init_ram_from_file: Initialize RAM memory region with a
|
* memory_region_init_ram_from_file: Initialize RAM memory region with a
|
||||||
* mmap-ed backend.
|
* mmap-ed backend.
|
||||||
@ -651,7 +652,9 @@ void memory_region_init_resizeable_ram(MemoryRegion *mr,
|
|||||||
* @size: size of the region.
|
* @size: size of the region.
|
||||||
* @align: alignment of the region base address; if 0, the default alignment
|
* @align: alignment of the region base address; if 0, the default alignment
|
||||||
* (getpagesize()) will be used.
|
* (getpagesize()) will be used.
|
||||||
* @share: %true if memory must be mmaped with the MAP_SHARED flag
|
* @ram_flags: Memory region features:
|
||||||
|
* - RAM_SHARED: memory must be mmaped with the MAP_SHARED flag
|
||||||
|
* Other bits are ignored now.
|
||||||
* @path: the path in which to allocate the RAM.
|
* @path: the path in which to allocate the RAM.
|
||||||
* @errp: pointer to Error*, to store an error if it happens.
|
* @errp: pointer to Error*, to store an error if it happens.
|
||||||
*
|
*
|
||||||
@ -663,7 +666,7 @@ void memory_region_init_ram_from_file(MemoryRegion *mr,
|
|||||||
const char *name,
|
const char *name,
|
||||||
uint64_t size,
|
uint64_t size,
|
||||||
uint64_t align,
|
uint64_t align,
|
||||||
bool share,
|
uint32_t ram_flags,
|
||||||
const char *path,
|
const char *path,
|
||||||
Error **errp);
|
Error **errp);
|
||||||
|
|
||||||
|
@ -71,12 +71,33 @@ static inline unsigned long int ramblock_recv_bitmap_offset(void *host_addr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
long qemu_getrampagesize(void);
|
long qemu_getrampagesize(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qemu_ram_alloc_from_file,
|
||||||
|
* qemu_ram_alloc_from_fd: Allocate a ram block from the specified backing
|
||||||
|
* file or device
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* @size: the size in bytes of the ram block
|
||||||
|
* @mr: the memory region where the ram block is
|
||||||
|
* @ram_flags: specify the properties of the ram block, which can be one
|
||||||
|
* or bit-or of following values
|
||||||
|
* - RAM_SHARED: mmap the backing file or device with MAP_SHARED
|
||||||
|
* Other bits are ignored.
|
||||||
|
* @mem_path or @fd: specify the backing file or device
|
||||||
|
* @errp: pointer to Error*, to store an error if it happens
|
||||||
|
*
|
||||||
|
* Return:
|
||||||
|
* On success, return a pointer to the ram block.
|
||||||
|
* On failure, return NULL.
|
||||||
|
*/
|
||||||
RAMBlock *qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr,
|
RAMBlock *qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr,
|
||||||
bool share, const char *mem_path,
|
uint32_t ram_flags, const char *mem_path,
|
||||||
Error **errp);
|
Error **errp);
|
||||||
RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr,
|
RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr,
|
||||||
bool share, int fd,
|
uint32_t ram_flags, int fd,
|
||||||
Error **errp);
|
Error **errp);
|
||||||
|
|
||||||
RAMBlock *qemu_ram_alloc_from_ptr(ram_addr_t size, void *host,
|
RAMBlock *qemu_ram_alloc_from_ptr(ram_addr_t size, void *host,
|
||||||
MemoryRegion *mr, Error **errp);
|
MemoryRegion *mr, Error **errp);
|
||||||
RAMBlock *qemu_ram_alloc(ram_addr_t size, bool share, MemoryRegion *mr,
|
RAMBlock *qemu_ram_alloc(ram_addr_t size, bool share, MemoryRegion *mr,
|
||||||
|
8
memory.c
8
memory.c
@ -1551,7 +1551,7 @@ void memory_region_init_ram_from_file(MemoryRegion *mr,
|
|||||||
const char *name,
|
const char *name,
|
||||||
uint64_t size,
|
uint64_t size,
|
||||||
uint64_t align,
|
uint64_t align,
|
||||||
bool share,
|
uint32_t ram_flags,
|
||||||
const char *path,
|
const char *path,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
@ -1560,7 +1560,7 @@ void memory_region_init_ram_from_file(MemoryRegion *mr,
|
|||||||
mr->terminates = true;
|
mr->terminates = true;
|
||||||
mr->destructor = memory_region_destructor_ram;
|
mr->destructor = memory_region_destructor_ram;
|
||||||
mr->align = align;
|
mr->align = align;
|
||||||
mr->ram_block = qemu_ram_alloc_from_file(size, mr, share, path, errp);
|
mr->ram_block = qemu_ram_alloc_from_file(size, mr, ram_flags, path, errp);
|
||||||
mr->dirty_log_mask = tcg_enabled() ? (1 << DIRTY_MEMORY_CODE) : 0;
|
mr->dirty_log_mask = tcg_enabled() ? (1 << DIRTY_MEMORY_CODE) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1576,7 +1576,9 @@ void memory_region_init_ram_from_fd(MemoryRegion *mr,
|
|||||||
mr->ram = true;
|
mr->ram = true;
|
||||||
mr->terminates = true;
|
mr->terminates = true;
|
||||||
mr->destructor = memory_region_destructor_ram;
|
mr->destructor = memory_region_destructor_ram;
|
||||||
mr->ram_block = qemu_ram_alloc_from_fd(size, mr, share, fd, errp);
|
mr->ram_block = qemu_ram_alloc_from_fd(size, mr,
|
||||||
|
share ? RAM_SHARED : 0,
|
||||||
|
fd, errp);
|
||||||
mr->dirty_log_mask = tcg_enabled() ? (1 << DIRTY_MEMORY_CODE) : 0;
|
mr->dirty_log_mask = tcg_enabled() ? (1 << DIRTY_MEMORY_CODE) : 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
2
numa.c
2
numa.c
@ -479,7 +479,7 @@ static void allocate_system_memory_nonnuma(MemoryRegion *mr, Object *owner,
|
|||||||
if (mem_path) {
|
if (mem_path) {
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
memory_region_init_ram_from_file(mr, owner, name, ram_size, 0, false,
|
memory_region_init_ram_from_file(mr, owner, name, ram_size, 0, 0,
|
||||||
mem_path, &err);
|
mem_path, &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
error_report_err(err);
|
error_report_err(err);
|
||||||
|
Loading…
Reference in New Issue
Block a user