[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3.2 15/31] memory: move mem_path handling to memory
From: |
Hu Tao |
Subject: |
[Qemu-devel] [PATCH v3.2 15/31] memory: move mem_path handling to memory_region_allocate_system_memory |
Date: |
Wed, 14 May 2014 17:43:19 +0800 |
From: Paolo Bonzini <address@hidden>
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 <address@hidden>
Signed-off-by: Hu Tao <address@hidden>
---
exec.c | 10 ++--------
include/exec/memory.h | 18 ++++++++++++++++++
memory.c | 21 ++++++++++++++++-----
numa.c | 11 ++++++++++-
4 files changed, 46 insertions(+), 14 deletions(-)
diff --git a/exec.c b/exec.c
index bc29212..c126de1 100644
--- a/exec.c
+++ b/exec.c
@@ -1130,14 +1130,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)
@@ -1311,6 +1303,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)
{
@@ -1339,6 +1332,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)
diff --git a/include/exec/memory.h b/include/exec/memory.h
index 1d55ad9..4860ee6 100644
--- a/include/exec/memory.h
+++ b/include/exec/memory.h
@@ -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
diff --git a/memory.c b/memory.c
index daaeb7e..677b8f3 100644
--- a/memory.c
+++ b/memory.c
@@ -1017,13 +1017,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,
diff --git a/numa.c b/numa.c
index b9850d7..e136612 100644
--- a/numa.c
+++ b/numa.c
@@ -229,7 +229,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);
}
--
1.8.5.2.229.g4448466
- [Qemu-devel] [PATCH v3.2 01/31] NUMA: move numa related code to new file numa.c, (continued)
- [Qemu-devel] [PATCH v3.2 01/31] NUMA: move numa related code to new file numa.c, Hu Tao, 2014/05/14
- [Qemu-devel] [PATCH v3.2 06/31] man: improve -numa doc, Hu Tao, 2014/05/14
- [Qemu-devel] [PATCH v3.2 07/31] vl: redo -object parsing, Hu Tao, 2014/05/14
- [Qemu-devel] [PATCH v3.2 08/31] qmp: allow object-add completion handler to get canonical path, Hu Tao, 2014/05/14
- [Qemu-devel] [PATCH v3.2 09/31] qmp: improve error reporting for -object and object-add, Hu Tao, 2014/05/14
- [Qemu-devel] [PATCH v3.2 02/31] NUMA: check if the total numa memory size is equal to ram_size, Hu Tao, 2014/05/14
- [Qemu-devel] [PATCH v3.2 10/31] pc: pass QEMUMachineInitArgs to pc_memory_init, Hu Tao, 2014/05/14
- [Qemu-devel] [PATCH v3.2 15/31] memory: move mem_path handling to memory_region_allocate_system_memory,
Hu Tao <=
- [Qemu-devel] [PATCH v3.2 04/31] NUMA: convert -numa option to use OptsVisitor, Hu Tao, 2014/05/14
- [Qemu-devel] [PATCH v3.2 11/31] numa: introduce memory_region_allocate_system_memory, Hu Tao, 2014/05/14
- [Qemu-devel] [PATCH v3.2 12/31] add memdev backend infrastructure, Hu Tao, 2014/05/14
- [Qemu-devel] [PATCH v3.2 14/31] memory: reorganize file-based allocation, Hu Tao, 2014/05/14
- [Qemu-devel] [PATCH v3.2 17/31] memory: move preallocation code out of exec.c, Hu Tao, 2014/05/14
- [Qemu-devel] [PATCH v3.2 13/31] numa: add -numa node, memdev= option, Hu Tao, 2014/05/14
- [Qemu-devel] [PATCH v3.2 18/31] memory: move RAM_PREALLOC_MASK to exec.c, rename, Hu Tao, 2014/05/14
- [Qemu-devel] [PATCH v3.2 16/31] memory: add error propagation to file-based RAM allocation, Hu Tao, 2014/05/14
- [Qemu-devel] [PATCH v3.2 19/31] hostmem: add file-based HostMemoryBackend, Hu Tao, 2014/05/14