From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vitaly Kuznetsov Subject: Re: [PATCH v4 4/9] xen: introduce XEN_DOMCTL_devour Date: Thu, 04 Dec 2014 16:12:57 +0100 Message-ID: <87wq67h2iu.fsf@vitty.brq.redhat.com> References: <1417626981-8432-1-git-send-email-vkuznets@redhat.com> <1417626981-8432-5-git-send-email-vkuznets@redhat.com> <547FAFDD.8010005@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta4.messagelabs.com ([85.158.143.247]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1XwY5i-0003Fe-Tj for xen-devel@lists.xenproject.org; Thu, 04 Dec 2014 15:13:15 +0000 In-Reply-To: <547FAFDD.8010005@linaro.org> (Julien Grall's message of "Thu, 04 Dec 2014 00:50:37 +0000") List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Julien Grall Cc: Wei Liu , Andrew Jones , Keir Fraser , Ian Campbell , Stefano Stabellini , Andrew Cooper , Ian Jackson , Tim Deegan , David Vrabel , Jan Beulich , xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org Julien Grall writes: > Hi Vitaly, > > On 03/12/2014 17:16, Vitaly Kuznetsov wrote: >> New operation sets the 'recipient' domain which will recieve all > > s/recieve/receive/ > >> memory pages from a particular domain and kills the original domain. >> >> Signed-off-by: Vitaly Kuznetsov >> --- >> @@ -1764,13 +1765,32 @@ void free_domheap_pages(struct page_info *pg, unsigned int order) > > [..] > >> + else >> + { >> + mfn = page_to_mfn(pg); >> + gmfn = mfn_to_gmfn(d, mfn); >> + >> + page_set_owner(pg, NULL); >> + if ( assign_pages(d->recipient, pg, order, 0) ) >> + /* assign_pages reports the error by itself */ >> + goto out; >> + >> + if ( guest_physmap_add_page(d->recipient, gmfn, mfn, order) ) > > On ARM, mfn_to_gmfn will always return the mfn. This would result to > add a 1:1 mapping in the recipient domain. > > But ... only DOM0 has its memory mapped 1:1. So this code may blow up > the P2M of the recipient domain. I know almost nothing about ARM so please bear with me. So, for a guest domain the mapping is not 1:1 (so guest sees different addresses) but mfn_to_gmfn() doesn't returs these addresses? I was under an impression it is not x86-specific and I can see its usage in e.g. getdomaininfo(), memory_exchange(),.. How can one figure out the mapping then? Anyway, what I want to do here is: when this page is freed I want to reassign it to our newly-created guest at the exact same address it was mapped in the original domain. > > I'm not an x86 expert, but this may also happen when the recipient > domain is using translated page mode (i.e HVM/PVHM). PVHVM is the main target here (as kexec is unsupported for PV) and it kinda works. mfn_to_gmfn() returns gmfn != mfn. BTW, what's the current state of affairs with kexec and ARM guest? I suppose we should have similar problems: vcpu_info, event channels, .. > > Regards, -- Vitaly