diff mbox series

mm/pgtable: define pte_index so that preprocessor could recognize it

Message ID 20220111145457.20748-1-rppt@kernel.org
State New
Headers show
Series mm/pgtable: define pte_index so that preprocessor could recognize it | expand

Commit Message

Mike Rapoport Jan. 11, 2022, 2:54 p.m. UTC
From: Mike Rapoport <rppt@linux.ibm.com>

Since commit 974b9b2c68f3 ("mm: consolidate pte_index() and pte_offset_*()
definitions") pte_index is a static inline and there is no define for it
that can be recognized by the preprocessor. As the result,
vm_insert_pages() uses slower loop over vm_insert_page() instead of
insert_pages() that amortizes the cost of spinlock operations when
inserting multiple pages.

Fixes: 974b9b2c68f3 ("mm: consolidate pte_index() and pte_offset_*() definitions")
Reported-by: Christian Dietrich <stettberger@dokucode.de>
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
Cc: stable@vger.kernel.org
---
 include/linux/pgtable.h | 1 +
 1 file changed, 1 insertion(+)


base-commit: 2585cf9dfaaddf00b069673f27bb3f8530e2039c

Comments

Christian Dietrich Jan. 11, 2022, 3:20 p.m. UTC | #1
Hello Mike!

Mike Rapoport <rppt@kernel.org> [11. Januar 2022]:

> diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h
> index e24d2c992b11..d468efcf48f4 100644
> --- a/include/linux/pgtable.h
> +++ b/include/linux/pgtable.h
> @@ -62,6 +62,7 @@ static inline unsigned long pte_index(unsigned long address)
>  {
>  	return (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
>  }
> +#define pte_index pte_index

Wouldn't it make sense to remove the dead CPP blocks (#ifdef pte_index)
from mm/memory.c? Or is there a case were pte_index is not defined for
an architecture?

chris
Mike Rapoport Jan. 11, 2022, 5:10 p.m. UTC | #2
Hi Christian,

On Tue, Jan 11, 2022 at 04:20:34PM +0100, Christian Dietrich wrote:
> Hello Mike!
> 
> Mike Rapoport <rppt@kernel.org> [11. Januar 2022]:
> 
> > diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h
> > index e24d2c992b11..d468efcf48f4 100644
> > --- a/include/linux/pgtable.h
> > +++ b/include/linux/pgtable.h
> > @@ -62,6 +62,7 @@ static inline unsigned long pte_index(unsigned long address)
> >  {
> >  	return (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
> >  }
> > +#define pte_index pte_index
> 
> Wouldn't it make sense to remove the dead CPP blocks (#ifdef pte_index)
> from mm/memory.c? 

It does make sense to remove the dead code, but this cleanup does not need
stable backporting so it'll be a separate patch.

Care to send a patch? ;-)

> Or is there a case were pte_index is not defined for an architecture?

Nope, the fix in include/linux/pgtable.h covers MMU architectures and NOMMU
do not compile mm/memory.c anyway.

> chris
> --
Khalid Aziz Jan. 11, 2022, 6:44 p.m. UTC | #3
On Tue, 2022-01-11 at 16:54 +0200, Mike Rapoport wrote:
> From: Mike Rapoport <rppt@linux.ibm.com>
> 
> Since commit 974b9b2c68f3 ("mm: consolidate pte_index() and
> pte_offset_*()
> definitions") pte_index is a static inline and there is no define for
> it
> that can be recognized by the preprocessor. As the result,
> vm_insert_pages() uses slower loop over vm_insert_page() instead of
> insert_pages() that amortizes the cost of spinlock operations when
> inserting multiple pages.
> 
> Fixes: 974b9b2c68f3 ("mm: consolidate pte_index() and pte_offset_*()
> definitions")
> Reported-by: Christian Dietrich <stettberger@dokucode.de>
> Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
> Cc: stable@vger.kernel.org
> ---
>  include/linux/pgtable.h | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h
> index e24d2c992b11..d468efcf48f4 100644
> --- a/include/linux/pgtable.h
> +++ b/include/linux/pgtable.h
> @@ -62,6 +62,7 @@ static inline unsigned long pte_index(unsigned long
> address)
>  {
>         return (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
>  }
> +#define pte_index pte_index
>  
>  #ifndef pmd_index
>  static inline unsigned long pmd_index(unsigned long address)
> 
> base-commit: 2585cf9dfaaddf00b069673f27bb3f8530e2039c

This is a good fix with positive performance impact.

Reviewed-by: Khalid Aziz <khalid.aziz@oracle.com>
diff mbox series

Patch

diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h
index e24d2c992b11..d468efcf48f4 100644
--- a/include/linux/pgtable.h
+++ b/include/linux/pgtable.h
@@ -62,6 +62,7 @@  static inline unsigned long pte_index(unsigned long address)
 {
 	return (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
 }
+#define pte_index pte_index
 
 #ifndef pmd_index
 static inline unsigned long pmd_index(unsigned long address)