From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> To: Tomasz Stanislawski <t.stanislaws@samsung.com> Cc: linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, airlied@redhat.com, m.szyprowski@samsung.com, kyungmin.park@samsung.com, sumit.semwal@ti.com, daeinki@gmail.com, daniel.vetter@ffwll.ch, robdclark@gmail.com, pawel@osciak.com, linaro-mm-sig@lists.linaro.org, hverkuil@xs4all.nl, remi@remlab.net, subashrp@gmail.com, mchehab@redhat.com, Andrzej Pietrasiewicz <andrzej.p@samsung.com>, Kamil Debski <k.debski@samsung.com> Subject: Re: [PATCH v4 08/14] v4l: vb2-dma-contig: add support for scatterlist in userptr mode Date: Tue, 17 Apr 2012 02:43:50 +0200 [thread overview] Message-ID: <6297844.L9YCZPPyju@avalon> (raw) In-Reply-To: <1334332076-28489-9-git-send-email-t.stanislaws@samsung.com> Hi Tomasz, Thanks for the patch. On Friday 13 April 2012 17:47:50 Tomasz Stanislawski wrote: > From: Andrzej Pietrasiewicz <andrzej.p@samsung.com> > > This patch introduces usage of dma_map_sg to map memory behind > a userspace pointer to a device as dma-contiguous mapping. > > Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@samsung.com> > Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> > [bugfixing] > Signed-off-by: Kamil Debski <k.debski@samsung.com> > [bugfixing] > Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com> > [add sglist subroutines/code refactoring] > Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> > --- > drivers/media/video/videobuf2-dma-contig.c | 287 +++++++++++++++++++++++-- > 1 files changed, 270 insertions(+), 17 deletions(-) > > diff --git a/drivers/media/video/videobuf2-dma-contig.c > b/drivers/media/video/videobuf2-dma-contig.c index 476e536..3a1e314 100644 > --- a/drivers/media/video/videobuf2-dma-contig.c > +++ b/drivers/media/video/videobuf2-dma-contig.c [snip] > +static struct sg_table *vb2_dc_pages_to_sgt(struct page **pages, > + unsigned int n_pages, unsigned long offset, unsigned long size) > +{ > + struct sg_table *sgt; > + unsigned int chunks; > + unsigned int i; > + unsigned int cur_page; > + int ret; > + struct scatterlist *s; > + unsigned int offset_end = n_pages * PAGE_SIZE - size; Shouldn't offset_end be equal to n_page * PAGE_SIZE - size - offset ? > + sgt = kzalloc(sizeof *sgt, GFP_KERNEL); > + if (!sgt) > + return ERR_PTR(-ENOMEM); > + > + /* compute number of chunks */ > + chunks = 1; > + for (i = 1; i < n_pages; ++i) > + if (pages[i] != pages[i - 1] + 1) > + ++chunks; > + > + ret = sg_alloc_table(sgt, chunks, GFP_KERNEL); > + if (ret) { > + kfree(sgt); > + return ERR_PTR(-ENOMEM); > + } > + > + /* merging chunks and putting them into the scatterlist */ > + cur_page = 0; > + for_each_sg(sgt->sgl, s, sgt->orig_nents, i) { > + size_t size = PAGE_SIZE; This will shadow the size parameter, it's a bit confusing. You could rename it chunk_size. > + unsigned int j; > + > + for (j = cur_page + 1; j < n_pages; ++j) { > + if (pages[j] != pages[j - 1] + 1) > + break; > + size += PAGE_SIZE; > + } > + /* cut offset if chunk starts at the first page */ > + if (cur_page == 0) > + size -= offset; > + /* cut offset_end if chunk ends at the last page */ > + if (j == n_pages) > + size -= offset_end; > + > + sg_set_page(s, pages[cur_page], size, offset); > + offset = 0; What about just chunk_size -= offset; sg_set_page(s, pages[cur_page], min(size, chunk_size), offset); size -= chunk_size; offset = 0; You could then remove the offset_end calculation above. > + cur_page = j; > + } > + > + return sgt; > +} -- Regards, Laurent Pinchart
WARNING: multiple messages have this Message-ID (diff)
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> To: Tomasz Stanislawski <t.stanislaws@samsung.com> Cc: pawel@osciak.com, mchehab@redhat.com, daniel.vetter@ffwll.ch, dri-devel@lists.freedesktop.org, subashrp@gmail.com, linaro-mm-sig@lists.linaro.org, kyungmin.park@samsung.com, Andrzej Pietrasiewicz <andrzej.p@samsung.com>, airlied@redhat.com, remi@remlab.net, linux-media@vger.kernel.org, m.szyprowski@samsung.com Subject: Re: [PATCH v4 08/14] v4l: vb2-dma-contig: add support for scatterlist in userptr mode Date: Tue, 17 Apr 2012 02:43:50 +0200 [thread overview] Message-ID: <6297844.L9YCZPPyju@avalon> (raw) In-Reply-To: <1334332076-28489-9-git-send-email-t.stanislaws@samsung.com> Hi Tomasz, Thanks for the patch. On Friday 13 April 2012 17:47:50 Tomasz Stanislawski wrote: > From: Andrzej Pietrasiewicz <andrzej.p@samsung.com> > > This patch introduces usage of dma_map_sg to map memory behind > a userspace pointer to a device as dma-contiguous mapping. > > Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@samsung.com> > Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> > [bugfixing] > Signed-off-by: Kamil Debski <k.debski@samsung.com> > [bugfixing] > Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com> > [add sglist subroutines/code refactoring] > Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> > --- > drivers/media/video/videobuf2-dma-contig.c | 287 +++++++++++++++++++++++-- > 1 files changed, 270 insertions(+), 17 deletions(-) > > diff --git a/drivers/media/video/videobuf2-dma-contig.c > b/drivers/media/video/videobuf2-dma-contig.c index 476e536..3a1e314 100644 > --- a/drivers/media/video/videobuf2-dma-contig.c > +++ b/drivers/media/video/videobuf2-dma-contig.c [snip] > +static struct sg_table *vb2_dc_pages_to_sgt(struct page **pages, > + unsigned int n_pages, unsigned long offset, unsigned long size) > +{ > + struct sg_table *sgt; > + unsigned int chunks; > + unsigned int i; > + unsigned int cur_page; > + int ret; > + struct scatterlist *s; > + unsigned int offset_end = n_pages * PAGE_SIZE - size; Shouldn't offset_end be equal to n_page * PAGE_SIZE - size - offset ? > + sgt = kzalloc(sizeof *sgt, GFP_KERNEL); > + if (!sgt) > + return ERR_PTR(-ENOMEM); > + > + /* compute number of chunks */ > + chunks = 1; > + for (i = 1; i < n_pages; ++i) > + if (pages[i] != pages[i - 1] + 1) > + ++chunks; > + > + ret = sg_alloc_table(sgt, chunks, GFP_KERNEL); > + if (ret) { > + kfree(sgt); > + return ERR_PTR(-ENOMEM); > + } > + > + /* merging chunks and putting them into the scatterlist */ > + cur_page = 0; > + for_each_sg(sgt->sgl, s, sgt->orig_nents, i) { > + size_t size = PAGE_SIZE; This will shadow the size parameter, it's a bit confusing. You could rename it chunk_size. > + unsigned int j; > + > + for (j = cur_page + 1; j < n_pages; ++j) { > + if (pages[j] != pages[j - 1] + 1) > + break; > + size += PAGE_SIZE; > + } > + /* cut offset if chunk starts at the first page */ > + if (cur_page == 0) > + size -= offset; > + /* cut offset_end if chunk ends at the last page */ > + if (j == n_pages) > + size -= offset_end; > + > + sg_set_page(s, pages[cur_page], size, offset); > + offset = 0; What about just chunk_size -= offset; sg_set_page(s, pages[cur_page], min(size, chunk_size), offset); size -= chunk_size; offset = 0; You could then remove the offset_end calculation above. > + cur_page = j; > + } > + > + return sgt; > +} -- Regards, Laurent Pinchart
next prev parent reply other threads:[~2012-04-17 0:43 UTC|newest] Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-04-13 15:47 [PATCH v4 00/14] Integration of videobuf2 with dmabuf Tomasz Stanislawski 2012-04-13 15:47 ` [PATCH v4 01/14] v4l: Add DMABUF as a memory type Tomasz Stanislawski 2012-04-17 0:57 ` Laurent Pinchart 2012-04-13 15:47 ` [PATCH v4 02/14] Documentation: media: description of DMABUF importing in V4L2 Tomasz Stanislawski 2012-04-16 23:25 ` Laurent Pinchart 2012-04-19 14:32 ` Tomasz Stanislawski 2012-04-19 20:36 ` Mauro Carvalho Chehab 2012-04-19 20:37 ` Mauro Carvalho Chehab 2012-04-20 8:41 ` Tomasz Stanislawski 2012-04-20 10:56 ` Rémi Denis-Courmont 2012-04-20 10:56 ` Rémi Denis-Courmont 2012-04-20 12:25 ` Tomasz Stanislawski 2012-04-20 13:03 ` Rémi Denis-Courmont 2012-04-20 13:03 ` Rémi Denis-Courmont 2012-04-21 17:10 ` Laurent Pinchart 2012-04-20 14:48 ` Mauro Carvalho Chehab 2012-04-20 13:36 ` Mauro Carvalho Chehab 2012-04-23 7:50 ` Marek Szyprowski 2012-04-23 14:00 ` Mauro Carvalho Chehab 2012-04-13 15:47 ` [PATCH v4 03/14] v4l: vb2: add support for shared buffer (dma_buf) Tomasz Stanislawski 2012-04-17 0:57 ` Laurent Pinchart 2012-04-13 15:47 ` [PATCH v4 04/14] v4l: vb: remove warnings about MEMORY_DMABUF Tomasz Stanislawski 2012-04-17 0:57 ` Laurent Pinchart 2012-04-13 15:47 ` [PATCH v4 05/14] v4l: vb2-dma-contig: Shorten vb2_dma_contig prefix to vb2_dc Tomasz Stanislawski 2012-04-13 15:47 ` [PATCH v4 06/14] v4l: vb2-dma-contig: Remove unneeded allocation context structure Tomasz Stanislawski 2012-04-17 0:57 ` Laurent Pinchart 2012-04-13 15:47 ` [PATCH v4 07/14] v4l: vb2-dma-contig: Reorder functions Tomasz Stanislawski 2012-04-13 15:47 ` [PATCH v4 08/14] v4l: vb2-dma-contig: add support for scatterlist in userptr mode Tomasz Stanislawski 2012-04-17 0:43 ` Laurent Pinchart [this message] 2012-04-17 0:43 ` Laurent Pinchart 2012-04-20 8:52 ` Tomasz Stanislawski 2012-04-13 15:47 ` [PATCH v4 09/14] v4l: vb2: add prepare/finish callbacks to allocators Tomasz Stanislawski 2012-04-17 0:57 ` Laurent Pinchart 2012-04-13 15:47 ` [PATCH v4 10/14] v4l: vb2-dma-contig: add prepare/finish to dma-contig allocator Tomasz Stanislawski 2012-04-13 15:47 ` [PATCH v4 11/14] v4l: vb2-dma-contig: add support for dma_buf importing Tomasz Stanislawski 2012-04-17 0:57 ` Laurent Pinchart 2012-04-17 0:57 ` Laurent Pinchart 2012-04-19 11:38 ` Tomasz Stanislawski 2012-04-13 15:47 ` [PATCH v4 12/14] v4l: vb2-dma-contig: change map/unmap behaviour for importers Tomasz Stanislawski 2012-04-17 1:03 ` Laurent Pinchart 2012-04-13 15:47 ` [PATCH v4 13/14] v4l: s5p-tv: mixer: support for dmabuf importing Tomasz Stanislawski 2012-04-13 15:47 ` [PATCH v4 14/14] v4l: fimc: " Tomasz Stanislawski 2012-04-20 12:56 ` Sylwester Nawrocki
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=6297844.L9YCZPPyju@avalon \ --to=laurent.pinchart@ideasonboard.com \ --cc=airlied@redhat.com \ --cc=andrzej.p@samsung.com \ --cc=daeinki@gmail.com \ --cc=daniel.vetter@ffwll.ch \ --cc=dri-devel@lists.freedesktop.org \ --cc=hverkuil@xs4all.nl \ --cc=k.debski@samsung.com \ --cc=kyungmin.park@samsung.com \ --cc=linaro-mm-sig@lists.linaro.org \ --cc=linux-media@vger.kernel.org \ --cc=m.szyprowski@samsung.com \ --cc=mchehab@redhat.com \ --cc=pawel@osciak.com \ --cc=remi@remlab.net \ --cc=robdclark@gmail.com \ --cc=subashrp@gmail.com \ --cc=sumit.semwal@ti.com \ --cc=t.stanislaws@samsung.com \ /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: linkBe 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.