mirror of https://gitee.com/openkylin/linux.git
MIPS: mm: Standardise on _PAGE_NO_READ, drop _PAGE_READ
Ever since support for RI/XI was implemented by commit 6dd9344cfc
("MIPS: Implement Read Inhibit/eXecute Inhibit") we've had a mixture of
_PAGE_READ & _PAGE_NO_READ bits. Rather than keep both around, switch
away from using _PAGE_READ to determine page presence & instead invert
the use to _PAGE_NO_READ. Wherever we formerly had no definition for
_PAGE_NO_READ, change what was _PAGE_READ to _PAGE_NO_READ. The end
result is that we consistently use _PAGE_NO_READ to determine whether a
page is readable, regardless of whether RI/XI is implemented.
Signed-off-by: Paul Burton <paul.burton@imgtec.com>
Reviewed-by: James Hogan <james.hogan@imgtec.com>
Cc: David Daney <david.daney@cavium.com>
Cc: Huacai Chen <chenhc@lemote.com>
Cc: Maciej W. Rozycki <macro@linux-mips.org>
Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Alex Smith <alex.smith@imgtec.com>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/13116/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
694977006a
commit
780602d740
|
@ -49,7 +49,6 @@ enum pgtable_bits {
|
||||||
|
|
||||||
/* Used only by software (masked out before writing EntryLo*) */
|
/* Used only by software (masked out before writing EntryLo*) */
|
||||||
_PAGE_PRESENT_SHIFT = 24,
|
_PAGE_PRESENT_SHIFT = 24,
|
||||||
_PAGE_READ_SHIFT,
|
|
||||||
_PAGE_WRITE_SHIFT,
|
_PAGE_WRITE_SHIFT,
|
||||||
_PAGE_ACCESSED_SHIFT,
|
_PAGE_ACCESSED_SHIFT,
|
||||||
_PAGE_MODIFIED_SHIFT,
|
_PAGE_MODIFIED_SHIFT,
|
||||||
|
@ -66,7 +65,7 @@ enum pgtable_bits {
|
||||||
enum pgtable_bits {
|
enum pgtable_bits {
|
||||||
/* Used only by software (writes to EntryLo ignored) */
|
/* Used only by software (writes to EntryLo ignored) */
|
||||||
_PAGE_PRESENT_SHIFT,
|
_PAGE_PRESENT_SHIFT,
|
||||||
_PAGE_READ_SHIFT,
|
_PAGE_NO_READ_SHIFT,
|
||||||
_PAGE_WRITE_SHIFT,
|
_PAGE_WRITE_SHIFT,
|
||||||
_PAGE_ACCESSED_SHIFT,
|
_PAGE_ACCESSED_SHIFT,
|
||||||
_PAGE_MODIFIED_SHIFT,
|
_PAGE_MODIFIED_SHIFT,
|
||||||
|
@ -85,7 +84,7 @@ enum pgtable_bits {
|
||||||
/* Used only by software (masked out before writing EntryLo*) */
|
/* Used only by software (masked out before writing EntryLo*) */
|
||||||
_PAGE_PRESENT_SHIFT,
|
_PAGE_PRESENT_SHIFT,
|
||||||
#if !defined(CONFIG_CPU_MIPSR2) && !defined(CONFIG_CPU_MIPSR6)
|
#if !defined(CONFIG_CPU_MIPSR2) && !defined(CONFIG_CPU_MIPSR6)
|
||||||
_PAGE_READ_SHIFT,
|
_PAGE_NO_READ_SHIFT,
|
||||||
#endif
|
#endif
|
||||||
_PAGE_WRITE_SHIFT,
|
_PAGE_WRITE_SHIFT,
|
||||||
_PAGE_ACCESSED_SHIFT,
|
_PAGE_ACCESSED_SHIFT,
|
||||||
|
@ -98,7 +97,6 @@ enum pgtable_bits {
|
||||||
#if defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6)
|
#if defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6)
|
||||||
_PAGE_NO_EXEC_SHIFT,
|
_PAGE_NO_EXEC_SHIFT,
|
||||||
_PAGE_NO_READ_SHIFT,
|
_PAGE_NO_READ_SHIFT,
|
||||||
_PAGE_READ_SHIFT = _PAGE_NO_READ_SHIFT,
|
|
||||||
#endif
|
#endif
|
||||||
_PAGE_GLOBAL_SHIFT,
|
_PAGE_GLOBAL_SHIFT,
|
||||||
_PAGE_VALID_SHIFT,
|
_PAGE_VALID_SHIFT,
|
||||||
|
@ -110,11 +108,6 @@ enum pgtable_bits {
|
||||||
|
|
||||||
/* Used only by software */
|
/* Used only by software */
|
||||||
#define _PAGE_PRESENT (1 << _PAGE_PRESENT_SHIFT)
|
#define _PAGE_PRESENT (1 << _PAGE_PRESENT_SHIFT)
|
||||||
#if defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6)
|
|
||||||
# define _PAGE_READ (cpu_has_rixi ? 0 : (1 << _PAGE_READ_SHIFT))
|
|
||||||
#else
|
|
||||||
# define _PAGE_READ (1 << _PAGE_READ_SHIFT)
|
|
||||||
#endif
|
|
||||||
#define _PAGE_WRITE (1 << _PAGE_WRITE_SHIFT)
|
#define _PAGE_WRITE (1 << _PAGE_WRITE_SHIFT)
|
||||||
#define _PAGE_ACCESSED (1 << _PAGE_ACCESSED_SHIFT)
|
#define _PAGE_ACCESSED (1 << _PAGE_ACCESSED_SHIFT)
|
||||||
#define _PAGE_MODIFIED (1 << _PAGE_MODIFIED_SHIFT)
|
#define _PAGE_MODIFIED (1 << _PAGE_MODIFIED_SHIFT)
|
||||||
|
@ -125,11 +118,10 @@ enum pgtable_bits {
|
||||||
/* Used by TLB hardware (placed in EntryLo*) */
|
/* Used by TLB hardware (placed in EntryLo*) */
|
||||||
#if (defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32))
|
#if (defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32))
|
||||||
# define _PAGE_NO_EXEC (1 << _PAGE_NO_EXEC_SHIFT)
|
# define _PAGE_NO_EXEC (1 << _PAGE_NO_EXEC_SHIFT)
|
||||||
# define _PAGE_NO_READ (1 << _PAGE_NO_READ_SHIFT)
|
|
||||||
#elif defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6)
|
#elif defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6)
|
||||||
# define _PAGE_NO_EXEC (cpu_has_rixi ? (1 << _PAGE_NO_EXEC_SHIFT) : 0)
|
# define _PAGE_NO_EXEC (cpu_has_rixi ? (1 << _PAGE_NO_EXEC_SHIFT) : 0)
|
||||||
# define _PAGE_NO_READ (cpu_has_rixi ? (1 << _PAGE_NO_READ_SHIFT) : 0)
|
|
||||||
#endif
|
#endif
|
||||||
|
#define _PAGE_NO_READ (1 << _PAGE_NO_READ_SHIFT)
|
||||||
#define _PAGE_GLOBAL (1 << _PAGE_GLOBAL_SHIFT)
|
#define _PAGE_GLOBAL (1 << _PAGE_GLOBAL_SHIFT)
|
||||||
#define _PAGE_VALID (1 << _PAGE_VALID_SHIFT)
|
#define _PAGE_VALID (1 << _PAGE_VALID_SHIFT)
|
||||||
#define _PAGE_DIRTY (1 << _PAGE_DIRTY_SHIFT)
|
#define _PAGE_DIRTY (1 << _PAGE_DIRTY_SHIFT)
|
||||||
|
@ -145,9 +137,6 @@ enum pgtable_bits {
|
||||||
#ifndef _PAGE_NO_EXEC
|
#ifndef _PAGE_NO_EXEC
|
||||||
#define _PAGE_NO_EXEC 0
|
#define _PAGE_NO_EXEC 0
|
||||||
#endif
|
#endif
|
||||||
#ifndef _PAGE_NO_READ
|
|
||||||
#define _PAGE_NO_READ 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define _PAGE_SILENT_READ _PAGE_VALID
|
#define _PAGE_SILENT_READ _PAGE_VALID
|
||||||
#define _PAGE_SILENT_WRITE _PAGE_DIRTY
|
#define _PAGE_SILENT_WRITE _PAGE_DIRTY
|
||||||
|
@ -245,7 +234,7 @@ static inline uint64_t pte_to_entrylo(unsigned long pte_val)
|
||||||
#define _CACHE_UNCACHED_ACCELERATED (7<<_CACHE_SHIFT)
|
#define _CACHE_UNCACHED_ACCELERATED (7<<_CACHE_SHIFT)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define __READABLE (_PAGE_SILENT_READ | _PAGE_READ | _PAGE_ACCESSED)
|
#define __READABLE (_PAGE_SILENT_READ | _PAGE_ACCESSED)
|
||||||
#define __WRITEABLE (_PAGE_SILENT_WRITE | _PAGE_WRITE | _PAGE_MODIFIED)
|
#define __WRITEABLE (_PAGE_SILENT_WRITE | _PAGE_WRITE | _PAGE_MODIFIED)
|
||||||
|
|
||||||
#define _PAGE_CHG_MASK (_PAGE_ACCESSED | _PAGE_MODIFIED | \
|
#define _PAGE_CHG_MASK (_PAGE_ACCESSED | _PAGE_MODIFIED | \
|
||||||
|
|
|
@ -23,18 +23,19 @@
|
||||||
struct mm_struct;
|
struct mm_struct;
|
||||||
struct vm_area_struct;
|
struct vm_area_struct;
|
||||||
|
|
||||||
#define PAGE_NONE __pgprot(_PAGE_PRESENT | _CACHE_CACHABLE_NONCOHERENT)
|
#define PAGE_NONE __pgprot(_PAGE_PRESENT | _PAGE_NO_READ | \
|
||||||
#define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_WRITE | _PAGE_READ | \
|
_CACHE_CACHABLE_NONCOHERENT)
|
||||||
|
#define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_WRITE | \
|
||||||
_page_cachable_default)
|
_page_cachable_default)
|
||||||
#define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_READ | _PAGE_NO_EXEC | \
|
#define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_NO_EXEC | \
|
||||||
_page_cachable_default)
|
_page_cachable_default)
|
||||||
#define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_READ | \
|
#define PAGE_READONLY __pgprot(_PAGE_PRESENT | \
|
||||||
_page_cachable_default)
|
_page_cachable_default)
|
||||||
#define PAGE_KERNEL __pgprot(_PAGE_PRESENT | __READABLE | __WRITEABLE | \
|
#define PAGE_KERNEL __pgprot(_PAGE_PRESENT | __READABLE | __WRITEABLE | \
|
||||||
_PAGE_GLOBAL | _page_cachable_default)
|
_PAGE_GLOBAL | _page_cachable_default)
|
||||||
#define PAGE_KERNEL_NC __pgprot(_PAGE_PRESENT | __READABLE | __WRITEABLE | \
|
#define PAGE_KERNEL_NC __pgprot(_PAGE_PRESENT | __READABLE | __WRITEABLE | \
|
||||||
_PAGE_GLOBAL | _CACHE_CACHABLE_NONCOHERENT)
|
_PAGE_GLOBAL | _CACHE_CACHABLE_NONCOHERENT)
|
||||||
#define PAGE_USERIO __pgprot(_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | \
|
#define PAGE_USERIO __pgprot(_PAGE_PRESENT | _PAGE_WRITE | \
|
||||||
_page_cachable_default)
|
_page_cachable_default)
|
||||||
#define PAGE_KERNEL_UNCACHED __pgprot(_PAGE_PRESENT | __READABLE | \
|
#define PAGE_KERNEL_UNCACHED __pgprot(_PAGE_PRESENT | __READABLE | \
|
||||||
__WRITEABLE | _PAGE_GLOBAL | _CACHE_UNCACHED)
|
__WRITEABLE | _PAGE_GLOBAL | _CACHE_UNCACHED)
|
||||||
|
@ -338,7 +339,7 @@ static inline pte_t pte_mkdirty(pte_t pte)
|
||||||
static inline pte_t pte_mkyoung(pte_t pte)
|
static inline pte_t pte_mkyoung(pte_t pte)
|
||||||
{
|
{
|
||||||
pte.pte_low |= _PAGE_ACCESSED;
|
pte.pte_low |= _PAGE_ACCESSED;
|
||||||
if (pte.pte_low & _PAGE_READ)
|
if (!(pte.pte_low & _PAGE_NO_READ))
|
||||||
pte.pte_high |= _PAGE_SILENT_READ;
|
pte.pte_high |= _PAGE_SILENT_READ;
|
||||||
return pte;
|
return pte;
|
||||||
}
|
}
|
||||||
|
@ -384,13 +385,8 @@ static inline pte_t pte_mkdirty(pte_t pte)
|
||||||
static inline pte_t pte_mkyoung(pte_t pte)
|
static inline pte_t pte_mkyoung(pte_t pte)
|
||||||
{
|
{
|
||||||
pte_val(pte) |= _PAGE_ACCESSED;
|
pte_val(pte) |= _PAGE_ACCESSED;
|
||||||
#if defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6) || defined(CONFIG_CPU_LOONGSON3)
|
|
||||||
if (!(pte_val(pte) & _PAGE_NO_READ))
|
if (!(pte_val(pte) & _PAGE_NO_READ))
|
||||||
pte_val(pte) |= _PAGE_SILENT_READ;
|
pte_val(pte) |= _PAGE_SILENT_READ;
|
||||||
else
|
|
||||||
#endif
|
|
||||||
if (pte_val(pte) & _PAGE_READ)
|
|
||||||
pte_val(pte) |= _PAGE_SILENT_READ;
|
|
||||||
return pte;
|
return pte;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -570,13 +566,8 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd)
|
||||||
{
|
{
|
||||||
pmd_val(pmd) |= _PAGE_ACCESSED;
|
pmd_val(pmd) |= _PAGE_ACCESSED;
|
||||||
|
|
||||||
#if defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6) || defined(CONFIG_CPU_LOONGSON3)
|
|
||||||
if (!(pmd_val(pmd) & _PAGE_NO_READ))
|
if (!(pmd_val(pmd) & _PAGE_NO_READ))
|
||||||
pmd_val(pmd) |= _PAGE_SILENT_READ;
|
pmd_val(pmd) |= _PAGE_SILENT_READ;
|
||||||
else
|
|
||||||
#endif
|
|
||||||
if (pmd_val(pmd) & _PAGE_READ)
|
|
||||||
pmd_val(pmd) |= _PAGE_SILENT_READ;
|
|
||||||
|
|
||||||
return pmd;
|
return pmd;
|
||||||
}
|
}
|
||||||
|
|
|
@ -234,20 +234,16 @@ static void output_pgtable_bits_defines(void)
|
||||||
pr_debug("\n");
|
pr_debug("\n");
|
||||||
|
|
||||||
pr_define("_PAGE_PRESENT_SHIFT %d\n", _PAGE_PRESENT_SHIFT);
|
pr_define("_PAGE_PRESENT_SHIFT %d\n", _PAGE_PRESENT_SHIFT);
|
||||||
pr_define("_PAGE_READ_SHIFT %d\n", _PAGE_READ_SHIFT);
|
pr_define("_PAGE_NO_READ_SHIFT %d\n", _PAGE_NO_READ_SHIFT);
|
||||||
pr_define("_PAGE_WRITE_SHIFT %d\n", _PAGE_WRITE_SHIFT);
|
pr_define("_PAGE_WRITE_SHIFT %d\n", _PAGE_WRITE_SHIFT);
|
||||||
pr_define("_PAGE_ACCESSED_SHIFT %d\n", _PAGE_ACCESSED_SHIFT);
|
pr_define("_PAGE_ACCESSED_SHIFT %d\n", _PAGE_ACCESSED_SHIFT);
|
||||||
pr_define("_PAGE_MODIFIED_SHIFT %d\n", _PAGE_MODIFIED_SHIFT);
|
pr_define("_PAGE_MODIFIED_SHIFT %d\n", _PAGE_MODIFIED_SHIFT);
|
||||||
#ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT
|
#ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT
|
||||||
pr_define("_PAGE_HUGE_SHIFT %d\n", _PAGE_HUGE_SHIFT);
|
pr_define("_PAGE_HUGE_SHIFT %d\n", _PAGE_HUGE_SHIFT);
|
||||||
#endif
|
#endif
|
||||||
#if defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6)
|
|
||||||
if (cpu_has_rixi) {
|
|
||||||
#ifdef _PAGE_NO_EXEC_SHIFT
|
#ifdef _PAGE_NO_EXEC_SHIFT
|
||||||
|
if (cpu_has_rixi)
|
||||||
pr_define("_PAGE_NO_EXEC_SHIFT %d\n", _PAGE_NO_EXEC_SHIFT);
|
pr_define("_PAGE_NO_EXEC_SHIFT %d\n", _PAGE_NO_EXEC_SHIFT);
|
||||||
pr_define("_PAGE_NO_READ_SHIFT %d\n", _PAGE_NO_READ_SHIFT);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
pr_define("_PAGE_GLOBAL_SHIFT %d\n", _PAGE_GLOBAL_SHIFT);
|
pr_define("_PAGE_GLOBAL_SHIFT %d\n", _PAGE_GLOBAL_SHIFT);
|
||||||
pr_define("_PAGE_VALID_SHIFT %d\n", _PAGE_VALID_SHIFT);
|
pr_define("_PAGE_VALID_SHIFT %d\n", _PAGE_VALID_SHIFT);
|
||||||
|
@ -1728,9 +1724,8 @@ build_pte_present(u32 **p, struct uasm_reloc **r,
|
||||||
cur = t;
|
cur = t;
|
||||||
}
|
}
|
||||||
uasm_i_andi(p, t, cur,
|
uasm_i_andi(p, t, cur,
|
||||||
(_PAGE_PRESENT | _PAGE_READ) >> _PAGE_PRESENT_SHIFT);
|
(_PAGE_PRESENT | _PAGE_NO_READ) >> _PAGE_PRESENT_SHIFT);
|
||||||
uasm_i_xori(p, t, t,
|
uasm_i_xori(p, t, t, _PAGE_PRESENT >> _PAGE_PRESENT_SHIFT);
|
||||||
(_PAGE_PRESENT | _PAGE_READ) >> _PAGE_PRESENT_SHIFT);
|
|
||||||
uasm_il_bnez(p, r, t, lid);
|
uasm_il_bnez(p, r, t, lid);
|
||||||
if (pte == t)
|
if (pte == t)
|
||||||
/* You lose the SMP race :-(*/
|
/* You lose the SMP race :-(*/
|
||||||
|
|
Loading…
Reference in New Issue