LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH 2/2] auxdisplay/ht16k33.c: Convert to use vm_map_pages_zero()
@ 2019-05-26 16:11 Souptick Joarder
  0 siblings, 0 replies; 10+ messages in thread
From: Souptick Joarder @ 2019-05-26 16:11 UTC (permalink / raw)
  To: miguel.ojeda.sandonis; +Cc: linux-kernel, willy, robin, Souptick Joarder

While using mmap, the incorrect values of length and vm_pgoff are
ignored and this driver goes ahead with mapping fbdev.buffer
to user vma.

Convert vm_insert_pages() to use vm_map_pages_zero(). We could later
"fix" these drivers to behave according to the normal vm_pgoff
offsetting simply by removing the _zero suffix on the function name
and if that causes regressions, it gives us an easy way to revert.

Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com>
Acked-by: Robin van der Gracht <robin@protonic.nl>
---
v2: Fixed minor typo. Acked-by tag added.

 drivers/auxdisplay/ht16k33.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/auxdisplay/ht16k33.c b/drivers/auxdisplay/ht16k33.c
index 21393ec..9c0bb77 100644
--- a/drivers/auxdisplay/ht16k33.c
+++ b/drivers/auxdisplay/ht16k33.c
@@ -223,9 +223,9 @@ static int ht16k33_bl_check_fb(struct backlight_device *bl, struct fb_info *fi)
 static int ht16k33_mmap(struct fb_info *info, struct vm_area_struct *vma)
 {
 	struct ht16k33_priv *priv = info->par;
+	struct page *pages = virt_to_page(priv->fbdev.buffer);
 
-	return vm_insert_page(vma, vma->vm_start,
-			      virt_to_page(priv->fbdev.buffer));
+	return vm_map_pages_zero(vma, &pages, 1);
 }
 
 static struct fb_ops ht16k33_fb_ops = {
-- 
1.9.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] auxdisplay/ht16k33.c: Convert to use vm_map_pages_zero()
  2019-05-24  6:07         ` Souptick Joarder
@ 2019-05-28 19:03           ` Miguel Ojeda
  0 siblings, 0 replies; 10+ messages in thread
From: Miguel Ojeda @ 2019-05-28 19:03 UTC (permalink / raw)
  To: Souptick Joarder; +Cc: Robin van der Gracht, linux-kernel, Matthew Wilcox

On Fri, May 24, 2019 at 8:07 AM Souptick Joarder <jrdr.linux@gmail.com> wrote:
>
> > > Taking a quick look now, by the way, why does vm_map_pages_zero() (and
> > > __vm_map_pages() etc.) get a pointer to an array instead of a pointer
> > > to the first element?
>
> For this particular driver, one page is getting mapped into vma. But
> there are other
> places where a entire page array ( with more than one pages) mapped into
> vma. That's the reason to pass pointer to an array and do rest of the operations
> inside __vm_map_pages().

Ah, "pointer to array of source kernel pages" made me think the actual
`struct page`s were the ones consecutive in memory, not the pointers.
Maybe "array of page pointers" is more clear.

> > Also, in __vm_map_pages(), semantically w.r.t. to the comment,
> > shouldn't the first check test for equality too? (i.e. for vm_pgoff ==
> > num)? (even if such case fails in the second test anyway).
>
> Sorry, didn't get it. Do you mean there should be a separate check for
> *vm_pgoff == num* ?

No, that the first check should be widened. I will send a patch.

Cheers,
Miguel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] auxdisplay/ht16k33.c: Convert to use vm_map_pages_zero()
  2019-05-23 13:23 ` Miguel Ojeda
@ 2019-05-24  6:10   ` Souptick Joarder
  0 siblings, 0 replies; 10+ messages in thread
From: Souptick Joarder @ 2019-05-24  6:10 UTC (permalink / raw)
  To: Miguel Ojeda; +Cc: Robin van der Gracht, linux-kernel, Matthew Wilcox

On Thu, May 23, 2019 at 6:53 PM Miguel Ojeda
<miguel.ojeda.sandonis@gmail.com> wrote:
>
> On Mon, May 20, 2019 at 5:26 PM Souptick Joarder <jrdr.linux@gmail.com> wrote:
> >
> > While using mmap, the incorrect value of length and vm_pgoff are
> > ignored and this driver go ahead with mapping fbdev.buffer
> > to user vma.
>
> Typos: values*, goes* (same for the other patch)

Ok, will add it into v2.

>
> > Convert vm_insert_pages() to use vm_map_pages_zero(). We could later
> > "fix" these drivers to behave according to the normal vm_pgoff
> > offsetting simply by removing the _zero suffix on the function name
> > and if that causes regressions, it gives us an easy way to revert.
>
> Would it be possible to add a "Link:" to where these new functions are
> discussed/used (maybe a lore.kernel.org link?)?

This might be helpful.
https://lkml.org/lkml/2018/12/24/204

>
> Thanks for the patch!
>
> Cheers,
> Miguel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] auxdisplay/ht16k33.c: Convert to use vm_map_pages_zero()
  2019-05-24  4:22       ` Miguel Ojeda
@ 2019-05-24  6:07         ` Souptick Joarder
  2019-05-28 19:03           ` Miguel Ojeda
  0 siblings, 1 reply; 10+ messages in thread
From: Souptick Joarder @ 2019-05-24  6:07 UTC (permalink / raw)
  To: Miguel Ojeda; +Cc: Robin van der Gracht, linux-kernel, Matthew Wilcox

On Fri, May 24, 2019 at 9:52 AM Miguel Ojeda
<miguel.ojeda.sandonis@gmail.com> wrote:
>
> On Thu, May 23, 2019 at 2:58 PM Miguel Ojeda
> <miguel.ojeda.sandonis@gmail.com> wrote:
> >



> > Taking a quick look now, by the way, why does vm_map_pages_zero() (and
> > __vm_map_pages() etc.) get a pointer to an array instead of a pointer
> > to the first element?

For this particular driver, one page is getting mapped into vma. But
there are other
places where a entire page array ( with more than one pages) mapped into
vma. That's the reason to pass pointer to an array and do rest of the operations
inside __vm_map_pages().

https://lkml.org/lkml/2019/3/18/1265

>
> Also, in __vm_map_pages(), semantically w.r.t. to the comment,
> shouldn't the first check test for equality too? (i.e. for vm_pgoff ==
> num)? (even if such case fails in the second test anyway).

Sorry, didn't get it. Do you mean there should be a separate check for
*vm_pgoff == num* ?


> Cheers,
> Miguel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] auxdisplay/ht16k33.c: Convert to use vm_map_pages_zero()
  2019-05-23 12:58     ` Miguel Ojeda
@ 2019-05-24  4:22       ` Miguel Ojeda
  2019-05-24  6:07         ` Souptick Joarder
  0 siblings, 1 reply; 10+ messages in thread
From: Miguel Ojeda @ 2019-05-24  4:22 UTC (permalink / raw)
  To: Souptick Joarder; +Cc: Robin van der Gracht, linux-kernel, Matthew Wilcox

On Thu, May 23, 2019 at 2:58 PM Miguel Ojeda
<miguel.ojeda.sandonis@gmail.com> wrote:
>
> Taking a quick look now, by the way, why does vm_map_pages_zero() (and
> __vm_map_pages() etc.) get a pointer to an array instead of a pointer
> to the first element?

Also, in __vm_map_pages(), semantically w.r.t. to the comment,
shouldn't the first check test for equality too? (i.e. for vm_pgoff ==
num)? (even if such case fails in the second test anyway).

Cheers,
Miguel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] auxdisplay/ht16k33.c: Convert to use vm_map_pages_zero()
  2019-05-20 15:30 Souptick Joarder
  2019-05-21  6:55 ` Robin van der Gracht
@ 2019-05-23 13:23 ` Miguel Ojeda
  2019-05-24  6:10   ` Souptick Joarder
  1 sibling, 1 reply; 10+ messages in thread
From: Miguel Ojeda @ 2019-05-23 13:23 UTC (permalink / raw)
  To: Souptick Joarder; +Cc: Robin van der Gracht, linux-kernel, Matthew Wilcox

On Mon, May 20, 2019 at 5:26 PM Souptick Joarder <jrdr.linux@gmail.com> wrote:
>
> While using mmap, the incorrect value of length and vm_pgoff are
> ignored and this driver go ahead with mapping fbdev.buffer
> to user vma.

Typos: values*, goes* (same for the other patch)

> Convert vm_insert_pages() to use vm_map_pages_zero(). We could later
> "fix" these drivers to behave according to the normal vm_pgoff
> offsetting simply by removing the _zero suffix on the function name
> and if that causes regressions, it gives us an easy way to revert.

Would it be possible to add a "Link:" to where these new functions are
discussed/used (maybe a lore.kernel.org link?)?

Thanks for the patch!

Cheers,
Miguel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] auxdisplay/ht16k33.c: Convert to use vm_map_pages_zero()
  2019-05-23  8:18   ` Souptick Joarder
@ 2019-05-23 12:58     ` Miguel Ojeda
  2019-05-24  4:22       ` Miguel Ojeda
  0 siblings, 1 reply; 10+ messages in thread
From: Miguel Ojeda @ 2019-05-23 12:58 UTC (permalink / raw)
  To: Souptick Joarder; +Cc: Robin van der Gracht, linux-kernel, Matthew Wilcox

On Thu, May 23, 2019 at 10:18 AM Souptick Joarder <jrdr.linux@gmail.com> wrote:
>
> Miguel, Ack from Robin is missing in linux-next-20190523 when applied.

Thanks for the warning! I wanted to review first but didn't get to it yet.

Taking a quick look now, by the way, why does vm_map_pages_zero() (and
__vm_map_pages() etc.) get a pointer to an array instead of a pointer
to the first element?

Cheers,
Miguel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] auxdisplay/ht16k33.c: Convert to use vm_map_pages_zero()
  2019-05-21  6:55 ` Robin van der Gracht
@ 2019-05-23  8:18   ` Souptick Joarder
  2019-05-23 12:58     ` Miguel Ojeda
  0 siblings, 1 reply; 10+ messages in thread
From: Souptick Joarder @ 2019-05-23  8:18 UTC (permalink / raw)
  To: Robin van der Gracht; +Cc: Miguel Ojeda, linux-kernel, Matthew Wilcox

On Tue, May 21, 2019 at 12:24 PM Robin van der Gracht <robin@protonic.nl> wrote:
>
> On Mon, 20 May 2019 21:00:58 +0530
> Souptick Joarder <jrdr.linux@gmail.com> wrote:
>
> > While using mmap, the incorrect value of length and vm_pgoff are
> > ignored and this driver go ahead with mapping fbdev.buffer
> > to user vma.
> >
> > Convert vm_insert_pages() to use vm_map_pages_zero(). We could later
> > "fix" these drivers to behave according to the normal vm_pgoff
> > offsetting simply by removing the _zero suffix on the function name
> > and if that causes regressions, it gives us an easy way to revert.
> >
> > Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com>
> > ---
> >  drivers/auxdisplay/ht16k33.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/auxdisplay/ht16k33.c b/drivers/auxdisplay/ht16k33.c
> > index 21393ec..9c0bb77 100644
> > --- a/drivers/auxdisplay/ht16k33.c
> > +++ b/drivers/auxdisplay/ht16k33.c
> > @@ -223,9 +223,9 @@ static int ht16k33_bl_check_fb(struct backlight_device *bl, struct fb_info *fi)
> >  static int ht16k33_mmap(struct fb_info *info, struct vm_area_struct *vma)
> >  {
> >       struct ht16k33_priv *priv = info->par;
> > +     struct page *pages = virt_to_page(priv->fbdev.buffer);
> >
> > -     return vm_insert_page(vma, vma->vm_start,
> > -                           virt_to_page(priv->fbdev.buffer));
> > +     return vm_map_pages_zero(vma, &pages, 1);
> >  }
> >
> >  static struct fb_ops ht16k33_fb_ops = {
>
> Acked-by: Robin van der Gracht <robin@protonic.nl>

Miguel, Ack from Robin is missing in linux-next-20190523 when applied.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] auxdisplay/ht16k33.c: Convert to use vm_map_pages_zero()
  2019-05-20 15:30 Souptick Joarder
@ 2019-05-21  6:55 ` Robin van der Gracht
  2019-05-23  8:18   ` Souptick Joarder
  2019-05-23 13:23 ` Miguel Ojeda
  1 sibling, 1 reply; 10+ messages in thread
From: Robin van der Gracht @ 2019-05-21  6:55 UTC (permalink / raw)
  To: Souptick Joarder; +Cc: miguel.ojeda.sandonis, linux-kernel, willy

On Mon, 20 May 2019 21:00:58 +0530
Souptick Joarder <jrdr.linux@gmail.com> wrote:

> While using mmap, the incorrect value of length and vm_pgoff are
> ignored and this driver go ahead with mapping fbdev.buffer
> to user vma.
> 
> Convert vm_insert_pages() to use vm_map_pages_zero(). We could later
> "fix" these drivers to behave according to the normal vm_pgoff
> offsetting simply by removing the _zero suffix on the function name
> and if that causes regressions, it gives us an easy way to revert.
> 
> Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com>
> ---
>  drivers/auxdisplay/ht16k33.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/auxdisplay/ht16k33.c b/drivers/auxdisplay/ht16k33.c
> index 21393ec..9c0bb77 100644
> --- a/drivers/auxdisplay/ht16k33.c
> +++ b/drivers/auxdisplay/ht16k33.c
> @@ -223,9 +223,9 @@ static int ht16k33_bl_check_fb(struct backlight_device *bl, struct fb_info *fi)
>  static int ht16k33_mmap(struct fb_info *info, struct vm_area_struct *vma)
>  {
>  	struct ht16k33_priv *priv = info->par;
> +	struct page *pages = virt_to_page(priv->fbdev.buffer);
>  
> -	return vm_insert_page(vma, vma->vm_start,
> -			      virt_to_page(priv->fbdev.buffer));
> +	return vm_map_pages_zero(vma, &pages, 1);
>  }
>  
>  static struct fb_ops ht16k33_fb_ops = {

Acked-by: Robin van der Gracht <robin@protonic.nl>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 2/2] auxdisplay/ht16k33.c: Convert to use vm_map_pages_zero()
@ 2019-05-20 15:30 Souptick Joarder
  2019-05-21  6:55 ` Robin van der Gracht
  2019-05-23 13:23 ` Miguel Ojeda
  0 siblings, 2 replies; 10+ messages in thread
From: Souptick Joarder @ 2019-05-20 15:30 UTC (permalink / raw)
  To: miguel.ojeda.sandonis, robin; +Cc: linux-kernel, willy, Souptick Joarder

While using mmap, the incorrect value of length and vm_pgoff are
ignored and this driver go ahead with mapping fbdev.buffer
to user vma.

Convert vm_insert_pages() to use vm_map_pages_zero(). We could later
"fix" these drivers to behave according to the normal vm_pgoff
offsetting simply by removing the _zero suffix on the function name
and if that causes regressions, it gives us an easy way to revert.

Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com>
---
 drivers/auxdisplay/ht16k33.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/auxdisplay/ht16k33.c b/drivers/auxdisplay/ht16k33.c
index 21393ec..9c0bb77 100644
--- a/drivers/auxdisplay/ht16k33.c
+++ b/drivers/auxdisplay/ht16k33.c
@@ -223,9 +223,9 @@ static int ht16k33_bl_check_fb(struct backlight_device *bl, struct fb_info *fi)
 static int ht16k33_mmap(struct fb_info *info, struct vm_area_struct *vma)
 {
 	struct ht16k33_priv *priv = info->par;
+	struct page *pages = virt_to_page(priv->fbdev.buffer);
 
-	return vm_insert_page(vma, vma->vm_start,
-			      virt_to_page(priv->fbdev.buffer));
+	return vm_map_pages_zero(vma, &pages, 1);
 }
 
 static struct fb_ops ht16k33_fb_ops = {
-- 
1.9.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2019-05-28 19:03 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-26 16:11 [PATCH 2/2] auxdisplay/ht16k33.c: Convert to use vm_map_pages_zero() Souptick Joarder
  -- strict thread matches above, loose matches on Subject: below --
2019-05-20 15:30 Souptick Joarder
2019-05-21  6:55 ` Robin van der Gracht
2019-05-23  8:18   ` Souptick Joarder
2019-05-23 12:58     ` Miguel Ojeda
2019-05-24  4:22       ` Miguel Ojeda
2019-05-24  6:07         ` Souptick Joarder
2019-05-28 19:03           ` Miguel Ojeda
2019-05-23 13:23 ` Miguel Ojeda
2019-05-24  6:10   ` Souptick Joarder

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).