[PARISC] Further work for multiple page sizes
More work towards supporing multiple page sizes on 64-bit. Convert some assumptions that 64bit uses 3 level page tables into testing PT_NLEVELS. Also some BUG() to BUG_ON() conversions and some cleanups to assembler. Signed-off-by: Helge Deller <deller@parisc-linux.org> Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
This commit is contained in:

committed by
Kyle McMartin

parent
d668da80d6
commit
2fd8303816
@@ -6,6 +6,7 @@
|
||||
* Copyright (C) 2000 Michael Ang <mang with subcarrier.org>
|
||||
* Copyright (C) 2002 Randolph Chung <tausq with parisc-linux.org>
|
||||
* Copyright (C) 2003 James Bottomley <jejb with parisc-linux.org>
|
||||
* Copyright (C) 2006 Helge Deller <deller@gmx.de>
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@@ -27,6 +28,7 @@
|
||||
/* needed for the processor specific cache alignment size */
|
||||
#include <asm/cache.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
|
||||
/* ld script to make hppa Linux kernel */
|
||||
#ifndef CONFIG_64BIT
|
||||
@@ -68,7 +70,7 @@ SECTIONS
|
||||
RODATA
|
||||
|
||||
/* writeable */
|
||||
. = ALIGN(4096); /* Make sure this is page aligned so
|
||||
. = ALIGN(ASM_PAGE_SIZE); /* Make sure this is page aligned so
|
||||
that we can properly leave these
|
||||
as writable */
|
||||
data_start = .;
|
||||
@@ -81,23 +83,17 @@ SECTIONS
|
||||
__start___unwind = .; /* unwind info */
|
||||
.PARISC.unwind : { *(.PARISC.unwind) }
|
||||
__stop___unwind = .;
|
||||
|
||||
|
||||
/* rarely changed data like cpu maps */
|
||||
. = ALIGN(16);
|
||||
.data.read_mostly : { *(.data.read_mostly) }
|
||||
|
||||
. = ALIGN(L1_CACHE_BYTES);
|
||||
.data : { /* Data */
|
||||
*(.data)
|
||||
*(.data.vm0.pmd)
|
||||
*(.data.vm0.pgd)
|
||||
*(.data.vm0.pte)
|
||||
CONSTRUCTORS
|
||||
}
|
||||
|
||||
. = ALIGN(4096);
|
||||
/* nosave data is really only used for software suspend...it's here
|
||||
* just in case we ever implement it */
|
||||
__nosave_begin = .;
|
||||
.data_nosave : { *(.data.nosave) }
|
||||
. = ALIGN(4096);
|
||||
__nosave_end = .;
|
||||
|
||||
. = ALIGN(L1_CACHE_BYTES);
|
||||
.data.cacheline_aligned : { *(.data.cacheline_aligned) }
|
||||
|
||||
@@ -105,12 +101,29 @@ SECTIONS
|
||||
. = ALIGN(16);
|
||||
.data.lock_aligned : { *(.data.lock_aligned) }
|
||||
|
||||
/* rarely changed data like cpu maps */
|
||||
. = ALIGN(16);
|
||||
.data.read_mostly : { *(.data.read_mostly) }
|
||||
. = ALIGN(ASM_PAGE_SIZE);
|
||||
/* nosave data is really only used for software suspend...it's here
|
||||
* just in case we ever implement it */
|
||||
__nosave_begin = .;
|
||||
.data_nosave : { *(.data.nosave) }
|
||||
. = ALIGN(ASM_PAGE_SIZE);
|
||||
__nosave_end = .;
|
||||
|
||||
_edata = .; /* End of data section */
|
||||
|
||||
__bss_start = .; /* BSS */
|
||||
/* page table entries need to be PAGE_SIZE aligned */
|
||||
. = ALIGN(ASM_PAGE_SIZE);
|
||||
.data.vmpages : {
|
||||
*(.data.vm0.pmd)
|
||||
*(.data.vm0.pgd)
|
||||
*(.data.vm0.pte)
|
||||
}
|
||||
.bss : { *(.bss) *(COMMON) }
|
||||
__bss_stop = .;
|
||||
|
||||
|
||||
/* assembler code expects init_task to be 16k aligned */
|
||||
. = ALIGN(16384); /* init_task */
|
||||
.data.init_task : { *(.data.init_task) }
|
||||
|
||||
@@ -126,6 +139,7 @@ SECTIONS
|
||||
.dlt : { *(.dlt) }
|
||||
#endif
|
||||
|
||||
/* reserve space for interrupt stack by aligning __init* to 16k */
|
||||
. = ALIGN(16384);
|
||||
__init_begin = .;
|
||||
.init.text : {
|
||||
@@ -166,7 +180,7 @@ SECTIONS
|
||||
from .altinstructions and .eh_frame */
|
||||
.exit.text : { *(.exit.text) }
|
||||
.exit.data : { *(.exit.data) }
|
||||
. = ALIGN(4096);
|
||||
. = ALIGN(ASM_PAGE_SIZE);
|
||||
__initramfs_start = .;
|
||||
.init.ramfs : { *(.init.ramfs) }
|
||||
__initramfs_end = .;
|
||||
@@ -174,14 +188,10 @@ SECTIONS
|
||||
__per_cpu_start = .;
|
||||
.data.percpu : { *(.data.percpu) }
|
||||
__per_cpu_end = .;
|
||||
. = ALIGN(4096);
|
||||
. = ALIGN(ASM_PAGE_SIZE);
|
||||
__init_end = .;
|
||||
/* freed after init ends here */
|
||||
|
||||
__bss_start = .; /* BSS */
|
||||
.bss : { *(.bss) *(COMMON) }
|
||||
__bss_stop = .;
|
||||
|
||||
_end = . ;
|
||||
|
||||
/* Sections to be discarded */
|
||||
|
Reference in New Issue
Block a user