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
@@ -60,13 +60,14 @@ pgtable_t pte_alloc_one(struct mm_struct *mm);
|
||||
|
||||
static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
|
||||
{
|
||||
return srmmu_get_nocache(PTE_SIZE, PTE_SIZE);
|
||||
return srmmu_get_nocache(SRMMU_PTE_TABLE_SIZE,
|
||||
SRMMU_PTE_TABLE_SIZE);
|
||||
}
|
||||
|
||||
|
||||
static inline void free_pte_fast(pte_t *pte)
|
||||
{
|
||||
srmmu_free_nocache(pte, PTE_SIZE);
|
||||
srmmu_free_nocache(pte, SRMMU_PTE_TABLE_SIZE);
|
||||
}
|
||||
|
||||
#define pte_free_kernel(mm, pte) free_pte_fast(pte)
|
||||
|
Reference in New Issue
Block a user