From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v4 7/7] Revert "xen: introduce arch_grant_(un)map_page_identity" Date: Fri, 10 Oct 2014 12:54:17 +0100 Message-ID: <5437C8E9.5030302@linaro.org> References: <1412941440-5646-7-git-send-email-stefano.stabellini@eu.citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1412941440-5646-7-git-send-email-stefano.stabellini@eu.citrix.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: Stefano Stabellini , xen-devel@lists.xensource.com Cc: julien.grall@citrix.com, Ian.Campbell@citrix.com List-Id: xen-devel@lists.xenproject.org Hi Stefano, On 10/10/2014 12:44, Stefano Stabellini wrote: > This reverts commit e25a5f4d8cf3b55718048abdd21c7d0de64ae54c. > > Signed-off-by: Stefano Stabellini Reviewed-by: Julien Grall Regards, > --- > xen/arch/arm/p2m.c | 26 -------------------------- > xen/drivers/passthrough/arm/smmu.c | 13 +++++++++++-- > xen/include/asm-arm/p2m.h | 4 ---- > xen/include/asm-x86/p2m.h | 4 ---- > 4 files changed, 11 insertions(+), 36 deletions(-) > > diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c > index 6ff8c17..acad2f2 100644 > --- a/xen/arch/arm/p2m.c > +++ b/xen/arch/arm/p2m.c > @@ -931,32 +931,6 @@ void guest_physmap_remove_page(struct domain *d, > pfn_to_paddr(mfn), MATTR_MEM, p2m_invalid); > } > > -int arch_grant_map_page_identity(struct domain *d, unsigned long frame, > - bool_t writeable) > -{ > - p2m_type_t t; > - > - ASSERT(is_domain_direct_mapped(d)); > - > - /* This is not an IOMMU mapping but it is not a regular RAM p2m type > - * either. We are using IOMMU p2m types here to prevent the pages > - * from being used as grants. */ > - if ( writeable ) > - t = p2m_iommu_map_rw; > - else > - t = p2m_iommu_map_ro; > - > - return guest_physmap_add_entry(d, frame, frame, 0, t); > -} > - > -int arch_grant_unmap_page_identity(struct domain *d, unsigned long frame) > -{ > - ASSERT(is_domain_direct_mapped(d)); > - > - guest_physmap_remove_page(d, frame, frame, 0); > - return 0; > -} > - > int p2m_alloc_table(struct domain *d) > { > struct p2m_domain *p2m = &d->arch.p2m; > diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/arm/smmu.c > index 9a95ac9..42bde75 100644 > --- a/xen/drivers/passthrough/arm/smmu.c > +++ b/xen/drivers/passthrough/arm/smmu.c > @@ -1539,6 +1539,8 @@ static void arm_smmu_iommu_domain_teardown(struct domain *d) > static int arm_smmu_map_page(struct domain *d, unsigned long gfn, > unsigned long mfn, unsigned int flags) > { > + p2m_type_t t; > + > /* Grant mappings can be used for DMA requests. The dev_bus_addr returned by > * the hypercall is the MFN (not the IPA). For device protected by > * an IOMMU, Xen needs to add a 1:1 mapping in the domain p2m to > @@ -1553,7 +1555,12 @@ static int arm_smmu_map_page(struct domain *d, unsigned long gfn, > if ( !(flags & (IOMMUF_readable | IOMMUF_writable)) ) > return -EINVAL; > > - return arch_grant_map_page_identity(d, mfn, flags & IOMMUF_writable); > + t = (flags & IOMMUF_writable) ? p2m_iommu_map_rw : p2m_iommu_map_ro; > + > + /* The function guest_physmap_add_entry replaces the current mapping > + * if there is already one... > + */ > + return guest_physmap_add_entry(d, gfn, mfn, 0, t); > } > > static int arm_smmu_unmap_page(struct domain *d, unsigned long gfn) > @@ -1564,7 +1571,9 @@ static int arm_smmu_unmap_page(struct domain *d, unsigned long gfn) > if ( !is_domain_direct_mapped(d) ) > return -EINVAL; > > - return arch_grant_unmap_page_identity(d, gfn); > + guest_physmap_remove_page(d, gfn, gfn, 0); > + > + return 0; > } > > static const struct iommu_ops arm_smmu_iommu_ops = { > diff --git a/xen/include/asm-arm/p2m.h b/xen/include/asm-arm/p2m.h > index 10bf111..da36504 100644 > --- a/xen/include/asm-arm/p2m.h > +++ b/xen/include/asm-arm/p2m.h > @@ -214,10 +214,6 @@ static inline int get_page_and_type(struct page_info *page, > return rc; > } > > -int arch_grant_map_page_identity(struct domain *d, unsigned long frame, > - bool_t writeable); > -int arch_grant_unmap_page_identity(struct domain *d, unsigned long frame); > - > /* get host p2m table */ > #define p2m_get_hostp2m(d) (&(d)->arch.p2m) > > diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h > index 90ddd15..5f7fe71 100644 > --- a/xen/include/asm-x86/p2m.h > +++ b/xen/include/asm-x86/p2m.h > @@ -709,10 +709,6 @@ static inline unsigned int p2m_get_iommu_flags(p2m_type_t p2mt) > return flags; > } > > -extern int arch_grant_map_page_identity(struct domain *d, unsigned long frame, > - bool_t writeable); > -extern int arch_grant_unmap_page_identity(struct domain *d, unsigned long frame); > - > #endif /* _XEN_P2M_H */ > > /* > -- Julien Grall