xen: use host E820 map for dom0
When running as initial domain, get the real physical memory map from xen using the XENMEM_machine_memory_map hypercall and use it to setup the e820 regions. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
committed by
Jeremy Fitzhardinge
parent
375b2a9ada
commit
9e9a5fcb04
@@ -149,6 +149,7 @@ char * __init xen_memory_setup(void)
|
|||||||
unsigned long extra_pages = 0;
|
unsigned long extra_pages = 0;
|
||||||
unsigned long extra_limit;
|
unsigned long extra_limit;
|
||||||
int i;
|
int i;
|
||||||
|
int op;
|
||||||
|
|
||||||
max_pfn = min(MAX_DOMAIN_PAGES, max_pfn);
|
max_pfn = min(MAX_DOMAIN_PAGES, max_pfn);
|
||||||
mem_end = PFN_PHYS(max_pfn);
|
mem_end = PFN_PHYS(max_pfn);
|
||||||
@@ -156,7 +157,10 @@ char * __init xen_memory_setup(void)
|
|||||||
memmap.nr_entries = E820MAX;
|
memmap.nr_entries = E820MAX;
|
||||||
set_xen_guest_handle(memmap.buffer, map);
|
set_xen_guest_handle(memmap.buffer, map);
|
||||||
|
|
||||||
rc = HYPERVISOR_memory_op(XENMEM_memory_map, &memmap);
|
op = xen_initial_domain() ?
|
||||||
|
XENMEM_machine_memory_map :
|
||||||
|
XENMEM_memory_map;
|
||||||
|
rc = HYPERVISOR_memory_op(op, &memmap);
|
||||||
if (rc == -ENOSYS) {
|
if (rc == -ENOSYS) {
|
||||||
memmap.nr_entries = 1;
|
memmap.nr_entries = 1;
|
||||||
map[0].addr = 0ULL;
|
map[0].addr = 0ULL;
|
||||||
@@ -235,6 +239,7 @@ char * __init xen_memory_setup(void)
|
|||||||
else
|
else
|
||||||
extra_pages = 0;
|
extra_pages = 0;
|
||||||
|
|
||||||
|
if (!xen_initial_domain())
|
||||||
xen_add_extra_mem(extra_pages);
|
xen_add_extra_mem(extra_pages);
|
||||||
|
|
||||||
return "Xen";
|
return "Xen";
|
||||||
|
Reference in New Issue
Block a user