From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: Re: xenheap pages mapped by dom0 Date: Fri, 18 Dec 2009 16:19:03 +0000 Message-ID: <4B2BAB77.3020508@eu.citrix.com> References: <4B2B9FC50200007800026A53@vpn.id2.novell.com> <4B2BB16C0200007800026AB5@vpn.id2.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <4B2BB16C0200007800026AB5@vpn.id2.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Jan Beulich Cc: "xen-devel@lists.xensource.com" , Keir Fraser List-Id: xen-devel@lists.xenproject.org Jan Beulich wrote: >>>> Keir Fraser 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