sparc32: use pgtable-nopud instead of 4level-fixup
32-bit version of sparc has three-level page tables and can use pgtable-nopud and folding of the upper layers. Replace usage of include/asm-generic/4level-fixup.h with include/asm-generic/pgtable-nopud.h and adjust page table manipulation macros and functions accordingly. Link: http://lkml.kernel.org/r/1572938135-31886-11-git-send-email-rppt@kernel.org Signed-off-by: Mike Rapoport <rppt@linux.ibm.com> Acked-by: David S. Miller <davem@davemloft.net> Tested-by: Anatoly Pugachev <matorola@gmail.com> Cc: Anton Ivanov <anton.ivanov@cambridgegreys.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Greentime Hu <green.hu@gmail.com> Cc: Greg Ungerer <gerg@linux-m68k.org> Cc: Helge Deller <deller@gmx.de> Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com> Cc: Jeff Dike <jdike@addtoit.com> Cc: "Kirill A. Shutemov" <kirill@shutemov.name> Cc: Mark Salter <msalter@redhat.com> Cc: Matt Turner <mattst88@gmail.com> Cc: Michal Simek <monstr@monstr.eu> Cc: Peter Rosin <peda@axentia.se> Cc: Richard Weinberger <richard@nod.at> Cc: Rolf Eike Beer <eike-kernel@sf-tec.de> Cc: Russell King <linux@armlinux.org.uk> Cc: Russell King <rmk+kernel@armlinux.org.uk> Cc: Sam Creasey <sammy@sammy.net> Cc: Vincent Chen <deanbo422@gmail.com> Cc: Vineet Gupta <Vineet.Gupta1@synopsys.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
2fa245c1f8
commit
7235db268a
@@ -26,14 +26,14 @@ static inline void free_pgd_fast(pgd_t *pgd)
|
||||
#define pgd_free(mm, pgd) free_pgd_fast(pgd)
|
||||
#define pgd_alloc(mm) get_pgd_fast()
|
||||
|
||||
static inline void pgd_set(pgd_t * pgdp, pmd_t * pmdp)
|
||||
static inline void pud_set(pud_t * pudp, pmd_t * pmdp)
|
||||
{
|
||||
unsigned long pa = __nocache_pa(pmdp);
|
||||
|
||||
set_pte((pte_t *)pgdp, __pte((SRMMU_ET_PTD | (pa >> 4))));
|
||||
set_pte((pte_t *)pudp, __pte((SRMMU_ET_PTD | (pa >> 4))));
|
||||
}
|
||||
|
||||
#define pgd_populate(MM, PGD, PMD) pgd_set(PGD, PMD)
|
||||
#define pud_populate(MM, PGD, PMD) pud_set(PGD, PMD)
|
||||
|
||||
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm,
|
||||
unsigned long address)
|
||||
|
@@ -12,7 +12,7 @@
|
||||
#include <linux/const.h>
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#include <asm-generic/4level-fixup.h>
|
||||
#include <asm-generic/pgtable-nopud.h>
|
||||
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/mm_types.h>
|
||||
@@ -132,12 +132,12 @@ static inline struct page *pmd_page(pmd_t pmd)
|
||||
return pfn_to_page((pmd_val(pmd) & SRMMU_PTD_PMASK) >> (PAGE_SHIFT-4));
|
||||
}
|
||||
|
||||
static inline unsigned long pgd_page_vaddr(pgd_t pgd)
|
||||
static inline unsigned long pud_page_vaddr(pud_t pud)
|
||||
{
|
||||
if (srmmu_device_memory(pgd_val(pgd))) {
|
||||
if (srmmu_device_memory(pud_val(pud))) {
|
||||
return ~0;
|
||||
} else {
|
||||
unsigned long v = pgd_val(pgd) & SRMMU_PTD_PMASK;
|
||||
unsigned long v = pud_val(pud) & SRMMU_PTD_PMASK;
|
||||
return (unsigned long)__nocache_va(v << 4);
|
||||
}
|
||||
}
|
||||
@@ -184,24 +184,24 @@ static inline void pmd_clear(pmd_t *pmdp)
|
||||
set_pte((pte_t *)&pmdp->pmdv[i], __pte(0));
|
||||
}
|
||||
|
||||
static inline int pgd_none(pgd_t pgd)
|
||||
static inline int pud_none(pud_t pud)
|
||||
{
|
||||
return !(pgd_val(pgd) & 0xFFFFFFF);
|
||||
return !(pud_val(pud) & 0xFFFFFFF);
|
||||
}
|
||||
|
||||
static inline int pgd_bad(pgd_t pgd)
|
||||
static inline int pud_bad(pud_t pud)
|
||||
{
|
||||
return (pgd_val(pgd) & SRMMU_ET_MASK) != SRMMU_ET_PTD;
|
||||
return (pud_val(pud) & SRMMU_ET_MASK) != SRMMU_ET_PTD;
|
||||
}
|
||||
|
||||
static inline int pgd_present(pgd_t pgd)
|
||||
static inline int pud_present(pud_t pud)
|
||||
{
|
||||
return ((pgd_val(pgd) & SRMMU_ET_MASK) == SRMMU_ET_PTD);
|
||||
return ((pud_val(pud) & SRMMU_ET_MASK) == SRMMU_ET_PTD);
|
||||
}
|
||||
|
||||
static inline void pgd_clear(pgd_t *pgdp)
|
||||
static inline void pud_clear(pud_t *pudp)
|
||||
{
|
||||
set_pte((pte_t *)pgdp, __pte(0));
|
||||
set_pte((pte_t *)pudp, __pte(0));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -319,9 +319,9 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
||||
#define pgd_offset_k(address) pgd_offset(&init_mm, address)
|
||||
|
||||
/* Find an entry in the second-level page table.. */
|
||||
static inline pmd_t *pmd_offset(pgd_t * dir, unsigned long address)
|
||||
static inline pmd_t *pmd_offset(pud_t * dir, unsigned long address)
|
||||
{
|
||||
return (pmd_t *) pgd_page_vaddr(*dir) +
|
||||
return (pmd_t *) pud_page_vaddr(*dir) +
|
||||
((address >> PMD_SHIFT) & (PTRS_PER_PMD - 1));
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user