Il 09/07/2014 07:57, Alexey Kardashevskiy ha scritto:
0b183fc87 "memory: move mem_path handling to
memory_region_allocate_system_memory" disabled -mempath use for all
machines that do not use memory_region_allocate_system_memory() to
register RAM. Since SPAPR uses memory_region_init_ram(), the huge pages
support was disabled for it.
This replaces memory_region_init_ram()+vmstate_register_ram_global() with
memory_region_allocate_system_memory() to get huge pages back.
Cc: Paolo Bonzini <pbonz...@redhat.com>
Cc: Hu Tao <hu...@cn.fujitsu.com>
Signed-off-by: Alexey Kardashevskiy <a...@ozlabs.ru>
---
hw/ppc/spapr.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index a23c0f0..8fa9f7e 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1337,8 +1337,8 @@ static void ppc_spapr_init(MachineState *machine)
ram_addr_t nonrma_base = rma_alloc_size;
ram_addr_t nonrma_size = spapr->ram_limit - rma_alloc_size;
- memory_region_init_ram(ram, NULL, "ppc_spapr.ram", nonrma_size);
- vmstate_register_ram_global(ram);
+ memory_region_allocate_system_memory(ram, NULL, "ppc_spapr.ram",
+ nonrma_size);
The reason why I didn't do this in the simple way is that depending on
the value of nonrma_base you may get smaller hugepages than you wanted.
For example, if the hugepage size is 1G but nonrma_base is 32M, you will
not be able to get a page size larger than 32M.
Depending on the value of nonrma_base, it may be better to allocate the
whole spapr->ram_limit to ppc_spapr.ram, and just ignore the first part
of it.
I see in target-ppc/kvm.c that rma_alloc_size is capped to 256M, and in
practice it is 128M (arch/powerpc/kvm/book3s_hv_builtin.c. Considering
that Linux overcommits so the memory isn't lost in the non-hugepage
case, I think it's better to just waste the 128M of address space.
Paolo
memory_region_add_subregion(sysmem, nonrma_base, ram);
}