linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/2] gup.c, gup_benchmark.c trivial fixes before the storm
@ 2019-10-14 18:46 John Hubbard
  2019-10-14 18:46 ` [PATCH v2 1/2] mm/gup_benchmark: add a missing "w" to getopt string John Hubbard
  2019-10-14 18:46 ` [PATCH v2 2/2] mm/gup: fix a misnamed "write" argument, and a related bug John Hubbard
  0 siblings, 2 replies; 4+ messages in thread
From: John Hubbard @ 2019-10-14 18:46 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Christoph Hellwig, Aneesh Kumar K . V, Keith Busch, Ira Weiny,
	LKML, linux-mm, John Hubbard, Christoph Hellwig,
	Kirill A . Shutemov, Shuah Khan, linux-kselftest

Hi,

Changes since v1:

1) Fixed a krobot-reported mistake, which also uncovered a pre-existing
bug. Thanks to Kirill for recommending the fix.

2) Added another small fix: changed the data type to unsigned int, as
pointed out by Ira.

2) Added a "Fixes:" line, thanks to Kirill and Aneesh for pinpointing the
commit.

3) Collected Acked-by and Suggested-by's.

Original cover letter, edited slightly
======================================

These trivial fixes apply to today's linux.git (5.4-rc3).

I found these while polishing up the Next And Final get_user_pages()+dma
tracking patchset (which is in final testing and passing nicely...so far).

Anyway, as these two patches apply cleanly both before and after the larger
gup/dma upcoming patchset, I thought it best to send this out separately,
in order to avoid muddying the waters more than usual.

Cc: Christoph Hellwig <hch@lst.de>
Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Keith Busch <keith.busch@intel.com>
Cc: Ira Weiny <ira.weiny@intel.com>
Cc: Shuah Khan <shuah@kernel.org>
Cc: linux-kselftest@vger.kernel.org

John Hubbard (2):
  mm/gup_benchmark: add a missing "w" to getopt string
  mm/gup: fix a misnamed "write" argument, and a related bug

 mm/gup.c                                   | 14 ++++++++------
 tools/testing/selftests/vm/gup_benchmark.c |  2 +-
 2 files changed, 9 insertions(+), 7 deletions(-)

-- 
2.23.0


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

* [PATCH v2 1/2] mm/gup_benchmark: add a missing "w" to getopt string
  2019-10-14 18:46 [PATCH v2 0/2] gup.c, gup_benchmark.c trivial fixes before the storm John Hubbard
@ 2019-10-14 18:46 ` John Hubbard
  2019-10-14 18:46 ` [PATCH v2 2/2] mm/gup: fix a misnamed "write" argument, and a related bug John Hubbard
  1 sibling, 0 replies; 4+ messages in thread
From: John Hubbard @ 2019-10-14 18:46 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Christoph Hellwig, Aneesh Kumar K . V, Keith Busch, Ira Weiny,
	LKML, linux-mm, John Hubbard, Kirill A . Shutemov, Shuah Khan,
	linux-kselftest

Even though gup_benchmark.c has code to handle the -w
command-line option, the "w" is not part of the getopt
string. It looks as if it has been missing the whole time.

On my machine, this leads naturally to the following
predictable result:

$ sudo ./gup_benchmark -w
./gup_benchmark: invalid option -- 'w'

...which is fixed, with this commit.

Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Keith Busch <keith.busch@intel.com>
Cc: Shuah Khan <shuah@kernel.org>
Cc: linux-kselftest@vger.kernel.org
Signed-off-by: John Hubbard <jhubbard@nvidia.com>
---
 tools/testing/selftests/vm/gup_benchmark.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/testing/selftests/vm/gup_benchmark.c b/tools/testing/selftests/vm/gup_benchmark.c
index c0534e298b51..cb3fc09645c4 100644
--- a/tools/testing/selftests/vm/gup_benchmark.c
+++ b/tools/testing/selftests/vm/gup_benchmark.c
@@ -37,7 +37,7 @@ int main(int argc, char **argv)
 	char *file = "/dev/zero";
 	char *p;
 
-	while ((opt = getopt(argc, argv, "m:r:n:f:tTLUSH")) != -1) {
+	while ((opt = getopt(argc, argv, "m:r:n:f:tTLUwSH")) != -1) {
 		switch (opt) {
 		case 'm':
 			size = atoi(optarg) * MB;
-- 
2.23.0


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

* [PATCH v2 2/2] mm/gup: fix a misnamed "write" argument, and a related bug
  2019-10-14 18:46 [PATCH v2 0/2] gup.c, gup_benchmark.c trivial fixes before the storm John Hubbard
  2019-10-14 18:46 ` [PATCH v2 1/2] mm/gup_benchmark: add a missing "w" to getopt string John Hubbard
@ 2019-10-14 18:46 ` John Hubbard
  2019-10-14 20:28   ` Ira Weiny
  1 sibling, 1 reply; 4+ messages in thread
From: John Hubbard @ 2019-10-14 18:46 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Christoph Hellwig, Aneesh Kumar K . V, Keith Busch, Ira Weiny,
	LKML, linux-mm, John Hubbard, kbuild test robot,
	Kirill A . Shutemov, Christoph Hellwig

In several routines, the "flags" argument is incorrectly
named "write". Change it to "flags".

Also, in one place, the misnaming led to an actual bug:
"flags & FOLL_WRITE" is required, rather than just "flags".
(That problem was flagged by krobot, in v1 of this patch.)

Also, change the flags argument from int, to unsigned int.

You can see that this was a simple oversight, because the
calling code passes "flags" to the fifth argument:

gup_pgd_range():
    ...
    if (!gup_huge_pd(__hugepd(pgd_val(pgd)), addr,
		    PGDIR_SHIFT, next, flags, pages, nr))

...which, until this patch, the callees referred to as "write".

Also, change two lines to avoid checkpatch line length
complaints, and another line to fix another oversight
that checkpatch called out: missing "int" on pdshift.

Fixes: b798bec4741b ("mm/gup: change write parameter to flags in fast walk")
Reported-by: kbuild test robot <lkp@intel.com>
Suggested-by: Kirill A. Shutemov <kirill@shutemov.name>
Suggested-by: Ira Weiny <ira.weiny@intel.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Signed-off-by: John Hubbard <jhubbard@nvidia.com>
---
 mm/gup.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/mm/gup.c b/mm/gup.c
index 23a9f9c9d377..8f236a335ae9 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -1973,7 +1973,8 @@ static unsigned long hugepte_addr_end(unsigned long addr, unsigned long end,
 }
 
 static int gup_hugepte(pte_t *ptep, unsigned long sz, unsigned long addr,
-		       unsigned long end, int write, struct page **pages, int *nr)
+		       unsigned long end, unsigned int flags,
+		       struct page **pages, int *nr)
 {
 	unsigned long pte_end;
 	struct page *head, *page;
@@ -1986,7 +1987,7 @@ static int gup_hugepte(pte_t *ptep, unsigned long sz, unsigned long addr,
 
 	pte = READ_ONCE(*ptep);
 
-	if (!pte_access_permitted(pte, write))
+	if (!pte_access_permitted(pte, flags & FOLL_WRITE))
 		return 0;
 
 	/* hugepages are never "special" */
@@ -2023,7 +2024,7 @@ static int gup_hugepte(pte_t *ptep, unsigned long sz, unsigned long addr,
 }
 
 static int gup_huge_pd(hugepd_t hugepd, unsigned long addr,
-		unsigned int pdshift, unsigned long end, int write,
+		unsigned int pdshift, unsigned long end, unsigned int flags,
 		struct page **pages, int *nr)
 {
 	pte_t *ptep;
@@ -2033,7 +2034,7 @@ static int gup_huge_pd(hugepd_t hugepd, unsigned long addr,
 	ptep = hugepte_offset(hugepd, addr, pdshift);
 	do {
 		next = hugepte_addr_end(addr, end, sz);
-		if (!gup_hugepte(ptep, sz, addr, end, write, pages, nr))
+		if (!gup_hugepte(ptep, sz, addr, end, flags, pages, nr))
 			return 0;
 	} while (ptep++, addr = next, addr != end);
 
@@ -2041,7 +2042,7 @@ static int gup_huge_pd(hugepd_t hugepd, unsigned long addr,
 }
 #else
 static inline int gup_huge_pd(hugepd_t hugepd, unsigned long addr,
-		unsigned pdshift, unsigned long end, int write,
+		unsigned int pdshift, unsigned long end, unsigned int flags,
 		struct page **pages, int *nr)
 {
 	return 0;
@@ -2049,7 +2050,8 @@ static inline int gup_huge_pd(hugepd_t hugepd, unsigned long addr,
 #endif /* CONFIG_ARCH_HAS_HUGEPD */
 
 static int gup_huge_pmd(pmd_t orig, pmd_t *pmdp, unsigned long addr,
-		unsigned long end, unsigned int flags, struct page **pages, int *nr)
+			unsigned long end, unsigned int flags,
+			struct page **pages, int *nr)
 {
 	struct page *head, *page;
 	int refs;
-- 
2.23.0


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

* Re: [PATCH v2 2/2] mm/gup: fix a misnamed "write" argument, and a related bug
  2019-10-14 18:46 ` [PATCH v2 2/2] mm/gup: fix a misnamed "write" argument, and a related bug John Hubbard
@ 2019-10-14 20:28   ` Ira Weiny
  0 siblings, 0 replies; 4+ messages in thread
From: Ira Weiny @ 2019-10-14 20:28 UTC (permalink / raw)
  To: John Hubbard
  Cc: Andrew Morton, Christoph Hellwig, Aneesh Kumar K . V,
	Keith Busch, LKML, linux-mm, kbuild test robot,
	Kirill A . Shutemov, Christoph Hellwig

On Mon, Oct 14, 2019 at 11:46:39AM -0700, John Hubbard wrote:
> In several routines, the "flags" argument is incorrectly
> named "write". Change it to "flags".
> 
> Also, in one place, the misnaming led to an actual bug:
> "flags & FOLL_WRITE" is required, rather than just "flags".
> (That problem was flagged by krobot, in v1 of this patch.)
> 
> Also, change the flags argument from int, to unsigned int.
> 
> You can see that this was a simple oversight, because the
> calling code passes "flags" to the fifth argument:
> 
> gup_pgd_range():
>     ...
>     if (!gup_huge_pd(__hugepd(pgd_val(pgd)), addr,
> 		    PGDIR_SHIFT, next, flags, pages, nr))
> 
> ...which, until this patch, the callees referred to as "write".
> 
> Also, change two lines to avoid checkpatch line length
> complaints, and another line to fix another oversight
> that checkpatch called out: missing "int" on pdshift.
> 
> Fixes: b798bec4741b ("mm/gup: change write parameter to flags in fast walk")
> Reported-by: kbuild test robot <lkp@intel.com>
> Suggested-by: Kirill A. Shutemov <kirill@shutemov.name>
> Suggested-by: Ira Weiny <ira.weiny@intel.com>

Reviewed-by: Ira Weiny <ira.weiny@intel.com>

> Cc: Christoph Hellwig <hch@lst.de>
> Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
> Signed-off-by: John Hubbard <jhubbard@nvidia.com>
> ---
>  mm/gup.c | 14 ++++++++------
>  1 file changed, 8 insertions(+), 6 deletions(-)
> 
> diff --git a/mm/gup.c b/mm/gup.c
> index 23a9f9c9d377..8f236a335ae9 100644
> --- a/mm/gup.c
> +++ b/mm/gup.c
> @@ -1973,7 +1973,8 @@ static unsigned long hugepte_addr_end(unsigned long addr, unsigned long end,
>  }
>  
>  static int gup_hugepte(pte_t *ptep, unsigned long sz, unsigned long addr,
> -		       unsigned long end, int write, struct page **pages, int *nr)
> +		       unsigned long end, unsigned int flags,
> +		       struct page **pages, int *nr)
>  {
>  	unsigned long pte_end;
>  	struct page *head, *page;
> @@ -1986,7 +1987,7 @@ static int gup_hugepte(pte_t *ptep, unsigned long sz, unsigned long addr,
>  
>  	pte = READ_ONCE(*ptep);
>  
> -	if (!pte_access_permitted(pte, write))
> +	if (!pte_access_permitted(pte, flags & FOLL_WRITE))
>  		return 0;
>  
>  	/* hugepages are never "special" */
> @@ -2023,7 +2024,7 @@ static int gup_hugepte(pte_t *ptep, unsigned long sz, unsigned long addr,
>  }
>  
>  static int gup_huge_pd(hugepd_t hugepd, unsigned long addr,
> -		unsigned int pdshift, unsigned long end, int write,
> +		unsigned int pdshift, unsigned long end, unsigned int flags,
>  		struct page **pages, int *nr)
>  {
>  	pte_t *ptep;
> @@ -2033,7 +2034,7 @@ static int gup_huge_pd(hugepd_t hugepd, unsigned long addr,
>  	ptep = hugepte_offset(hugepd, addr, pdshift);
>  	do {
>  		next = hugepte_addr_end(addr, end, sz);
> -		if (!gup_hugepte(ptep, sz, addr, end, write, pages, nr))
> +		if (!gup_hugepte(ptep, sz, addr, end, flags, pages, nr))
>  			return 0;
>  	} while (ptep++, addr = next, addr != end);
>  
> @@ -2041,7 +2042,7 @@ static int gup_huge_pd(hugepd_t hugepd, unsigned long addr,
>  }
>  #else
>  static inline int gup_huge_pd(hugepd_t hugepd, unsigned long addr,
> -		unsigned pdshift, unsigned long end, int write,
> +		unsigned int pdshift, unsigned long end, unsigned int flags,
>  		struct page **pages, int *nr)
>  {
>  	return 0;
> @@ -2049,7 +2050,8 @@ static inline int gup_huge_pd(hugepd_t hugepd, unsigned long addr,
>  #endif /* CONFIG_ARCH_HAS_HUGEPD */
>  
>  static int gup_huge_pmd(pmd_t orig, pmd_t *pmdp, unsigned long addr,
> -		unsigned long end, unsigned int flags, struct page **pages, int *nr)
> +			unsigned long end, unsigned int flags,
> +			struct page **pages, int *nr)
>  {
>  	struct page *head, *page;
>  	int refs;
> -- 
> 2.23.0
> 
> 

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

end of thread, other threads:[~2019-10-14 20:28 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-14 18:46 [PATCH v2 0/2] gup.c, gup_benchmark.c trivial fixes before the storm John Hubbard
2019-10-14 18:46 ` [PATCH v2 1/2] mm/gup_benchmark: add a missing "w" to getopt string John Hubbard
2019-10-14 18:46 ` [PATCH v2 2/2] mm/gup: fix a misnamed "write" argument, and a related bug John Hubbard
2019-10-14 20:28   ` Ira Weiny

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).