diff mbox

[v3,1/2] swiotlb-xen: implement xen_swiotlb_dma_mmap callback

Message ID 1485887426-9016-2-git-send-email-andrii.anisov@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Andrii Anisov Jan. 31, 2017, 6:30 p.m. UTC
From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

This function creates userspace mapping for the DMA-coherent memory.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Oleksandr Dmytryshyn <oleksandr.dmytryshyn@globallogic.com>
Signed-off-by: Andrii Anisov <andrii_anisov@epam.com>
---
 arch/arm/xen/mm.c         |  1 +
 drivers/xen/swiotlb-xen.c | 18 ++++++++++++++++++
 include/xen/swiotlb-xen.h |  5 +++++
 3 files changed, 24 insertions(+)

Comments

Konrad Rzeszutek Wilk Jan. 31, 2017, 6:39 p.m. UTC | #1
On Tue, Jan 31, 2017 at 08:30:25PM +0200, Andrii Anisov wrote:
> From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> 
> This function creates userspace mapping for the DMA-coherent memory.
> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> Signed-off-by: Oleksandr Dmytryshyn <oleksandr.dmytryshyn@globallogic.com>
> Signed-off-by: Andrii Anisov <andrii_anisov@epam.com>
> ---
>  arch/arm/xen/mm.c         |  1 +
>  drivers/xen/swiotlb-xen.c | 18 ++++++++++++++++++
>  include/xen/swiotlb-xen.h |  5 +++++
>  3 files changed, 24 insertions(+)
> 
> diff --git a/arch/arm/xen/mm.c b/arch/arm/xen/mm.c
> index bd62d94..cd1684e 100644
> --- a/arch/arm/xen/mm.c
> +++ b/arch/arm/xen/mm.c
> @@ -198,6 +198,7 @@ static struct dma_map_ops xen_swiotlb_dma_ops = {
>  	.unmap_page = xen_swiotlb_unmap_page,
>  	.dma_supported = xen_swiotlb_dma_supported,
>  	.set_dma_mask = xen_swiotlb_set_dma_mask,
> +	.mmap = xen_swiotlb_dma_mmap,
>  };
>  
>  int __init xen_mm_init(void)
> diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
> index f8afc6d..8ac36b4 100644
> --- a/drivers/xen/swiotlb-xen.c
> +++ b/drivers/xen/swiotlb-xen.c
> @@ -681,3 +681,21 @@ xen_swiotlb_set_dma_mask(struct device *dev, u64 dma_mask)
>  	return 0;
>  }
>  EXPORT_SYMBOL_GPL(xen_swiotlb_set_dma_mask);
> +
> +/*
> + * Create userspace mapping for the DMA-coherent memory.
> + * Following function should be called with the local pages only.

What does 'local pages' mean?
Stefano Stabellini Jan. 31, 2017, 7:10 p.m. UTC | #2
On Tue, 31 Jan 2017, Konrad Rzeszutek Wilk wrote:
> On Tue, Jan 31, 2017 at 08:30:25PM +0200, Andrii Anisov wrote:
> > From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> > 
> > This function creates userspace mapping for the DMA-coherent memory.
> > 
> > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> > Signed-off-by: Oleksandr Dmytryshyn <oleksandr.dmytryshyn@globallogic.com>
> > Signed-off-by: Andrii Anisov <andrii_anisov@epam.com>
> > ---
> >  arch/arm/xen/mm.c         |  1 +
> >  drivers/xen/swiotlb-xen.c | 18 ++++++++++++++++++
> >  include/xen/swiotlb-xen.h |  5 +++++
> >  3 files changed, 24 insertions(+)
> > 
> > diff --git a/arch/arm/xen/mm.c b/arch/arm/xen/mm.c
> > index bd62d94..cd1684e 100644
> > --- a/arch/arm/xen/mm.c
> > +++ b/arch/arm/xen/mm.c
> > @@ -198,6 +198,7 @@ static struct dma_map_ops xen_swiotlb_dma_ops = {
> >  	.unmap_page = xen_swiotlb_unmap_page,
> >  	.dma_supported = xen_swiotlb_dma_supported,
> >  	.set_dma_mask = xen_swiotlb_set_dma_mask,
> > +	.mmap = xen_swiotlb_dma_mmap,
> >  };
> >  
> >  int __init xen_mm_init(void)
> > diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
> > index f8afc6d..8ac36b4 100644
> > --- a/drivers/xen/swiotlb-xen.c
> > +++ b/drivers/xen/swiotlb-xen.c
> > @@ -681,3 +681,21 @@ xen_swiotlb_set_dma_mask(struct device *dev, u64 dma_mask)
> >  	return 0;
> >  }
> >  EXPORT_SYMBOL_GPL(xen_swiotlb_set_dma_mask);
> > +
> > +/*
> > + * Create userspace mapping for the DMA-coherent memory.
> > + * Following function should be called with the local pages only.
> 
> What does 'local pages' mean?

A page that belongs to this domain, rather than a foreign page that has
been mapped.
Andrii Anisov Feb. 1, 2017, 11:46 a.m. UTC | #3
Konrad, Stefano,

>> What does 'local pages' mean?
>
> A page that belongs to this domain, rather than a foreign page that has
> been mapped.
I guess it should be clarified, but not sure in the commit message or
comment to the code?

Sincerely,
Andrii Anisov.
Konrad Rzeszutek Wilk Feb. 1, 2017, 2:24 p.m. UTC | #4
On Wed, Feb 01, 2017 at 01:46:48PM +0200, Andrii Anisov wrote:
> Konrad, Stefano,
> 
> >> What does 'local pages' mean?
> >
> > A page that belongs to this domain, rather than a foreign page that has
> > been mapped.
> I guess it should be clarified, but not sure in the commit message or
> comment to the code?

in the code pls.
> 
> Sincerely,
> Andrii Anisov.
diff mbox

Patch

diff --git a/arch/arm/xen/mm.c b/arch/arm/xen/mm.c
index bd62d94..cd1684e 100644
--- a/arch/arm/xen/mm.c
+++ b/arch/arm/xen/mm.c
@@ -198,6 +198,7 @@  static struct dma_map_ops xen_swiotlb_dma_ops = {
 	.unmap_page = xen_swiotlb_unmap_page,
 	.dma_supported = xen_swiotlb_dma_supported,
 	.set_dma_mask = xen_swiotlb_set_dma_mask,
+	.mmap = xen_swiotlb_dma_mmap,
 };
 
 int __init xen_mm_init(void)
diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
index f8afc6d..8ac36b4 100644
--- a/drivers/xen/swiotlb-xen.c
+++ b/drivers/xen/swiotlb-xen.c
@@ -681,3 +681,21 @@  xen_swiotlb_set_dma_mask(struct device *dev, u64 dma_mask)
 	return 0;
 }
 EXPORT_SYMBOL_GPL(xen_swiotlb_set_dma_mask);
+
+/*
+ * Create userspace mapping for the DMA-coherent memory.
+ * Following function should be called with the local pages only.
+ */
+int
+xen_swiotlb_dma_mmap(struct device *dev, struct vm_area_struct *vma,
+			void *cpu_addr, dma_addr_t dma_addr, size_t size,
+			unsigned long attrs)
+{
+#if defined(CONFIG_ARM) || defined(CONFIG_ARM64)
+	if (__generic_dma_ops(dev)->mmap)
+		return __generic_dma_ops(dev)->mmap(dev, vma, cpu_addr,
+						    dma_addr, size, attrs);
+#endif
+	return dma_common_mmap(dev, vma, cpu_addr, dma_addr, size);
+}
+EXPORT_SYMBOL_GPL(xen_swiotlb_dma_mmap);
diff --git a/include/xen/swiotlb-xen.h b/include/xen/swiotlb-xen.h
index a0083be..5c8f4c8 100644
--- a/include/xen/swiotlb-xen.h
+++ b/include/xen/swiotlb-xen.h
@@ -55,4 +55,9 @@  xen_swiotlb_dma_supported(struct device *hwdev, u64 mask);
 
 extern int
 xen_swiotlb_set_dma_mask(struct device *dev, u64 dma_mask);
+
+extern int
+xen_swiotlb_dma_mmap(struct device *dev, struct vm_area_struct *vma,
+			void *cpu_addr, dma_addr_t dma_addr, size_t size,
+			unsigned long attrs);
 #endif /* __LINUX_SWIOTLB_XEN_H */