Message ID | 1485887426-9016-2-git-send-email-andrii.anisov@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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?
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.
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.
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 --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 */