[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] xenheap pages mapped by dom0



Jan Beulich wrote:
Keir Fraser <keir.fraser@xxxxxxxxxxxxx> 18.12.09 16:24 >>>
I think the right thing to do would be very roughly:
On allocation:
page = alloc_xenheap_page();
share_xen_page_with_guest(page);
On deallocation:
if (test_and_clear(PGC_allocated)) put_page();
if (page->count_info & PGC_count_mask) return -EBUSY;

Hmm, and how would you recover from that? I don't think George wants
his enclosing operation to fail because of a page still being mapped. On
x86-64, at least, it might be possible to play with PGC_xen_heap, to
convert a Xen heap page to a domain heap one, but that wouldn't
cover anyone else (and would seem rather hackish, if it works at all).
I wouldn't really mind the op failing; I just want it to fail cleanly. All-or-nothing would be optimal IMHO. Failing such that everything will automatically clean itself up if/when dom0 does unmap the pages would be OK too. Having half the pages freed / marked unallocated, but some still allocated doesn't seem very good.

Anyway, I care more about allocating larger buffers than I do about re-allocating, so maybe I'll just punt on freeing maybe-mapped buffers for now.

However, that brings up another point: suppose that I do several allocations, one per cpu, and one fails. Now I want to go and free the buffers I've just allocated (which shouldn't be mapped in dom0 yet). Can I not just call free_xenheap_pages()? Do I need to clear PGC_allocated before calling?

Is any of this stuff written down somewhere? :-)

-George

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.