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: Christophe Leroy <christophe.leroy@c-s.fr> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
32ea4c1499
commit
129dd323dd
|
@ -25,10 +25,7 @@
|
|||
extern void __bad_pte(pmd_t *pmd);
|
||||
|
||||
extern struct kmem_cache *pgtable_cache[];
|
||||
#define PGT_CACHE(shift) ({ \
|
||||
BUG_ON(!(shift)); \
|
||||
pgtable_cache[(shift) - 1]; \
|
||||
})
|
||||
#define PGT_CACHE(shift) pgtable_cache[shift]
|
||||
|
||||
static inline pgd_t *pgd_alloc(struct mm_struct *mm)
|
||||
{
|
||||
|
|
|
@ -37,10 +37,7 @@ extern struct vmemmap_backing *vmemmap_list;
|
|||
#define MAX_PGTABLE_INDEX_SIZE 0xf
|
||||
|
||||
extern struct kmem_cache *pgtable_cache[];
|
||||
#define PGT_CACHE(shift) ({ \
|
||||
BUG_ON(!(shift)); \
|
||||
pgtable_cache[(shift) - 1]; \
|
||||
})
|
||||
#define PGT_CACHE(shift) pgtable_cache[shift]
|
||||
|
||||
extern pte_t *pte_fragment_alloc(struct mm_struct *, unsigned long, int);
|
||||
extern pmd_t *pmd_fragment_alloc(struct mm_struct *, unsigned long);
|
||||
|
|
|
@ -25,10 +25,7 @@
|
|||
extern void __bad_pte(pmd_t *pmd);
|
||||
|
||||
extern struct kmem_cache *pgtable_cache[];
|
||||
#define PGT_CACHE(shift) ({ \
|
||||
BUG_ON(!(shift)); \
|
||||
pgtable_cache[(shift) - 1]; \
|
||||
})
|
||||
#define PGT_CACHE(shift) pgtable_cache[shift]
|
||||
|
||||
static inline pgd_t *pgd_alloc(struct mm_struct *mm)
|
||||
{
|
||||
|
|
|
@ -36,10 +36,7 @@ extern struct vmemmap_backing *vmemmap_list;
|
|||
#define MAX_PGTABLE_INDEX_SIZE 0xf
|
||||
|
||||
extern struct kmem_cache *pgtable_cache[];
|
||||
#define PGT_CACHE(shift) ({ \
|
||||
BUG_ON(!(shift)); \
|
||||
pgtable_cache[(shift) - 1]; \
|
||||
})
|
||||
#define PGT_CACHE(shift) pgtable_cache[shift]
|
||||
|
||||
static inline pgd_t *pgd_alloc(struct mm_struct *mm)
|
||||
{
|
||||
|
|
|
@ -40,7 +40,7 @@ static void pmd_ctor(void *addr)
|
|||
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 */
|
||||
|
||||
/*
|
||||
|
@ -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
|
||||
* constant expression, so so much for that. */
|
||||
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))
|
||||
return; /* Already have a cache of this size */
|
||||
|
@ -83,7 +83,7 @@ void pgtable_cache_add(unsigned shift, void (*ctor)(void *))
|
|||
panic("Could not allocate pgtable cache for order %d", shift);
|
||||
|
||||
kfree(name);
|
||||
pgtable_cache[shift - 1] = new;
|
||||
pgtable_cache[shift] = new;
|
||||
|
||||
pr_debug("Allocated pgtable cache for order %d\n", shift);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue