mirror of https://gitee.com/openkylin/qemu.git
memory: move mem_path handling to memory_region_allocate_system_memory
Like the previous patch did in exec.c, split memory_region_init_ram and memory_region_init_ram_from_file, and push mem_path one step further up. Other RAM regions than system memory will now be backed by regular RAM. Also, boards that do not use memory_region_allocate_system_memory will not support -mem-path anymore. This can be changed before the patches are merged by migrating boards to use the function. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
7febe36f9a
commit
0b183fc871
10
exec.c
10
exec.c
|
@ -1090,14 +1090,6 @@ error:
|
|||
}
|
||||
return NULL;
|
||||
}
|
||||
#else
|
||||
static void *file_ram_alloc(RAMBlock *block,
|
||||
ram_addr_t memory,
|
||||
const char *path)
|
||||
{
|
||||
fprintf(stderr, "-mem-path not supported on this host\n");
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
static ram_addr_t find_ram_offset(ram_addr_t size)
|
||||
|
@ -1287,6 +1279,7 @@ static ram_addr_t ram_block_add(RAMBlock *new_block)
|
|||
return new_block->offset;
|
||||
}
|
||||
|
||||
#ifdef __linux__
|
||||
ram_addr_t qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr,
|
||||
const char *mem_path)
|
||||
{
|
||||
|
@ -1315,6 +1308,7 @@ ram_addr_t qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr,
|
|||
new_block->host = file_ram_alloc(new_block, size, mem_path);
|
||||
return ram_block_add(new_block);
|
||||
}
|
||||
#endif
|
||||
|
||||
ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host,
|
||||
MemoryRegion *mr)
|
||||
|
|
|
@ -311,6 +311,24 @@ void memory_region_init_ram(MemoryRegion *mr,
|
|||
const char *name,
|
||||
uint64_t size);
|
||||
|
||||
#ifdef __linux__
|
||||
/**
|
||||
* memory_region_init_ram_from_file: Initialize RAM memory region with a
|
||||
* mmap-ed backend.
|
||||
*
|
||||
* @mr: the #MemoryRegion to be initialized.
|
||||
* @owner: the object that tracks the region's reference count
|
||||
* @name: the name of the region.
|
||||
* @size: size of the region.
|
||||
* @path: the path in which to allocate the RAM.
|
||||
*/
|
||||
void memory_region_init_ram_from_file(MemoryRegion *mr,
|
||||
struct Object *owner,
|
||||
const char *name,
|
||||
uint64_t size,
|
||||
const char *path);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* memory_region_init_ram_ptr: Initialize RAM memory region from a
|
||||
* user-provided pointer. Accesses into the
|
||||
|
|
21
memory.c
21
memory.c
|
@ -1030,13 +1030,24 @@ void memory_region_init_ram(MemoryRegion *mr,
|
|||
mr->ram = true;
|
||||
mr->terminates = true;
|
||||
mr->destructor = memory_region_destructor_ram;
|
||||
if (mem_path) {
|
||||
mr->ram_addr = qemu_ram_alloc_from_file(size, mr, mem_path);
|
||||
} else {
|
||||
mr->ram_addr = qemu_ram_alloc(size, mr);
|
||||
}
|
||||
mr->ram_addr = qemu_ram_alloc(size, mr);
|
||||
}
|
||||
|
||||
#ifdef __linux__
|
||||
void memory_region_init_ram_from_file(MemoryRegion *mr,
|
||||
struct Object *owner,
|
||||
const char *name,
|
||||
uint64_t size,
|
||||
const char *path)
|
||||
{
|
||||
memory_region_init(mr, owner, name, size);
|
||||
mr->ram = true;
|
||||
mr->terminates = true;
|
||||
mr->destructor = memory_region_destructor_ram;
|
||||
mr->ram_addr = qemu_ram_alloc_from_file(size, mr, path);
|
||||
}
|
||||
#endif
|
||||
|
||||
void memory_region_init_ram_ptr(MemoryRegion *mr,
|
||||
Object *owner,
|
||||
const char *name,
|
||||
|
|
11
numa.c
11
numa.c
|
@ -228,7 +228,16 @@ static void allocate_system_memory_nonnuma(MemoryRegion *mr, Object *owner,
|
|||
const char *name,
|
||||
uint64_t ram_size)
|
||||
{
|
||||
memory_region_init_ram(mr, owner, name, ram_size);
|
||||
if (mem_path) {
|
||||
#ifdef __linux__
|
||||
memory_region_init_ram_from_file(mr, owner, name, ram_size, mem_path);
|
||||
#else
|
||||
fprintf(stderr, "-mem-path not supported on this host\n");
|
||||
exit(1);
|
||||
#endif
|
||||
} else {
|
||||
memory_region_init_ram(mr, owner, name, ram_size);
|
||||
}
|
||||
vmstate_register_ram_global(mr);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue