path: root/arch/sparc/mm
diff options
authorDavid S. Miller <>2014-09-27 21:30:57 -0700
committerDavid S. Miller <>2014-10-05 16:53:40 -0700
commitd195b71bad4347d2df51072a537f922546a904f1 (patch)
tree362c818469223f5ff4eb7476b485f6b55afb4cce /arch/sparc/mm
parentee6a9333fa58e11577c1b531b8e0f5ffc0fd6f50 (diff)
sparc64: Kill unnecessary tables and increase MAX_BANKS.
swapper_low_pmd_dir and swapper_pud_dir are actually completely useless and unnecessary. We just need swapper_pg_dir[]. Naturally the other page table chunks will be allocated on an as-needed basis. Since the kernel actually accesses these tables in the PAGE_OFFSET view, there is not even a TLB locality advantage of placing them in the kernel image. Use the hard coded vmlinux.ld.S slot for swapper_pg_dir which is naturally page aligned. Increase MAX_BANKS to 1024 in order to handle heavily fragmented virtual guests. Even with this MAX_BANKS increase, the kernel is 20K+ smaller. Signed-off-by: David S. Miller <> Acked-by: Bob Picco <>
Diffstat (limited to 'arch/sparc/mm')
1 files changed, 2 insertions, 23 deletions
diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
index 0ead74b2b9e3..2d91c62f7f5f 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
@@ -87,7 +87,7 @@ extern struct tsb swapper_tsb[KERNEL_TSB_NENTRIES];
static unsigned long cpu_pgsz_mask;
-#define MAX_BANKS 32
+#define MAX_BANKS 1024
static struct linux_prom64_registers pavail[MAX_BANKS];
static int pavail_ents;
@@ -1943,12 +1943,6 @@ static void __init sun4v_linear_pte_xor_finalize(void)
static unsigned long last_valid_pfn;
-/* These must be page aligned in order to not trigger the
- * alignment tests of pgd_bad() and pud_bad().
- */
-pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((aligned (PAGE_SIZE)));
-static pud_t swapper_pud_dir[PTRS_PER_PUD] __attribute__ ((aligned (PAGE_SIZE)));
static void sun4u_pgprot_init(void);
static void sun4v_pgprot_init(void);
@@ -2002,8 +1996,6 @@ void __init paging_init(void)
unsigned long end_pfn, shift, phys_base;
unsigned long real_end, i;
- pud_t *pud;
- pmd_t *pmd;
int node;
@@ -2099,20 +2091,7 @@ void __init paging_init(void)
init_mm.pgd += ((shift) / (sizeof(pgd_t)));
- memset(swapper_low_pmd_dir, 0, sizeof(swapper_low_pmd_dir));
- /* The kernel page tables we publish into what the rest of the
- * world sees must be adjusted so that they see the PAGE_OFFSET
- * address of these in-kerenel data structures. However right
- * here we must access them from the kernel image side, because
- * the trap tables haven't been taken over and therefore we cannot
- * take TLB misses in the PAGE_OFFSET linear mappings yet.
- */
- pud = swapper_pud_dir + (shift / sizeof(pud_t));
- pgd_set(&swapper_pg_dir[0], pud);
- pmd = swapper_low_pmd_dir + (shift / sizeof(pmd_t));
- pud_set(&swapper_pud_dir[0], pmd);
+ memset(swapper_pg_dir, 0, sizeof(swapper_pg_dir));