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>
unsigned long extra_pages = 0;
unsigned long extra_limit;
int i;
unsigned long extra_pages = 0;
unsigned long extra_limit;
int i;
max_pfn = min(MAX_DOMAIN_PAGES, max_pfn);
mem_end = PFN_PHYS(max_pfn);
max_pfn = min(MAX_DOMAIN_PAGES, max_pfn);
mem_end = PFN_PHYS(max_pfn);
memmap.nr_entries = E820MAX;
set_xen_guest_handle(memmap.buffer, map);
memmap.nr_entries = E820MAX;
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) {
memmap.nr_entries = 1;
map[0].addr = 0ULL;
if (rc == -ENOSYS) {
memmap.nr_entries = 1;
map[0].addr = 0ULL;
- xen_add_extra_mem(extra_pages);
+ if (!xen_initial_domain())
+ xen_add_extra_mem(extra_pages);