mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 05:48:40 +00:00
[PATCH] powerpc: 64k pages pmd alloc fix
This patch makes the kernel use a different kmem cache for PMD pages as they are smaller than PTE pages. Avoids waste of memory. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
e1449ed956
commit
87655ff268
2 changed files with 16 additions and 6 deletions
|
@ -20,6 +20,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#undef DEBUG
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/signal.h>
|
||||
#include <linux/sched.h>
|
||||
|
@ -64,6 +66,12 @@
|
|||
#include <asm/vdso.h>
|
||||
#include <asm/imalloc.h>
|
||||
|
||||
#ifdef DEBUG
|
||||
#define DBG(fmt...) printk(fmt)
|
||||
#else
|
||||
#define DBG(fmt...)
|
||||
#endif
|
||||
|
||||
#if PGTABLE_RANGE > USER_VSID_RANGE
|
||||
#warning Limited user VSID range means pagetable space is wasted
|
||||
#endif
|
||||
|
@ -188,14 +196,14 @@ static void zero_ctor(void *addr, kmem_cache_t *cache, unsigned long flags)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_PPC_64K_PAGES
|
||||
static const int pgtable_cache_size[2] = {
|
||||
PTE_TABLE_SIZE, PGD_TABLE_SIZE
|
||||
static const unsigned int pgtable_cache_size[3] = {
|
||||
PTE_TABLE_SIZE, PMD_TABLE_SIZE, PGD_TABLE_SIZE
|
||||
};
|
||||
static const char *pgtable_cache_name[ARRAY_SIZE(pgtable_cache_size)] = {
|
||||
"pte_pmd_cache", "pgd_cache",
|
||||
"pte_pmd_cache", "pmd_cache", "pgd_cache",
|
||||
};
|
||||
#else
|
||||
static const int pgtable_cache_size[2] = {
|
||||
static const unsigned int pgtable_cache_size[2] = {
|
||||
PTE_TABLE_SIZE, PMD_TABLE_SIZE
|
||||
};
|
||||
static const char *pgtable_cache_name[ARRAY_SIZE(pgtable_cache_size)] = {
|
||||
|
@ -213,6 +221,8 @@ void pgtable_cache_init(void)
|
|||
int size = pgtable_cache_size[i];
|
||||
const char *name = pgtable_cache_name[i];
|
||||
|
||||
DBG("Allocating page table cache %s (#%d) "
|
||||
"for size: %08x...\n", name, i, size);
|
||||
pgtable_cache[i] = kmem_cache_create(name,
|
||||
size, size,
|
||||
SLAB_HWCACHE_ALIGN |
|
||||
|
|
|
@ -10,8 +10,8 @@ extern kmem_cache_t *pgtable_cache[];
|
|||
|
||||
#ifdef CONFIG_PPC_64K_PAGES
|
||||
#define PTE_CACHE_NUM 0
|
||||
#define PMD_CACHE_NUM 0
|
||||
#define PGD_CACHE_NUM 1
|
||||
#define PMD_CACHE_NUM 1
|
||||
#define PGD_CACHE_NUM 2
|
||||
#else
|
||||
#define PTE_CACHE_NUM 0
|
||||
#define PMD_CACHE_NUM 1
|
||||
|
|
Loading…
Reference in a new issue