powerpc/mm: extend _PAGE_PRIVILEGED to all CPUs
commit ac29c64089
("powerpc/mm: Replace _PAGE_USER with
_PAGE_PRIVILEGED") introduced _PAGE_PRIVILEGED for BOOK3S/64
This patch generalises _PAGE_PRIVILEGED for all CPUs, allowing
to have either _PAGE_PRIVILEGED or _PAGE_USER or both.
PPC_8xx has a _PAGE_SHARED flag which is set for and only for
all non user pages. Lets rename it _PAGE_PRIVILEGED to remove
confusion as it has nothing to do with Linux shared pages.
On BookE, there's a _PAGE_BAP_SR which has to be set for kernel
pages: defining _PAGE_PRIVILEGED as _PAGE_BAP_SR will make
this generic
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:

committed by
Michael Ellerman

parent
5f356497c3
commit
812fadcb94
@@ -67,7 +67,7 @@ void __init MMU_init_hw(void)
|
||||
/* PIN up to the 3 first 8Mb after IMMR in DTLB table */
|
||||
#ifdef CONFIG_PIN_TLB_DATA
|
||||
unsigned long ctr = mfspr(SPRN_MD_CTR) & 0xfe000000;
|
||||
unsigned long flags = 0xf0 | MD_SPS16K | _PAGE_SHARED | _PAGE_DIRTY;
|
||||
unsigned long flags = 0xf0 | MD_SPS16K | _PAGE_PRIVILEGED | _PAGE_DIRTY;
|
||||
#ifdef CONFIG_PIN_TLB_IMMR
|
||||
int i = 29;
|
||||
#else
|
||||
|
@@ -112,13 +112,8 @@ struct flag_info {
|
||||
|
||||
static const struct flag_info flag_array[] = {
|
||||
{
|
||||
#ifdef CONFIG_PPC_BOOK3S_64
|
||||
.mask = _PAGE_PRIVILEGED,
|
||||
.val = 0,
|
||||
#else
|
||||
.mask = _PAGE_USER,
|
||||
.mask = _PAGE_USER | _PAGE_PRIVILEGED,
|
||||
.val = _PAGE_USER,
|
||||
#endif
|
||||
.set = "user",
|
||||
.clear = " ",
|
||||
}, {
|
||||
@@ -229,10 +224,6 @@ static const struct flag_info flag_array[] = {
|
||||
.mask = _PAGE_SPECIAL,
|
||||
.val = _PAGE_SPECIAL,
|
||||
.set = "special",
|
||||
}, {
|
||||
.mask = _PAGE_SHARED,
|
||||
.val = _PAGE_SHARED,
|
||||
.set = "shared",
|
||||
}
|
||||
};
|
||||
|
||||
|
@@ -54,7 +54,8 @@ static inline int pte_looks_normal(pte_t pte)
|
||||
return 0;
|
||||
#else
|
||||
return (pte_val(pte) &
|
||||
(_PAGE_PRESENT | _PAGE_SPECIAL | _PAGE_NO_CACHE | _PAGE_USER)) ==
|
||||
(_PAGE_PRESENT | _PAGE_SPECIAL | _PAGE_NO_CACHE | _PAGE_USER |
|
||||
_PAGE_PRIVILEGED)) ==
|
||||
(_PAGE_PRESENT | _PAGE_USER);
|
||||
#endif
|
||||
}
|
||||
|
@@ -98,14 +98,7 @@ ioremap_prot(phys_addr_t addr, unsigned long size, unsigned long flags)
|
||||
|
||||
/* we don't want to let _PAGE_USER and _PAGE_EXEC leak out */
|
||||
flags &= ~(_PAGE_USER | _PAGE_EXEC);
|
||||
|
||||
#ifdef _PAGE_BAP_SR
|
||||
/* _PAGE_USER contains _PAGE_BAP_SR on BookE using the new PTE format
|
||||
* which means that we just cleared supervisor access... oops ;-) This
|
||||
* restores it
|
||||
*/
|
||||
flags |= _PAGE_BAP_SR;
|
||||
#endif
|
||||
flags |= _PAGE_PRIVILEGED;
|
||||
|
||||
return __ioremap_caller(addr, size, flags, __builtin_return_address(0));
|
||||
}
|
||||
|
@@ -244,20 +244,8 @@ void __iomem * ioremap_prot(phys_addr_t addr, unsigned long size,
|
||||
/*
|
||||
* Force kernel mapping.
|
||||
*/
|
||||
#if defined(CONFIG_PPC_BOOK3S_64)
|
||||
flags |= _PAGE_PRIVILEGED;
|
||||
#else
|
||||
flags &= ~_PAGE_USER;
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef _PAGE_BAP_SR
|
||||
/* _PAGE_USER contains _PAGE_BAP_SR on BookE using the new PTE format
|
||||
* which means that we just cleared supervisor access... oops ;-) This
|
||||
* restores it
|
||||
*/
|
||||
flags |= _PAGE_BAP_SR;
|
||||
#endif
|
||||
flags |= _PAGE_PRIVILEGED;
|
||||
|
||||
if (ppc_md.ioremap)
|
||||
return ppc_md.ioremap(addr, size, flags, caller);
|
||||
|
Reference in New Issue
Block a user