[PATCH] drm/via: use get_user_pages_unlocked()
Moving from get_user_pages() to get_user_pages_unlocked() simplifies the code and takes advantage of VM_FAULT_RETRY functionality when faulting in pages. Signed-off-by: Lorenzo Stoakes --- drivers/gpu/drm/via/via_dmablit.c | 10 +++--- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/via/via_dmablit.c b/drivers/gpu/drm/via/via_dmablit.c index 1a3ad76..98aae98 100644 --- a/drivers/gpu/drm/via/via_dmablit.c +++ b/drivers/gpu/drm/via/via_dmablit.c @@ -238,13 +238,9 @@ via_lock_all_dma_pages(drm_via_sg_info_t *vsg, drm_via_dmablit_t *xfer) vsg->pages = vzalloc(sizeof(struct page *) * vsg->num_pages); if (NULL == vsg->pages) return -ENOMEM; - down_read(¤t->mm->mmap_sem); - ret = get_user_pages((unsigned long)xfer->mem_addr, -vsg->num_pages, -(vsg->direction == DMA_FROM_DEVICE) ? FOLL_WRITE : 0, -vsg->pages, NULL); - - up_read(¤t->mm->mmap_sem); + ret = get_user_pages_unlocked((unsigned long)xfer->mem_addr, + vsg->num_pages, vsg->pages, + (vsg->direction == DMA_FROM_DEVICE) ? FOLL_WRITE : 0); if (ret != vsg->num_pages) { if (ret < 0) return ret; -- 2.10.2
Re: [PATCH] drm/via: use get_user_pages_unlocked()
On 3 January 2017 at 20:23, Lorenzo Stoakes wrote: > Hi All, > > Just a gentle ping on this one :) > > Cheers, Lorenzo > > On 1 November 2016 at 19:43, Lorenzo Stoakes wrote: >> Moving from get_user_pages() to get_user_pages_unlocked() simplifies the code >> and takes advantage of VM_FAULT_RETRY functionality when faulting in pages. >> >> Signed-off-by: Lorenzo Stoakes >> --- >> drivers/gpu/drm/via/via_dmablit.c | 10 +++--- >> 1 file changed, 3 insertions(+), 7 deletions(-) >> >> diff --git a/drivers/gpu/drm/via/via_dmablit.c >> b/drivers/gpu/drm/via/via_dmablit.c >> index 1a3ad76..98aae98 100644 >> --- a/drivers/gpu/drm/via/via_dmablit.c >> +++ b/drivers/gpu/drm/via/via_dmablit.c >> @@ -238,13 +238,9 @@ via_lock_all_dma_pages(drm_via_sg_info_t *vsg, >> drm_via_dmablit_t *xfer) >> vsg->pages = vzalloc(sizeof(struct page *) * vsg->num_pages); >> if (NULL == vsg->pages) >> return -ENOMEM; >> - down_read(¤t->mm->mmap_sem); >> - ret = get_user_pages((unsigned long)xfer->mem_addr, >> -vsg->num_pages, >> -(vsg->direction == DMA_FROM_DEVICE) ? >> FOLL_WRITE : 0, >> -vsg->pages, NULL); >> - >> - up_read(¤t->mm->mmap_sem); >> + ret = get_user_pages_unlocked((unsigned long)xfer->mem_addr, >> + vsg->num_pages, vsg->pages, >> + (vsg->direction == DMA_FROM_DEVICE) ? FOLL_WRITE : >> 0); >> if (ret != vsg->num_pages) { >> if (ret < 0) >> return ret; >> -- >> 2.10.2 >> Adding Andrew, as this may be another less active corner of the corner, thanks! -- Lorenzo Stoakes https://ljs.io
Re: [PATCH] drm/via: use get_user_pages_unlocked()
Hi All, Just a gentle ping on this one :) Cheers, Lorenzo On 1 November 2016 at 19:43, Lorenzo Stoakes wrote: > Moving from get_user_pages() to get_user_pages_unlocked() simplifies the code > and takes advantage of VM_FAULT_RETRY functionality when faulting in pages. > > Signed-off-by: Lorenzo Stoakes > --- > drivers/gpu/drm/via/via_dmablit.c | 10 +++--- > 1 file changed, 3 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/via/via_dmablit.c > b/drivers/gpu/drm/via/via_dmablit.c > index 1a3ad76..98aae98 100644 > --- a/drivers/gpu/drm/via/via_dmablit.c > +++ b/drivers/gpu/drm/via/via_dmablit.c > @@ -238,13 +238,9 @@ via_lock_all_dma_pages(drm_via_sg_info_t *vsg, > drm_via_dmablit_t *xfer) > vsg->pages = vzalloc(sizeof(struct page *) * vsg->num_pages); > if (NULL == vsg->pages) > return -ENOMEM; > - down_read(¤t->mm->mmap_sem); > - ret = get_user_pages((unsigned long)xfer->mem_addr, > -vsg->num_pages, > -(vsg->direction == DMA_FROM_DEVICE) ? FOLL_WRITE > : 0, > -vsg->pages, NULL); > - > - up_read(¤t->mm->mmap_sem); > + ret = get_user_pages_unlocked((unsigned long)xfer->mem_addr, > + vsg->num_pages, vsg->pages, > + (vsg->direction == DMA_FROM_DEVICE) ? FOLL_WRITE : 0); > if (ret != vsg->num_pages) { > if (ret < 0) > return ret; > -- > 2.10.2 > -- Lorenzo Stoakes https://ljs.io
Re: [PATCH] drm/via: use get_user_pages_unlocked()
On 6 January 2017 at 07:09, Lorenzo Stoakes wrote: > > Adding Andrew, as this may be another less active corner of the corner, > thanks! Hi all, Thought I'd also give this one a gentle nudge now the merge window has re-opened, Andrew - are you ok to pick this up? I've checked the patch and it still applies, for convenience the raw patch is available at https://marc.info/?l=linux-mm&m=147802942832515&q=raw - let me know if there's anything else I can do on this or if you'd prefer a re-send. Best, Lorenzo > On 3 January 2017 at 20:23, Lorenzo Stoakes wrote: >> Hi All, >> >> Just a gentle ping on this one :) >> >> Cheers, Lorenzo >> >> On 1 November 2016 at 19:43, Lorenzo Stoakes wrote: >>> Moving from get_user_pages() to get_user_pages_unlocked() simplifies the >>> code >>> and takes advantage of VM_FAULT_RETRY functionality when faulting in pages. >>> >>> Signed-off-by: Lorenzo Stoakes >>> --- >>> drivers/gpu/drm/via/via_dmablit.c | 10 +++--- >>> 1 file changed, 3 insertions(+), 7 deletions(-) >>> >>> diff --git a/drivers/gpu/drm/via/via_dmablit.c >>> b/drivers/gpu/drm/via/via_dmablit.c >>> index 1a3ad76..98aae98 100644 >>> --- a/drivers/gpu/drm/via/via_dmablit.c >>> +++ b/drivers/gpu/drm/via/via_dmablit.c >>> @@ -238,13 +238,9 @@ via_lock_all_dma_pages(drm_via_sg_info_t *vsg, >>> drm_via_dmablit_t *xfer) >>> vsg->pages = vzalloc(sizeof(struct page *) * vsg->num_pages); >>> if (NULL == vsg->pages) >>> return -ENOMEM; >>> - down_read(¤t->mm->mmap_sem); >>> - ret = get_user_pages((unsigned long)xfer->mem_addr, >>> -vsg->num_pages, >>> -(vsg->direction == DMA_FROM_DEVICE) ? >>> FOLL_WRITE : 0, >>> -vsg->pages, NULL); >>> - >>> - up_read(¤t->mm->mmap_sem); >>> + ret = get_user_pages_unlocked((unsigned long)xfer->mem_addr, >>> + vsg->num_pages, vsg->pages, >>> + (vsg->direction == DMA_FROM_DEVICE) ? FOLL_WRITE : >>> 0); >>> if (ret != vsg->num_pages) { >>> if (ret < 0) >>> return ret; >>> -- >>> 2.10.2 >>> -- Lorenzo Stoakes https://ljs.io
Re: [PATCH] drm/via: use get_user_pages_unlocked()
On Mon, Feb 20, 2017 at 06:46:54PM +, Lorenzo Stoakes wrote: > On 6 January 2017 at 07:09, Lorenzo Stoakes wrote: > > > > Adding Andrew, as this may be another less active corner of the corner, > > thanks! > > Hi all, > > Thought I'd also give this one a gentle nudge now the merge window has > re-opened, Andrew - are you ok to pick this up? I've checked the patch > and it still applies, for convenience the raw patch is available at > https://marc.info/?l=linux-mm&m=147802942832515&q=raw - let me know if > there's anything else I can do on this or if you'd prefer a re-send. Somehow your original patch never made it to dri-devel :( The via driver is entirely unmaintained, but if you resubmit I'll smash it into drm-misc for 4.12. Merge window is long over already for 4.11, subsystems need to have their stuff ready _before_ it starts. Cheers, Daniel > > Best, Lorenzo > > > On 3 January 2017 at 20:23, Lorenzo Stoakes wrote: > >> Hi All, > >> > >> Just a gentle ping on this one :) > >> > >> Cheers, Lorenzo > >> > >> On 1 November 2016 at 19:43, Lorenzo Stoakes wrote: > >>> Moving from get_user_pages() to get_user_pages_unlocked() simplifies the > >>> code > >>> and takes advantage of VM_FAULT_RETRY functionality when faulting in > >>> pages. > >>> > >>> Signed-off-by: Lorenzo Stoakes > >>> --- > >>> drivers/gpu/drm/via/via_dmablit.c | 10 +++--- > >>> 1 file changed, 3 insertions(+), 7 deletions(-) > >>> > >>> diff --git a/drivers/gpu/drm/via/via_dmablit.c > >>> b/drivers/gpu/drm/via/via_dmablit.c > >>> index 1a3ad76..98aae98 100644 > >>> --- a/drivers/gpu/drm/via/via_dmablit.c > >>> +++ b/drivers/gpu/drm/via/via_dmablit.c > >>> @@ -238,13 +238,9 @@ via_lock_all_dma_pages(drm_via_sg_info_t *vsg, > >>> drm_via_dmablit_t *xfer) > >>> vsg->pages = vzalloc(sizeof(struct page *) * vsg->num_pages); > >>> if (NULL == vsg->pages) > >>> return -ENOMEM; > >>> - down_read(¤t->mm->mmap_sem); > >>> - ret = get_user_pages((unsigned long)xfer->mem_addr, > >>> -vsg->num_pages, > >>> -(vsg->direction == DMA_FROM_DEVICE) ? > >>> FOLL_WRITE : 0, > >>> -vsg->pages, NULL); > >>> - > >>> - up_read(¤t->mm->mmap_sem); > >>> + ret = get_user_pages_unlocked((unsigned long)xfer->mem_addr, > >>> + vsg->num_pages, vsg->pages, > >>> + (vsg->direction == DMA_FROM_DEVICE) ? FOLL_WRITE > >>> : 0); > >>> if (ret != vsg->num_pages) { > >>> if (ret < 0) > >>> return ret; > >>> -- > >>> 2.10.2 > >>> > > -- > Lorenzo Stoakes > https://ljs.io > > -- > To unsubscribe, send a message with 'unsubscribe linux-mm' in > the body to majord...@kvack.org. For more info on Linux MM, > see: http://www.linux-mm.org/ . > Don't email: mailto:"d...@kvack.org";> em...@kvack.org -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch