Commit c07af4f1 authored by Kirill A. Shutemov's avatar Kirill A. Shutemov Committed by Linus Torvalds

mm: add missing __PAGETABLE_{PUD,PMD}_FOLDED defines

Core mm expects __PAGETABLE_{PUD,PMD}_FOLDED to be defined if these page
table levels folded.  Usually, these defines are provided by
<asm-generic/pgtable-nopmd.h> and <asm-generic/pgtable-nopud.h>.

But some architectures fold page table levels in a custom way.  They
need to define these macros themself.  This patch adds missing defines.

The patch fixes mm->nr_pmds underflow and eliminates dead __pmd_alloc()
and __pud_alloc() on architectures without these page table levels.
Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Aaro Koskinen <aaro.koskinen@iki.fi>
Cc: David Howells <dhowells@redhat.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Helge Deller <deller@gmx.de>
Cc: "James E.J. Bottomley" <jejb@parisc-linux.org>
Cc: Koichi Yasutake <yasutake.koichi@jp.panasonic.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent cc873177
...@@ -123,12 +123,14 @@ extern unsigned long empty_zero_page; ...@@ -123,12 +123,14 @@ extern unsigned long empty_zero_page;
#define PGDIR_MASK (~(PGDIR_SIZE - 1)) #define PGDIR_MASK (~(PGDIR_SIZE - 1))
#define PTRS_PER_PGD 64 #define PTRS_PER_PGD 64
#define __PAGETABLE_PUD_FOLDED
#define PUD_SHIFT 26 #define PUD_SHIFT 26
#define PTRS_PER_PUD 1 #define PTRS_PER_PUD 1
#define PUD_SIZE (1UL << PUD_SHIFT) #define PUD_SIZE (1UL << PUD_SHIFT)
#define PUD_MASK (~(PUD_SIZE - 1)) #define PUD_MASK (~(PUD_SIZE - 1))
#define PUE_SIZE 256 #define PUE_SIZE 256
#define __PAGETABLE_PMD_FOLDED
#define PMD_SHIFT 26 #define PMD_SHIFT 26
#define PMD_SIZE (1UL << PMD_SHIFT) #define PMD_SIZE (1UL << PMD_SHIFT)
#define PMD_MASK (~(PMD_SIZE - 1)) #define PMD_MASK (~(PMD_SIZE - 1))
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
* the M32R is two-level, so we don't really have any * the M32R is two-level, so we don't really have any
* PMD directory physically. * PMD directory physically.
*/ */
#define __PAGETABLE_PMD_FOLDED
#define PMD_SHIFT 22 #define PMD_SHIFT 22
#define PTRS_PER_PMD 1 #define PTRS_PER_PMD 1
......
...@@ -54,10 +54,12 @@ ...@@ -54,10 +54,12 @@
*/ */
#ifdef CONFIG_SUN3 #ifdef CONFIG_SUN3
#define PTRS_PER_PTE 16 #define PTRS_PER_PTE 16
#define __PAGETABLE_PMD_FOLDED
#define PTRS_PER_PMD 1 #define PTRS_PER_PMD 1
#define PTRS_PER_PGD 2048 #define PTRS_PER_PGD 2048
#elif defined(CONFIG_COLDFIRE) #elif defined(CONFIG_COLDFIRE)
#define PTRS_PER_PTE 512 #define PTRS_PER_PTE 512
#define __PAGETABLE_PMD_FOLDED
#define PTRS_PER_PMD 1 #define PTRS_PER_PMD 1
#define PTRS_PER_PGD 1024 #define PTRS_PER_PGD 1024
#else #else
......
...@@ -56,7 +56,9 @@ extern void paging_init(void); ...@@ -56,7 +56,9 @@ extern void paging_init(void);
#define PGDIR_SHIFT 22 #define PGDIR_SHIFT 22
#define PTRS_PER_PGD 1024 #define PTRS_PER_PGD 1024
#define PTRS_PER_PUD 1 /* we don't really have any PUD physically */ #define PTRS_PER_PUD 1 /* we don't really have any PUD physically */
#define __PAGETABLE_PUD_FOLDED
#define PTRS_PER_PMD 1 /* we don't really have any PMD physically */ #define PTRS_PER_PMD 1 /* we don't really have any PMD physically */
#define __PAGETABLE_PMD_FOLDED
#define PTRS_PER_PTE 1024 #define PTRS_PER_PTE 1024
#define PGD_SIZE PAGE_SIZE #define PGD_SIZE PAGE_SIZE
......
...@@ -96,6 +96,7 @@ extern void purge_tlb_entries(struct mm_struct *, unsigned long); ...@@ -96,6 +96,7 @@ extern void purge_tlb_entries(struct mm_struct *, unsigned long);
#if PT_NLEVELS == 3 #if PT_NLEVELS == 3
#define BITS_PER_PMD (PAGE_SHIFT + PMD_ORDER - BITS_PER_PMD_ENTRY) #define BITS_PER_PMD (PAGE_SHIFT + PMD_ORDER - BITS_PER_PMD_ENTRY)
#else #else
#define __PAGETABLE_PMD_FOLDED
#define BITS_PER_PMD 0 #define BITS_PER_PMD 0
#endif #endif
#define PTRS_PER_PMD (1UL << BITS_PER_PMD) #define PTRS_PER_PMD (1UL << BITS_PER_PMD)
......
...@@ -91,7 +91,9 @@ extern unsigned long zero_page_mask; ...@@ -91,7 +91,9 @@ extern unsigned long zero_page_mask;
*/ */
#define PTRS_PER_PTE 256 #define PTRS_PER_PTE 256
#ifndef CONFIG_64BIT #ifndef CONFIG_64BIT
#define __PAGETABLE_PUD_FOLDED
#define PTRS_PER_PMD 1 #define PTRS_PER_PMD 1
#define __PAGETABLE_PMD_FOLDED
#define PTRS_PER_PUD 1 #define PTRS_PER_PUD 1
#else /* CONFIG_64BIT */ #else /* CONFIG_64BIT */
#define PTRS_PER_PMD 2048 #define PTRS_PER_PMD 2048
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment