Dear Stefano,
> Only one suggestion more. For this to work correctly, we are assuming
> that no foreging pages are involved here, which is a very reasonable
> assumption given that mmap should be called on memory returned by
> dma_alloc_coherent.
I also kept in mind this problem, that's why the first version was RFC.
> Please add an in-code comment here so that we'll remember.
Do you think comment would be enough so far?
Maybe fallback to common ops would be better in order to keep current (even
broken) functionality for now? Or BUG_ON as you suggested for get_sgtable callback?
ANDRII ANISOV
Lead Systems Engineer
Office: +380
44 390 5457 x 66766 Cell: +380
50 573 8852 Email: andrii_anisov@xxxxxxxx
Kyiv, Ukraine (GMT+3) epam.com
CONFIDENTIALITY CAUTION AND DISCLAIMER
This message is intended only for the use of the individual(s) or entity(ies) to which it is addressed and contains information that is legally privileged and confidential. If you are not the intended recipient, or the person responsible for delivering the
message to the intended recipient, you are hereby notified that any dissemination, distribution or copying of this communication is strictly prohibited. All unintended recipients are obliged to delete this message and destroy any printed copies.
From: Stefano Stabellini <sstabellini@xxxxxxxxxx>
Sent: Tuesday, January 17, 2017 12:56:12 AM
To: Stefano Stabellini
Cc: Andrii Anisov; xen-devel@xxxxxxxxxxxxxxxxxxxx; Andrii Anisov; julien.grall@xxxxxxx; konrad.wilk@xxxxxxxxxx; Stefano Stabellini; Oleksandr Dmytryshyn
Subject: Re: [PATCH v2 1/2] swiotlb-xen: implement xen_swiotlb_dma_mmap callback
On Mon, 16 Jan 2017, Stefano Stabellini wrote:
> On Mon, 16 Jan 2017, Andrii Anisov wrote:
> > From: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> >
> > This function creates userspace mapping for the DMA-coherent memory.
> >
> > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> > Signed-off-by: Oleksandr Dmytryshyn <oleksandr.dmytryshyn@xxxxxxxxxxxxxxx>
> > Signed-off-by: Andrii Anisov <andrii_anisov@xxxxxxxx>
> > ---
> > arch/arm/xen/mm.c | 14 ++++++++++++++
> > 1 file changed, 14 insertions(+)
> >
> > diff --git a/arch/arm/xen/mm.c b/arch/arm/xen/mm.c
> > index bd62d94..ff812a2 100644
> > --- a/arch/arm/xen/mm.c
> > +++ b/arch/arm/xen/mm.c
> > @@ -163,6 +163,19 @@ bool xen_arch_need_swiotlb(struct device *dev,
> > !is_device_dma_coherent(dev));
> > }
> >
> > +/*
> > + * Create userspace mapping for the DMA-coherent memory.
> > + */
> > +static 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)
> > +{
Only one suggestion more. For this to work correctly, we are assuming
that no foreging pages are involved here, which is a very reasonable
assumption given that mmap should be called on memory returned by
dma_alloc_coherent. Please add an in-code comment here so that we'll
remember.
> > + if (__generic_dma_ops(dev)->mmap)
> > + return __generic_dma_ops(dev)->mmap(dev, vma, cpu_addr, dma_addr, size, attrs);
> > +
> > + return dma_common_mmap(dev, vma, cpu_addr, dma_addr, size);
> > +}
> > +
> > int xen_create_contiguous_region(phys_addr_t pstart, unsigned int order,
> > unsigned int address_bits,
> > dma_addr_t *dma_handle)
> > @@ -198,6 +211,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)
>
> The patch should work fine and looks OK. It is better written like this,
> compared to the previous versions that reimplemented dma_common_mmap. I
> like the fact that we are reusing the arm specific generic mmap
> functions via __generic_dma_ops.
>
> For consistency, I would prefer to have xen_swiotlb_dma_mmap in
> drivers/xen/swiotlb-xen.c, even if it needs to be #ifdef'ed CONFIG_ARM
> (at least the __generic_dma_ops calls need to be #ifdef'ed).
>
> Konrad, what do you think?
>
|