From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: Re: Question about mapping between domains Date: Mon, 13 Jul 2015 10:04:35 +0100 Message-ID: <1436778275.7019.32.camel@citrix.com> References: <1436448706-2687-1-git-send-email-oleksandr.dmytryshyn@globallogic.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1436448706-2687-1-git-send-email-oleksandr.dmytryshyn@globallogic.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Oleksandr Dmytryshyn Cc: Keir Fraser , Ian Jackson , Tim Deegan , xen-devel@lists.xen.org, Stefano Stabellini , Jan Beulich List-Id: xen-devel@lists.xenproject.org On Thu, 2015-07-09 at 16:31 +0300, Oleksandr Dmytryshyn wrote: > I have some questions: > 1. Is this a correct solution? > 2. Could this solution be considered as a normal (not hack)? > 3. If not then could anybody help me to implement this in the right way? The way we deal with this elsewhere in the kernel is that we only ever do grant mappings over ballooned out pages, which are allocated via gnttab_alloc_pages. That way when they are unmapped the page is expected to be entry and no backing mfn is lost. The page can then subsequently be ballooned back in as normal. There is an additional quirk for a 1:1 mapped dom0 which is that we don't actually decrease reservation when ballooning, but keep the 1:1 mfn in anticipation of ballooning it back in later. If you can't arrange to use already ballooned buffers for your DMA buffer then you will need to manually balloon it out before and balloon it back in later. You may also want to extend the dom0 1:1 quirk described above to your 1:1 mapped domD. If you have sufficient control over/knowledge of the domD IPA space then you could also try and arrange that the region used for these mappings does not correspond to any real RAM in the guest (i.e. stick it in an MMIO hole). That depends on you never needing to find an associated struct page though, which will depend on your use case. Ian.