From: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
To: Christoph Hellwig <hch@lst.de>
Cc: Ricardo Ribalda <ribalda@chromium.org>,
Marek Szyprowski <m.szyprowski@samsung.com>,
Robin Murphy <robin.murphy@arm.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
IOMMU DRIVERS <iommu@lists.linux-foundation.org>,
Joerg Roedel <joro@8bytes.org>,
Linux Doc Mailing List <linux-doc@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Linux Media Mailing List <linux-media@vger.kernel.org>,
Tomasz Figa <tfiga@chromium.org>,
Sergey Senozhatsky <senozhatsky@google.com>
Subject: Re: [PATCH v3 5/6] media: uvcvideo: Use dma_alloc_noncontiguos API
Date: Tue, 1 Dec 2020 12:36:58 +0900 [thread overview]
Message-ID: <20201201033658.GE3723071@google.com> (raw)
In-Reply-To: <20201130083410.GD32234@lst.de>
On (20/11/30 09:34), Christoph Hellwig wrote:
>
> > + uvc_urb->pages = dma_alloc_noncontiguous(dma_dev, stream->urb_size,
> > + &uvc_urb->dma,
> > + gfp_flags | __GFP_NOWARN, 0);
> > + if (!uvc_urb->pages)
> > + return false;
> > +
> > + uvc_urb->buffer = vmap(uvc_urb->pages,
> > + PAGE_ALIGN(stream->urb_size) >> PAGE_SHIFT,
> > + VM_DMA_COHERENT, PAGE_KERNEL);
> > + if (!uvc_urb->buffer) {
> > + dma_free_noncontiguous(dma_dev, stream->urb_size,
> > + uvc_urb->pages, uvc_urb->dma);
> > + return false;
> > + }
> > +
> > + if (sg_alloc_table_from_pages(&uvc_urb->sgt, uvc_urb->pages,
> > + PAGE_ALIGN(stream->urb_size) >> PAGE_SHIFT, 0,
> > + stream->urb_size, GFP_KERNEL)) {
> > + vunmap(uvc_urb->buffer);
> > + dma_free_noncontiguous(dma_dev, stream->urb_size,
> > + uvc_urb->pages, uvc_urb->dma);
> > + return false;
> > + }
>
> I wonder if we should lift this into a helper. On the one hand I had
> proliferating struct scatterlist usage, on the other hand it is all over
> the media and drm code anyway, and duplicating this doesn't help anyone.
Not that I have any sound experience in this area, but the helper
probably won't hurt. Do you also plan to add vmap() to that helper
or dma_alloc_noncontiguous()/sg_alloc_table_from_pages() only?
helper()
{
dma_alloc_noncontiguous();
sg_alloc_table_from_pages();
if ((dma_attrs & DMA_ATTR_NO_KERNEL_MAPPING) == 0)
vmap();
}
videobuf2-dma-contig still has to carry around two versions: one that
deals with the noncontig pages and sgt (new API); and the current one.
But if the helper will include fallback to coherent allocations then
this may change, depending on the helper implementation.
-ss
WARNING: multiple messages have this Message-ID (diff)
From: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
To: Christoph Hellwig <hch@lst.de>
Cc: Sergey Senozhatsky <senozhatsky@google.com>,
Linux Media Mailing List <linux-media@vger.kernel.org>,
Linux Doc Mailing List <linux-doc@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
IOMMU DRIVERS <iommu@lists.linux-foundation.org>,
Ricardo Ribalda <ribalda@chromium.org>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Robin Murphy <robin.murphy@arm.com>
Subject: Re: [PATCH v3 5/6] media: uvcvideo: Use dma_alloc_noncontiguos API
Date: Tue, 1 Dec 2020 12:36:58 +0900 [thread overview]
Message-ID: <20201201033658.GE3723071@google.com> (raw)
In-Reply-To: <20201130083410.GD32234@lst.de>
On (20/11/30 09:34), Christoph Hellwig wrote:
>
> > + uvc_urb->pages = dma_alloc_noncontiguous(dma_dev, stream->urb_size,
> > + &uvc_urb->dma,
> > + gfp_flags | __GFP_NOWARN, 0);
> > + if (!uvc_urb->pages)
> > + return false;
> > +
> > + uvc_urb->buffer = vmap(uvc_urb->pages,
> > + PAGE_ALIGN(stream->urb_size) >> PAGE_SHIFT,
> > + VM_DMA_COHERENT, PAGE_KERNEL);
> > + if (!uvc_urb->buffer) {
> > + dma_free_noncontiguous(dma_dev, stream->urb_size,
> > + uvc_urb->pages, uvc_urb->dma);
> > + return false;
> > + }
> > +
> > + if (sg_alloc_table_from_pages(&uvc_urb->sgt, uvc_urb->pages,
> > + PAGE_ALIGN(stream->urb_size) >> PAGE_SHIFT, 0,
> > + stream->urb_size, GFP_KERNEL)) {
> > + vunmap(uvc_urb->buffer);
> > + dma_free_noncontiguous(dma_dev, stream->urb_size,
> > + uvc_urb->pages, uvc_urb->dma);
> > + return false;
> > + }
>
> I wonder if we should lift this into a helper. On the one hand I had
> proliferating struct scatterlist usage, on the other hand it is all over
> the media and drm code anyway, and duplicating this doesn't help anyone.
Not that I have any sound experience in this area, but the helper
probably won't hurt. Do you also plan to add vmap() to that helper
or dma_alloc_noncontiguous()/sg_alloc_table_from_pages() only?
helper()
{
dma_alloc_noncontiguous();
sg_alloc_table_from_pages();
if ((dma_attrs & DMA_ATTR_NO_KERNEL_MAPPING) == 0)
vmap();
}
videobuf2-dma-contig still has to carry around two versions: one that
deals with the noncontig pages and sgt (new API); and the current one.
But if the helper will include fallback to coherent allocations then
this may change, depending on the helper implementation.
-ss
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu
next prev parent reply other threads:[~2020-12-01 3:37 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-25 22:19 [PATCH v3 5/6] media: uvcvideo: Use dma_alloc_noncontiguos API Ricardo Ribalda
2020-11-25 22:19 ` Ricardo Ribalda
2020-11-26 11:44 ` Sergey Senozhatsky
2020-11-26 11:44 ` Sergey Senozhatsky
2020-11-30 8:31 ` Christoph Hellwig
2020-11-30 8:31 ` Christoph Hellwig
2020-11-30 8:34 ` Christoph Hellwig
2020-11-30 8:34 ` Christoph Hellwig
2020-11-30 10:49 ` Ricardo Ribalda
2020-11-30 10:49 ` Ricardo Ribalda
2020-12-01 3:36 ` Sergey Senozhatsky [this message]
2020-12-01 3:36 ` Sergey Senozhatsky
2020-12-01 14:49 ` Christoph Hellwig
2020-12-01 14:49 ` Christoph Hellwig
2020-12-08 4:54 ` Tomasz Figa
2020-12-08 4:54 ` Tomasz Figa
2020-12-08 6:45 ` Sergey Senozhatsky via iommu
2020-12-08 7:13 ` Sergey Senozhatsky
2020-12-08 7:13 ` Sergey Senozhatsky
2020-12-09 11:16 ` . Christoph Hellwig
2020-12-09 11:16 ` . Christoph Hellwig
2021-01-07 14:14 ` Ricardo Ribalda
2021-01-07 14:14 ` Ricardo Ribalda
2021-01-11 8:36 ` . Christoph Hellwig
2021-01-11 8:36 ` . Christoph Hellwig
2021-01-15 13:08 ` Ricardo Ribalda
2021-01-15 13:08 ` Ricardo Ribalda
2021-01-20 17:17 ` . Christoph Hellwig
2021-01-20 17:17 ` . Christoph Hellwig
2021-01-26 17:06 ` . Christoph Hellwig
2021-01-26 17:06 ` . Christoph Hellwig
2021-01-26 23:29 ` Ricardo Ribalda
2021-01-26 23:29 ` Ricardo Ribalda
2021-01-27 15:56 ` . Christoph Hellwig
2021-01-27 15:56 ` . Christoph Hellwig
2021-01-27 21:35 ` Ricardo Ribalda
2021-01-27 21:35 ` Ricardo Ribalda
2021-01-28 7:57 ` . Christoph Hellwig
2021-01-28 7:57 ` . Christoph Hellwig
2020-12-09 11:12 ` Christoph Hellwig
2020-12-09 11:12 ` Christoph Hellwig
2020-12-09 13:05 ` Robin Murphy
2020-12-09 13:05 ` Robin Murphy
2020-12-10 5:08 ` Tomasz Figa
2020-12-10 5:08 ` Tomasz Figa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201201033658.GE3723071@google.com \
--to=sergey.senozhatsky.work@gmail.com \
--cc=hch@lst.de \
--cc=iommu@lists.linux-foundation.org \
--cc=joro@8bytes.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=mchehab@kernel.org \
--cc=ribalda@chromium.org \
--cc=robin.murphy@arm.com \
--cc=senozhatsky@google.com \
--cc=tfiga@chromium.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.