From mboxrd@z Thu Jan 1 00:00:00 1970 From: Suravee Suthikulpanit Subject: Re: [PATCH] AMD IOMMU: don't free page table prematurely Date: Wed, 28 May 2014 00:20:15 -0500 Message-ID: <5385720F.6040507@amd.com> References: <538330AB0200007800015B2F@mail.emea.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1WpWHp-0000gH-Om for xen-devel@lists.xenproject.org; Wed, 28 May 2014 05:20:25 +0000 In-Reply-To: <538330AB0200007800015B2F@mail.emea.novell.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: Jan Beulich , xen-devel Cc: Aravind Gopalakrishnan List-Id: xen-devel@lists.xenproject.org On 05/26/2014 05:16 AM, Jan Beulich wrote: > iommu_merge_pages() still wants to look at the next level page table, > the TLB flush necessary before freeing too happens in that function, > and if it fails no free should happen at all. Hence the freeing must > be done after that function returned successfully, not before it's > being called. > > Signed-off-by: Jan Beulich > > --- a/xen/drivers/passthrough/amd/iommu_map.c > +++ b/xen/drivers/passthrough/amd/iommu_map.c > @@ -691,8 +691,6 @@ int amd_iommu_map_page(struct domain *d, > if ( !iommu_update_pde_count(d, pt_mfn[merge_level], > gfn, mfn, merge_level) ) > break; > - /* Deallocate lower level page table */ > - free_amd_iommu_pgtable(mfn_to_page(pt_mfn[merge_level - 1])); > > if ( iommu_merge_pages(d, pt_mfn[merge_level], gfn, > flags, merge_level) ) > @@ -703,6 +701,9 @@ int amd_iommu_map_page(struct domain *d, > domain_crash(d); > return -EFAULT; > } > + > + /* Deallocate lower level page table */ > + free_amd_iommu_pgtable(mfn_to_page(pt_mfn[merge_level - 1])); > } > > out: > > > Reviewed and tested. By the way, is this patch fix any existing known issues? Suravee