* the boot process we know we have plenty slack space.
*/
struct e820entry map[E820MAX];
+ unsigned long arg = DOMID_SELF;
memmap.nr_entries = E820MAX;
set_xen_guest_handle(memmap.buffer, map);
rc = HYPERVISOR_memory_op(XENMEM_memory_map, &memmap);
- if ( rc == -ENOSYS ) {
+ if (rc == -ENOSYS) {
memmap.nr_entries = 1;
map[0].addr = 0ULL;
- map[0].size = xen_start_info->nr_pages << PAGE_SHIFT;
+ rc = HYPERVISOR_memory_op(XENMEM_maximum_reservation, &arg);
+ if (rc < 0)
+ map[0].size = xen_start_info->nr_pages << PAGE_SHIFT;
+ else
+ map[0].size = rc << PAGE_SHIFT;
/* 8MB slack (to balance backend allocations). */
map[0].size += 8 << 20;
map[0].type = E820_RAM;
{
int rc;
struct xen_memory_map memmap;
+ unsigned long arg = DOMID_SELF;
/*
* This is rather large for a stack variable but this early in
* the boot process we know we have plenty slack space.
set_xen_guest_handle(memmap.buffer, map);
rc = HYPERVISOR_memory_op(XENMEM_memory_map, &memmap);
- if ( rc == -ENOSYS ) {
+ if (rc == -ENOSYS) {
memmap.nr_entries = 1;
map[0].addr = 0ULL;
+ rc = HYPERVISOR_memory_op(XENMEM_maximum_reservation, &arg);
+ if (rc < 0)
+ map[0].size = PFN_PHYS(xen_start_info->nr_pages);
+ else
+ map[0].size = PFN_PHYS(rc);
map[0].size = PFN_PHYS(xen_start_info->nr_pages);
/* 8MB slack (to balance backend allocations). */
map[0].size += 8ULL << 20;