sparc32: mm: Restructure sparc32 MMU page-table layout
The "SRMMU" supports 4k pages using a fixed three-level walk with a
256-entry PGD and 64-entry PMD/PTE levels. In order to fill a page
with a 'pgtable_t', the SRMMU code allocates four native PTE tables
into a single PTE allocation and similarly for the PMD level, leading
to an array of 16 physical pointers in a 'pmd_t'
This breaks the generic code which assumes READ_ONCE(*pmd) will be
word sized.
In a manner similar to ef22d8abd8
("m68k: mm: Restructure Motorola
MMU page-table layout"), this patch implements the native page-table
setup directly. This significantly increases the page-table memory
overhead, but will be addresses in a subsequent patch.
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Will Deacon <will@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
ed894bf5a7
commit
8e958839e4
@@ -24,7 +24,7 @@
|
||||
#include <asm/winmacro.h>
|
||||
#include <asm/thread_info.h> /* TI_UWINMASK */
|
||||
#include <asm/errno.h>
|
||||
#include <asm/pgtsrmmu.h> /* SRMMU_PGDIR_SHIFT */
|
||||
#include <asm/pgtable.h> /* PGDIR_SHIFT */
|
||||
#include <asm/export.h>
|
||||
|
||||
.data
|
||||
@@ -273,7 +273,7 @@ not_a_sun4:
|
||||
lda [%o1] ASI_M_BYPASS, %o2 ! This is the 0x0 16MB pgd
|
||||
|
||||
/* Calculate to KERNBASE entry. */
|
||||
add %o1, KERNBASE >> (SRMMU_PGDIR_SHIFT - 2), %o3
|
||||
add %o1, KERNBASE >> (PGDIR_SHIFT - 2), %o3
|
||||
|
||||
/* Poke the entry into the calculated address. */
|
||||
sta %o2, [%o3] ASI_M_BYPASS
|
||||
@@ -317,7 +317,7 @@ srmmu_not_viking:
|
||||
sll %g1, 0x8, %g1 ! make phys addr for l1 tbl
|
||||
|
||||
lda [%g1] ASI_M_BYPASS, %g2 ! get level1 entry for 0x0
|
||||
add %g1, KERNBASE >> (SRMMU_PGDIR_SHIFT - 2), %g3
|
||||
add %g1, KERNBASE >> (PGDIR_SHIFT - 2), %g3
|
||||
sta %g2, [%g3] ASI_M_BYPASS ! place at KERNBASE entry
|
||||
b go_to_highmem
|
||||
nop ! wheee....
|
||||
@@ -341,7 +341,7 @@ leon_remap:
|
||||
sll %g1, 0x8, %g1 ! make phys addr for l1 tbl
|
||||
|
||||
lda [%g1] ASI_M_BYPASS, %g2 ! get level1 entry for 0x0
|
||||
add %g1, KERNBASE >> (SRMMU_PGDIR_SHIFT - 2), %g3
|
||||
add %g1, KERNBASE >> (PGDIR_SHIFT - 2), %g3
|
||||
sta %g2, [%g3] ASI_M_BYPASS ! place at KERNBASE entry
|
||||
b go_to_highmem
|
||||
nop ! wheee....
|
||||
|
Reference in New Issue
Block a user