Commit 129dd323 authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman

powerpc/mm: enable the use of page table cache of order 0

hugepages uses a cache of order 0. Lets allow page tables
of order 0 in the common part in order to avoid open coding
in hugetlb
Signed-off-by: default avatarChristophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 32ea4c14
...@@ -25,10 +25,7 @@ ...@@ -25,10 +25,7 @@
extern void __bad_pte(pmd_t *pmd); extern void __bad_pte(pmd_t *pmd);
extern struct kmem_cache *pgtable_cache[]; extern struct kmem_cache *pgtable_cache[];
#define PGT_CACHE(shift) ({ \ #define PGT_CACHE(shift) pgtable_cache[shift]
BUG_ON(!(shift)); \
pgtable_cache[(shift) - 1]; \
})
static inline pgd_t *pgd_alloc(struct mm_struct *mm) static inline pgd_t *pgd_alloc(struct mm_struct *mm)
{ {
......
...@@ -37,10 +37,7 @@ extern struct vmemmap_backing *vmemmap_list; ...@@ -37,10 +37,7 @@ extern struct vmemmap_backing *vmemmap_list;
#define MAX_PGTABLE_INDEX_SIZE 0xf #define MAX_PGTABLE_INDEX_SIZE 0xf
extern struct kmem_cache *pgtable_cache[]; extern struct kmem_cache *pgtable_cache[];
#define PGT_CACHE(shift) ({ \ #define PGT_CACHE(shift) pgtable_cache[shift]
BUG_ON(!(shift)); \
pgtable_cache[(shift) - 1]; \
})
extern pte_t *pte_fragment_alloc(struct mm_struct *, unsigned long, int); extern pte_t *pte_fragment_alloc(struct mm_struct *, unsigned long, int);
extern pmd_t *pmd_fragment_alloc(struct mm_struct *, unsigned long); extern pmd_t *pmd_fragment_alloc(struct mm_struct *, unsigned long);
......
...@@ -25,10 +25,7 @@ ...@@ -25,10 +25,7 @@
extern void __bad_pte(pmd_t *pmd); extern void __bad_pte(pmd_t *pmd);
extern struct kmem_cache *pgtable_cache[]; extern struct kmem_cache *pgtable_cache[];
#define PGT_CACHE(shift) ({ \ #define PGT_CACHE(shift) pgtable_cache[shift]
BUG_ON(!(shift)); \
pgtable_cache[(shift) - 1]; \
})
static inline pgd_t *pgd_alloc(struct mm_struct *mm) static inline pgd_t *pgd_alloc(struct mm_struct *mm)
{ {
......
...@@ -36,10 +36,7 @@ extern struct vmemmap_backing *vmemmap_list; ...@@ -36,10 +36,7 @@ extern struct vmemmap_backing *vmemmap_list;
#define MAX_PGTABLE_INDEX_SIZE 0xf #define MAX_PGTABLE_INDEX_SIZE 0xf
extern struct kmem_cache *pgtable_cache[]; extern struct kmem_cache *pgtable_cache[];
#define PGT_CACHE(shift) ({ \ #define PGT_CACHE(shift) pgtable_cache[shift]
BUG_ON(!(shift)); \
pgtable_cache[(shift) - 1]; \
})
static inline pgd_t *pgd_alloc(struct mm_struct *mm) static inline pgd_t *pgd_alloc(struct mm_struct *mm)
{ {
......
...@@ -40,7 +40,7 @@ static void pmd_ctor(void *addr) ...@@ -40,7 +40,7 @@ static void pmd_ctor(void *addr)
memset(addr, 0, PMD_TABLE_SIZE); memset(addr, 0, PMD_TABLE_SIZE);
} }
struct kmem_cache *pgtable_cache[MAX_PGTABLE_INDEX_SIZE]; struct kmem_cache *pgtable_cache[MAX_PGTABLE_INDEX_SIZE + 1];
EXPORT_SYMBOL_GPL(pgtable_cache); /* used by kvm_hv module */ EXPORT_SYMBOL_GPL(pgtable_cache); /* used by kvm_hv module */
/* /*
...@@ -71,7 +71,7 @@ void pgtable_cache_add(unsigned shift, void (*ctor)(void *)) ...@@ -71,7 +71,7 @@ void pgtable_cache_add(unsigned shift, void (*ctor)(void *))
* moment, gcc doesn't seem to recognize is_power_of_2 as a * moment, gcc doesn't seem to recognize is_power_of_2 as a
* constant expression, so so much for that. */ * constant expression, so so much for that. */
BUG_ON(!is_power_of_2(minalign)); BUG_ON(!is_power_of_2(minalign));
BUG_ON((shift < 1) || (shift > MAX_PGTABLE_INDEX_SIZE)); BUG_ON(shift > MAX_PGTABLE_INDEX_SIZE);
if (PGT_CACHE(shift)) if (PGT_CACHE(shift))
return; /* Already have a cache of this size */ return; /* Already have a cache of this size */
...@@ -83,7 +83,7 @@ void pgtable_cache_add(unsigned shift, void (*ctor)(void *)) ...@@ -83,7 +83,7 @@ void pgtable_cache_add(unsigned shift, void (*ctor)(void *))
panic("Could not allocate pgtable cache for order %d", shift); panic("Could not allocate pgtable cache for order %d", shift);
kfree(name); kfree(name);
pgtable_cache[shift - 1] = new; pgtable_cache[shift] = new;
pr_debug("Allocated pgtable cache for order %d\n", shift); pr_debug("Allocated pgtable cache for order %d\n", shift);
} }
......
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