From: Hirokazu Takata - Support PAGE_NONE attribute for memory protection. - Add _PAGE_PROTNONE bit to pte (software bit). Signed-off-by: NIIBE Yutaka Signed-off-by: Hirokazu Takata Signed-off-by: Andrew Morton --- 25-akpm/include/asm-m32r/pgtable-2level.h | 7 +++---- 25-akpm/include/asm-m32r/pgtable.h | 12 +++++++----- 2 files changed, 10 insertions(+), 9 deletions(-) diff -puN include/asm-m32r/pgtable-2level.h~m32r-support-page_none-1-3 include/asm-m32r/pgtable-2level.h --- 25/include/asm-m32r/pgtable-2level.h~m32r-support-page_none-1-3 Fri Dec 17 15:00:37 2004 +++ 25-akpm/include/asm-m32r/pgtable-2level.h Fri Dec 17 15:00:37 2004 @@ -68,10 +68,9 @@ static __inline__ pmd_t *pmd_offset(pgd_ #define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) #define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) -/* M32R_FIXME : PTE_FILE_MAX_BITS, pte_to_pgoff, pgoff_to_pte */ -#define PTE_FILE_MAX_BITS 31 -#define pte_to_pgoff(pte) (pte_val(pte) >> 1) -#define pgoff_to_pte(off) ((pte_t) { ((off) << 1) | _PAGE_FILE }) +#define PTE_FILE_MAX_BITS 29 +#define pte_to_pgoff(pte) (((pte_val(pte) >> 2) & 0xff) | (((pte_val(pte) >> 11)) << 8)) +#define pgoff_to_pte(off) ((pte_t) { (((off) & 0xff) << 2) | (((off) >> 8) << 11) | _PAGE_FILE }) #endif /* _ASM_M32R_PGTABLE_2LEVEL_H */ diff -puN include/asm-m32r/pgtable.h~m32r-support-page_none-1-3 include/asm-m32r/pgtable.h --- 25/include/asm-m32r/pgtable.h~m32r-support-page_none-1-3 Fri Dec 17 15:00:37 2004 +++ 25-akpm/include/asm-m32r/pgtable.h Fri Dec 17 15:00:37 2004 @@ -88,6 +88,7 @@ extern unsigned long empty_zero_page[102 #define _PAGE_BIT_USER 8 /* software: user space access allowed */ #define _PAGE_BIT_ACCESSED 9 /* software: page referenced */ +#define _PAGE_BIT_PROTNONE 10 /* software: if not present */ #define _PAGE_DIRTY (1UL << _PAGE_BIT_DIRTY) #define _PAGE_FILE (1UL << _PAGE_BIT_FILE) @@ -100,6 +101,7 @@ extern unsigned long empty_zero_page[102 #define _PAGE_NONCACHABLE (1UL << _PAGE_BIT_NONCACHABLE) #define _PAGE_USER (1UL << _PAGE_BIT_USER) #define _PAGE_ACCESSED (1UL << _PAGE_BIT_ACCESSED) +#define _PAGE_PROTNONE (1UL << _PAGE_BIT_PROTNONE) #define _PAGE_TABLE \ ( _PAGE_PRESENT | _PAGE_WRITE | _PAGE_READ | _PAGE_USER \ @@ -112,7 +114,7 @@ extern unsigned long empty_zero_page[102 #ifdef CONFIG_MMU #define PAGE_NONE \ - __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED) + __pgprot(_PAGE_PROTNONE | _PAGE_ACCESSED) #define PAGE_SHARED \ __pgprot(_PAGE_PRESENT | _PAGE_WRITE | _PAGE_READ | _PAGE_USER \ | _PAGE_ACCESSED) @@ -177,7 +179,7 @@ extern unsigned long empty_zero_page[102 /* page table for 0-4MB for everybody */ -#define pte_present(x) (pte_val(x) & _PAGE_PRESENT) +#define pte_present(x) (pte_val(x) & (_PAGE_PRESENT | _PAGE_PROTNONE)) #define pte_clear(xp) do { set_pte(xp, __pte(0)); } while (0) #define pmd_none(x) (!pmd_val(x)) @@ -376,10 +378,10 @@ static inline void pmd_set(pmd_t * pmdp, #define pte_unmap_nested(pte) do { } while (0) /* Encode and de-code a swap entry */ -#define __swp_type(x) (((x).val >> 1) & 0x3f) -#define __swp_offset(x) ((x).val >> 8) +#define __swp_type(x) (((x).val >> 2) & 0x3f) +#define __swp_offset(x) ((x).val >> 11) #define __swp_entry(type, offset) \ - ((swp_entry_t) { ((type) << 1) | ((offset) << 8) }) + ((swp_entry_t) { ((type) << 2) | ((offset) << 11) }) #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) #define __swp_entry_to_pte(x) ((pte_t) { (x).val }) _