Re: [PATCH 0/7] 5-level paging: prepare generic code

2017-03-08 Thread Michal Hocko
On Wed 08-03-17 18:07:42, Kirill A. Shutemov wrote:
> On Wed, Mar 08, 2017 at 03:25:01PM +0100, Michal Hocko wrote:
> > Btw. my build test machinery has reported this:
> > microblaze/allnoconfig
> 
> Thanks.
> 
> Fixup is below. I guess it should be folded into 4/7.

yes, this has passed the testing

> 
> diff --git a/arch/microblaze/include/asm/page.h 
> b/arch/microblaze/include/asm/page.h
> index fd850879854d..d506bb0893f9 100644
> --- a/arch/microblaze/include/asm/page.h
> +++ b/arch/microblaze/include/asm/page.h
> @@ -95,7 +95,8 @@ typedef struct { unsigned long pgd; } pgd_t;
>  #   else /* CONFIG_MMU */
>  typedef struct { unsigned long   ste[64]; }  pmd_t;
>  typedef struct { pmd_t   pue[1]; }   pud_t;
> -typedef struct { pud_t   pge[1]; }   pgd_t;
> +typedef struct { pud_t   p4e[1]; }   p4d_t;
> +typedef struct { p4d_t   pge[1]; }   pgd_t;
>  #   endif /* CONFIG_MMU */
>  
>  # define pte_val(x)  ((x).pte)
> -- 
>  Kirill A. Shutemov

-- 
Michal Hocko
SUSE Labs


Re: [PATCH 0/7] 5-level paging: prepare generic code

2017-03-08 Thread Michal Hocko
On Wed 08-03-17 18:07:42, Kirill A. Shutemov wrote:
> On Wed, Mar 08, 2017 at 03:25:01PM +0100, Michal Hocko wrote:
> > Btw. my build test machinery has reported this:
> > microblaze/allnoconfig
> 
> Thanks.
> 
> Fixup is below. I guess it should be folded into 4/7.

yes, this has passed the testing

> 
> diff --git a/arch/microblaze/include/asm/page.h 
> b/arch/microblaze/include/asm/page.h
> index fd850879854d..d506bb0893f9 100644
> --- a/arch/microblaze/include/asm/page.h
> +++ b/arch/microblaze/include/asm/page.h
> @@ -95,7 +95,8 @@ typedef struct { unsigned long pgd; } pgd_t;
>  #   else /* CONFIG_MMU */
>  typedef struct { unsigned long   ste[64]; }  pmd_t;
>  typedef struct { pmd_t   pue[1]; }   pud_t;
> -typedef struct { pud_t   pge[1]; }   pgd_t;
> +typedef struct { pud_t   p4e[1]; }   p4d_t;
> +typedef struct { p4d_t   pge[1]; }   pgd_t;
>  #   endif /* CONFIG_MMU */
>  
>  # define pte_val(x)  ((x).pte)
> -- 
>  Kirill A. Shutemov

-- 
Michal Hocko
SUSE Labs


Re: [PATCH 0/7] 5-level paging: prepare generic code

2017-03-08 Thread Kirill A. Shutemov
On Wed, Mar 08, 2017 at 03:25:01PM +0100, Michal Hocko wrote:
> Btw. my build test machinery has reported this:
> microblaze/allnoconfig

Thanks.

Fixup is below. I guess it should be folded into 4/7.

diff --git a/arch/microblaze/include/asm/page.h 
b/arch/microblaze/include/asm/page.h
index fd850879854d..d506bb0893f9 100644
--- a/arch/microblaze/include/asm/page.h
+++ b/arch/microblaze/include/asm/page.h
@@ -95,7 +95,8 @@ typedef struct { unsigned long pgd; } pgd_t;
 #   else /* CONFIG_MMU */
 typedef struct { unsigned long ste[64]; }  pmd_t;
 typedef struct { pmd_t pue[1]; }   pud_t;
-typedef struct { pud_t pge[1]; }   pgd_t;
+typedef struct { pud_t p4e[1]; }   p4d_t;
+typedef struct { p4d_t pge[1]; }   pgd_t;
 #   endif /* CONFIG_MMU */
 
 # define pte_val(x)((x).pte)
-- 
 Kirill A. Shutemov


Re: [PATCH 0/7] 5-level paging: prepare generic code

2017-03-08 Thread Kirill A. Shutemov
On Wed, Mar 08, 2017 at 03:25:01PM +0100, Michal Hocko wrote:
> Btw. my build test machinery has reported this:
> microblaze/allnoconfig

Thanks.

Fixup is below. I guess it should be folded into 4/7.

diff --git a/arch/microblaze/include/asm/page.h 
b/arch/microblaze/include/asm/page.h
index fd850879854d..d506bb0893f9 100644
--- a/arch/microblaze/include/asm/page.h
+++ b/arch/microblaze/include/asm/page.h
@@ -95,7 +95,8 @@ typedef struct { unsigned long pgd; } pgd_t;
 #   else /* CONFIG_MMU */
 typedef struct { unsigned long ste[64]; }  pmd_t;
 typedef struct { pmd_t pue[1]; }   pud_t;
-typedef struct { pud_t pge[1]; }   pgd_t;
+typedef struct { pud_t p4e[1]; }   p4d_t;
+typedef struct { p4d_t pge[1]; }   pgd_t;
 #   endif /* CONFIG_MMU */
 
 # define pte_val(x)((x).pte)
-- 
 Kirill A. Shutemov


Re: [PATCH 0/7] 5-level paging: prepare generic code

2017-03-08 Thread Michal Hocko
Btw. my build test machinery has reported this:
microblaze/allnoconfig
In file included from ./arch/microblaze/include/asm/pgtable.h:550:0,
 from ./include/linux/mm.h:68,
 from ./arch/microblaze/include/asm/io.h:17,
 from ./include/linux/io.h:25,
 from ./include/linux/irq.h:24,
 from ./include/asm-generic/hardirq.h:12,
 from ./arch/microblaze/include/asm/hardirq.h:1,
 from ./include/linux/hardirq.h:8,
 from ./include/linux/interrupt.h:12,
 from ./include/linux/kernel_stat.h:8,
 from arch/microblaze/kernel/asm-offsets.c:14:
./include/asm-generic/pgtable.h:886:32: error: unknown type name 'p4d_t'
 static inline int p4d_set_huge(p4d_t *p4d, phys_addr_t addr, pgprot_t prot)
^
./include/asm-generic/pgtable.h:898:34: error: unknown type name 'p4d_t'
 static inline int p4d_clear_huge(p4d_t *p4d)
  ^
In file included from ./arch/microblaze/include/asm/io.h:17:0,
 from ./include/linux/io.h:25,
 from ./include/linux/irq.h:24,
 from ./include/asm-generic/hardirq.h:12,
 from ./arch/microblaze/include/asm/hardirq.h:1,
 from ./include/linux/hardirq.h:8,
 from ./include/linux/interrupt.h:12,
 from ./include/linux/kernel_stat.h:8,
 from arch/microblaze/kernel/asm-offsets.c:14:
./include/linux/mm.h:1580:39: error: unknown type name 'p4d_t'
 int __pud_alloc(struct mm_struct *mm, p4d_t *p4d, unsigned long address);
   ^
In file included from ./arch/microblaze/include/asm/io.h:17:0,
 from ./include/linux/io.h:25,
 from ./include/linux/irq.h:24,
 from ./include/asm-generic/hardirq.h:12,
 from ./arch/microblaze/include/asm/hardirq.h:1,
 from ./include/linux/hardirq.h:8,
 from ./include/linux/interrupt.h:12,
 from ./include/linux/kernel_stat.h:8,
 from arch/microblaze/kernel/asm-offsets.c:14:
./include/linux/mm.h:2409:1: error: unknown type name 'p4d_t'
 p4d_t *vmemmap_p4d_populate(pgd_t *pgd, unsigned long addr, int node);
 ^
./include/linux/mm.h:2410:29: error: unknown type name 'p4d_t'
 pud_t *vmemmap_pud_populate(p4d_t *p4d, unsigned long addr, int node);
 ^
make[1]: *** [arch/microblaze/kernel/asm-offsets.s] Error 1
make: *** [prepare0] Error 2
-- 
Michal Hocko
SUSE Labs


Re: [PATCH 0/7] 5-level paging: prepare generic code

2017-03-08 Thread Michal Hocko
Btw. my build test machinery has reported this:
microblaze/allnoconfig
In file included from ./arch/microblaze/include/asm/pgtable.h:550:0,
 from ./include/linux/mm.h:68,
 from ./arch/microblaze/include/asm/io.h:17,
 from ./include/linux/io.h:25,
 from ./include/linux/irq.h:24,
 from ./include/asm-generic/hardirq.h:12,
 from ./arch/microblaze/include/asm/hardirq.h:1,
 from ./include/linux/hardirq.h:8,
 from ./include/linux/interrupt.h:12,
 from ./include/linux/kernel_stat.h:8,
 from arch/microblaze/kernel/asm-offsets.c:14:
./include/asm-generic/pgtable.h:886:32: error: unknown type name 'p4d_t'
 static inline int p4d_set_huge(p4d_t *p4d, phys_addr_t addr, pgprot_t prot)
^
./include/asm-generic/pgtable.h:898:34: error: unknown type name 'p4d_t'
 static inline int p4d_clear_huge(p4d_t *p4d)
  ^
In file included from ./arch/microblaze/include/asm/io.h:17:0,
 from ./include/linux/io.h:25,
 from ./include/linux/irq.h:24,
 from ./include/asm-generic/hardirq.h:12,
 from ./arch/microblaze/include/asm/hardirq.h:1,
 from ./include/linux/hardirq.h:8,
 from ./include/linux/interrupt.h:12,
 from ./include/linux/kernel_stat.h:8,
 from arch/microblaze/kernel/asm-offsets.c:14:
./include/linux/mm.h:1580:39: error: unknown type name 'p4d_t'
 int __pud_alloc(struct mm_struct *mm, p4d_t *p4d, unsigned long address);
   ^
In file included from ./arch/microblaze/include/asm/io.h:17:0,
 from ./include/linux/io.h:25,
 from ./include/linux/irq.h:24,
 from ./include/asm-generic/hardirq.h:12,
 from ./arch/microblaze/include/asm/hardirq.h:1,
 from ./include/linux/hardirq.h:8,
 from ./include/linux/interrupt.h:12,
 from ./include/linux/kernel_stat.h:8,
 from arch/microblaze/kernel/asm-offsets.c:14:
./include/linux/mm.h:2409:1: error: unknown type name 'p4d_t'
 p4d_t *vmemmap_p4d_populate(pgd_t *pgd, unsigned long addr, int node);
 ^
./include/linux/mm.h:2410:29: error: unknown type name 'p4d_t'
 pud_t *vmemmap_pud_populate(p4d_t *p4d, unsigned long addr, int node);
 ^
make[1]: *** [arch/microblaze/kernel/asm-offsets.s] Error 1
make: *** [prepare0] Error 2
-- 
Michal Hocko
SUSE Labs


[PATCH 0/7] 5-level paging: prepare generic code

2017-03-06 Thread Kirill A. Shutemov
As per Linus' suggestion, I'm splitting generic part of 5-level paging
enabling into separate patchset.

I believe it's relatively low-risk and can be applied to v4.11.
Merging it now would make x86 5-level paging enabling in v4.12 easier.


The first patch is actually x86-specific: detect 5-level paging support.
It boils down to single define.

The rest of patchset converts Linux MMU abstraction from 4- to 5-level
paging.

Enabling of new abstraction in most cases requires adding single line of
code in arch-specific code. The rest is taken care by asm-generic/.

Changes to mm/ code are mostly mechanical: add support for new page table
level -- p4d_t -- where we deal with pud_t now.

Kirill A. Shutemov (7):
  x86/cpufeature: Add 5-level paging detection
  asm-generic: introduce 5level-fixup.h
  asm-generic: introduce __ARCH_USE_5LEVEL_HACK
  arch, mm: convert all architectures to use 5level-fixup.h
  asm-generic: introduce 
  mm: convert generic code to 5-level paging
  mm: introduce __p4d_alloc()

 arch/arc/include/asm/hugepage.h  |   1 +
 arch/arc/include/asm/pgtable.h   |   1 +
 arch/arm/include/asm/pgtable.h   |   1 +
 arch/arm64/include/asm/pgtable-types.h   |   4 +
 arch/avr32/include/asm/pgtable-2level.h  |   1 +
 arch/cris/include/asm/pgtable.h  |   1 +
 arch/frv/include/asm/pgtable.h   |   1 +
 arch/h8300/include/asm/pgtable.h |   1 +
 arch/hexagon/include/asm/pgtable.h   |   1 +
 arch/ia64/include/asm/pgtable.h  |   2 +
 arch/metag/include/asm/pgtable.h |   1 +
 arch/mips/include/asm/pgtable-32.h   |   1 +
 arch/mips/include/asm/pgtable-64.h   |   1 +
 arch/mn10300/include/asm/page.h  |   1 +
 arch/nios2/include/asm/pgtable.h |   1 +
 arch/openrisc/include/asm/pgtable.h  |   1 +
 arch/powerpc/include/asm/book3s/32/pgtable.h |   1 +
 arch/powerpc/include/asm/book3s/64/pgtable.h |   3 +
 arch/powerpc/include/asm/nohash/32/pgtable.h |   1 +
 arch/powerpc/include/asm/nohash/64/pgtable-4k.h  |   3 +
 arch/powerpc/include/asm/nohash/64/pgtable-64k.h |   1 +
 arch/s390/include/asm/pgtable.h  |   1 +
 arch/score/include/asm/pgtable.h |   1 +
 arch/sh/include/asm/pgtable-2level.h |   1 +
 arch/sh/include/asm/pgtable-3level.h |   1 +
 arch/sparc/include/asm/pgtable_64.h  |   1 +
 arch/tile/include/asm/pgtable_32.h   |   1 +
 arch/tile/include/asm/pgtable_64.h   |   1 +
 arch/um/include/asm/pgtable-2level.h |   1 +
 arch/um/include/asm/pgtable-3level.h |   1 +
 arch/unicore32/include/asm/pgtable.h |   1 +
 arch/x86/include/asm/cpufeatures.h   |   3 +-
 arch/x86/include/asm/pgtable_types.h |   4 +
 arch/xtensa/include/asm/pgtable.h|   1 +
 drivers/misc/sgi-gru/grufault.c  |   9 +-
 fs/userfaultfd.c |   6 +-
 include/asm-generic/4level-fixup.h   |   3 +-
 include/asm-generic/5level-fixup.h   |  41 
 include/asm-generic/pgtable-nop4d-hack.h |  62 ++
 include/asm-generic/pgtable-nop4d.h  |  56 ++
 include/asm-generic/pgtable-nopud.h  |  48 ++---
 include/asm-generic/pgtable.h|  48 -
 include/asm-generic/tlb.h|  14 +-
 include/linux/hugetlb.h  |   5 +-
 include/linux/kasan.h|   1 +
 include/linux/mm.h   |  34 +++-
 lib/ioremap.c|  39 +++-
 mm/gup.c |  46 -
 mm/huge_memory.c |   7 +-
 mm/hugetlb.c |  29 +--
 mm/kasan/kasan_init.c|  35 +++-
 mm/memory.c  | 230 +++
 mm/mlock.c   |   1 +
 mm/mprotect.c|  26 ++-
 mm/mremap.c  |  13 +-
 mm/page_vma_mapped.c |   6 +-
 mm/pagewalk.c|  32 +++-
 mm/pgtable-generic.c |   6 +
 mm/rmap.c|   7 +-
 mm/sparse-vmemmap.c  |  22 ++-
 mm/swapfile.c|  26 ++-
 mm/userfaultfd.c |  23 ++-
 mm/vmalloc.c |  81 +---
 63 files changed, 857 insertions(+), 146 deletions(-)
 create mode 100644 include/asm-generic/5level-fixup.h
 create mode 100644 include/asm-generic/pgtable-nop4d-hack.h
 create mode 100644 include/asm-generic/pgtable-nop4d.h

-- 
2.11.0



[PATCH 0/7] 5-level paging: prepare generic code

2017-03-06 Thread Kirill A. Shutemov
As per Linus' suggestion, I'm splitting generic part of 5-level paging
enabling into separate patchset.

I believe it's relatively low-risk and can be applied to v4.11.
Merging it now would make x86 5-level paging enabling in v4.12 easier.


The first patch is actually x86-specific: detect 5-level paging support.
It boils down to single define.

The rest of patchset converts Linux MMU abstraction from 4- to 5-level
paging.

Enabling of new abstraction in most cases requires adding single line of
code in arch-specific code. The rest is taken care by asm-generic/.

Changes to mm/ code are mostly mechanical: add support for new page table
level -- p4d_t -- where we deal with pud_t now.

Kirill A. Shutemov (7):
  x86/cpufeature: Add 5-level paging detection
  asm-generic: introduce 5level-fixup.h
  asm-generic: introduce __ARCH_USE_5LEVEL_HACK
  arch, mm: convert all architectures to use 5level-fixup.h
  asm-generic: introduce 
  mm: convert generic code to 5-level paging
  mm: introduce __p4d_alloc()

 arch/arc/include/asm/hugepage.h  |   1 +
 arch/arc/include/asm/pgtable.h   |   1 +
 arch/arm/include/asm/pgtable.h   |   1 +
 arch/arm64/include/asm/pgtable-types.h   |   4 +
 arch/avr32/include/asm/pgtable-2level.h  |   1 +
 arch/cris/include/asm/pgtable.h  |   1 +
 arch/frv/include/asm/pgtable.h   |   1 +
 arch/h8300/include/asm/pgtable.h |   1 +
 arch/hexagon/include/asm/pgtable.h   |   1 +
 arch/ia64/include/asm/pgtable.h  |   2 +
 arch/metag/include/asm/pgtable.h |   1 +
 arch/mips/include/asm/pgtable-32.h   |   1 +
 arch/mips/include/asm/pgtable-64.h   |   1 +
 arch/mn10300/include/asm/page.h  |   1 +
 arch/nios2/include/asm/pgtable.h |   1 +
 arch/openrisc/include/asm/pgtable.h  |   1 +
 arch/powerpc/include/asm/book3s/32/pgtable.h |   1 +
 arch/powerpc/include/asm/book3s/64/pgtable.h |   3 +
 arch/powerpc/include/asm/nohash/32/pgtable.h |   1 +
 arch/powerpc/include/asm/nohash/64/pgtable-4k.h  |   3 +
 arch/powerpc/include/asm/nohash/64/pgtable-64k.h |   1 +
 arch/s390/include/asm/pgtable.h  |   1 +
 arch/score/include/asm/pgtable.h |   1 +
 arch/sh/include/asm/pgtable-2level.h |   1 +
 arch/sh/include/asm/pgtable-3level.h |   1 +
 arch/sparc/include/asm/pgtable_64.h  |   1 +
 arch/tile/include/asm/pgtable_32.h   |   1 +
 arch/tile/include/asm/pgtable_64.h   |   1 +
 arch/um/include/asm/pgtable-2level.h |   1 +
 arch/um/include/asm/pgtable-3level.h |   1 +
 arch/unicore32/include/asm/pgtable.h |   1 +
 arch/x86/include/asm/cpufeatures.h   |   3 +-
 arch/x86/include/asm/pgtable_types.h |   4 +
 arch/xtensa/include/asm/pgtable.h|   1 +
 drivers/misc/sgi-gru/grufault.c  |   9 +-
 fs/userfaultfd.c |   6 +-
 include/asm-generic/4level-fixup.h   |   3 +-
 include/asm-generic/5level-fixup.h   |  41 
 include/asm-generic/pgtable-nop4d-hack.h |  62 ++
 include/asm-generic/pgtable-nop4d.h  |  56 ++
 include/asm-generic/pgtable-nopud.h  |  48 ++---
 include/asm-generic/pgtable.h|  48 -
 include/asm-generic/tlb.h|  14 +-
 include/linux/hugetlb.h  |   5 +-
 include/linux/kasan.h|   1 +
 include/linux/mm.h   |  34 +++-
 lib/ioremap.c|  39 +++-
 mm/gup.c |  46 -
 mm/huge_memory.c |   7 +-
 mm/hugetlb.c |  29 +--
 mm/kasan/kasan_init.c|  35 +++-
 mm/memory.c  | 230 +++
 mm/mlock.c   |   1 +
 mm/mprotect.c|  26 ++-
 mm/mremap.c  |  13 +-
 mm/page_vma_mapped.c |   6 +-
 mm/pagewalk.c|  32 +++-
 mm/pgtable-generic.c |   6 +
 mm/rmap.c|   7 +-
 mm/sparse-vmemmap.c  |  22 ++-
 mm/swapfile.c|  26 ++-
 mm/userfaultfd.c |  23 ++-
 mm/vmalloc.c |  81 +---
 63 files changed, 857 insertions(+), 146 deletions(-)
 create mode 100644 include/asm-generic/5level-fixup.h
 create mode 100644 include/asm-generic/pgtable-nop4d-hack.h
 create mode 100644 include/asm-generic/pgtable-nop4d.h

-- 
2.11.0