[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: [suspend/resume] memory_op hypercall failure: XENMEM_maximum_gpfn
Manuel Bouyer wrote:
I had the exact same impression. Mini-os does it, and so does Linux
(with a comment claiming that it is necessary for dump/save/restore).
See mm.c in extra/mini-os, for example, or the Linux sources given with
That's strange as the hypervisor already has this info, which it gives us
from xen_start_info.mfn_list. Anyway it shouldn't be hard to fill in this.
There is also machine_to_phys_mapping which is the opposite; this
one is also provided by Xen.
Commenting out those lines and using a mini-os guest results in the
behavior I described above (error reporting p2m table as empty).
I am looking into it, but yes, this entry is redundant with the
information available to hypervisor. The real purpose is unclear to me.
see the xpmap_phys_to_machine_mapping array, and xpmap_ptom().
in pmap.c this is used mainly by pmap_pa2pte().
xpmap_phys_to_machine_mapping is keept up to date by the NetBSD kernel,
machine_to_phys_mapping is updated though xpq_queue_machphys_update().
BTW, the patch-ad of sysutils/xentools uses mlock() to lock pages for
the dump-core operation, with address (resp. len) rounded /down/ to page
mask (resp. page size):
int lock_pages(void *addr, size_t len)
int e = 0;
+ void *laddr = (void *)((u_long)addr & ~0xfffUL);
+ size_t llen = (len + 0xfffUL) & ~0xfffUL;
- e = mlock(addr, len);
+ e = mlock(laddr, llen);
While the mlock() code for NetBSD (uvm/uvm_mmap.c) already rounds both
/up/, and check bounds.
* align the address to a page boundary and adjust the size
pageoff = (addr & PAGE_MASK);
addr -= pageoff;
size += pageoff;
size = (vsize_t)round_page(size);
Why is it so?
Main Index |
Thread Index |