Commit 5dd97166 authored by Geert Uytterhoeven's avatar Geert Uytterhoeven Committed by Jens Axboe

[PATCH] m68k page

m68k page updates (from Roman Zippel):
  - Set _PAGE_RONLY bit and clear _PAGE_PRESENT to mark PAGE_NONE pte entries
    (this also makes PAGE_NONE fixup unnecessary)
  - Move _PAGE_FILE to a lower, so pte_to_pgoff/pgoff_to_pte becomes simpler
parent 8121975b
...@@ -220,18 +220,6 @@ void __init paging_init(void) ...@@ -220,18 +220,6 @@ void __init paging_init(void)
for (i = 0; i < 16; i++) for (i = 0; i < 16; i++)
pgprot_val(protection_map[i]) |= _PAGE_CACHE040; pgprot_val(protection_map[i]) |= _PAGE_CACHE040;
} }
/* Fix the PAGE_NONE value. */
if (CPU_IS_040_OR_060) {
/* On the 680[46]0 we can use the _PAGE_SUPER bit. */
pgprot_val(protection_map[0]) |= _PAGE_SUPER;
pgprot_val(protection_map[VM_SHARED]) |= _PAGE_SUPER;
} else {
/* Otherwise we must fake it. */
pgprot_val(protection_map[0]) &= ~_PAGE_PRESENT;
pgprot_val(protection_map[0]) |= _PAGE_FAKE_SUPER;
pgprot_val(protection_map[VM_SHARED]) &= ~_PAGE_PRESENT;
pgprot_val(protection_map[VM_SHARED]) |= _PAGE_FAKE_SUPER;
}
/* /*
* Map the physical memory available into the kernel virtual * Map the physical memory available into the kernel virtual
......
...@@ -12,9 +12,7 @@ ...@@ -12,9 +12,7 @@
#define _PAGE_ACCESSED 0x008 #define _PAGE_ACCESSED 0x008
#define _PAGE_DIRTY 0x010 #define _PAGE_DIRTY 0x010
#define _PAGE_SUPER 0x080 /* 68040 supervisor only */ #define _PAGE_SUPER 0x080 /* 68040 supervisor only */
#define _PAGE_FAKE_SUPER 0x200 /* fake supervisor only on 680[23]0 */
#define _PAGE_GLOBAL040 0x400 /* 68040 global bit, used for kva descs */ #define _PAGE_GLOBAL040 0x400 /* 68040 global bit, used for kva descs */
#define _PAGE_FILE 0x800 /* pagecache or swap? */
#define _PAGE_NOCACHE030 0x040 /* 68030 no-cache mode */ #define _PAGE_NOCACHE030 0x040 /* 68030 no-cache mode */
#define _PAGE_NOCACHE 0x060 /* 68040 cache mode, non-serialized */ #define _PAGE_NOCACHE 0x060 /* 68040 cache mode, non-serialized */
#define _PAGE_NOCACHE_S 0x040 /* 68040 no-cache mode, serialized */ #define _PAGE_NOCACHE_S 0x040 /* 68040 no-cache mode, serialized */
...@@ -29,6 +27,9 @@ ...@@ -29,6 +27,9 @@
#define _PAGE_TABLE (_PAGE_SHORT) #define _PAGE_TABLE (_PAGE_SHORT)
#define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_NOCACHE) #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_NOCACHE)
#define _PAGE_PROTNONE 0x004
#define _PAGE_FILE 0x008 /* pagecache or swap? */
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
/* This is the cache mode to be used for pages containing page descriptors for /* This is the cache mode to be used for pages containing page descriptors for
...@@ -54,7 +55,7 @@ extern int m68k_supervisor_cachemode; ...@@ -54,7 +55,7 @@ extern int m68k_supervisor_cachemode;
extern unsigned long mm_cachebits; extern unsigned long mm_cachebits;
#endif #endif
#define PAGE_NONE __pgprot(_PAGE_PRESENT | _PAGE_RONLY | _PAGE_ACCESSED | mm_cachebits) #define PAGE_NONE __pgprot(_PAGE_PROTNONE | _PAGE_ACCESSED | mm_cachebits)
#define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | mm_cachebits) #define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | mm_cachebits)
#define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_RONLY | _PAGE_ACCESSED | mm_cachebits) #define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_RONLY | _PAGE_ACCESSED | mm_cachebits)
#define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_RONLY | _PAGE_ACCESSED | mm_cachebits) #define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_RONLY | _PAGE_ACCESSED | mm_cachebits)
...@@ -62,7 +63,7 @@ extern unsigned long mm_cachebits; ...@@ -62,7 +63,7 @@ extern unsigned long mm_cachebits;
/* Alternate definitions that are compile time constants, for /* Alternate definitions that are compile time constants, for
initializing protection_map. The cachebits are fixed later. */ initializing protection_map. The cachebits are fixed later. */
#define PAGE_NONE_C __pgprot(_PAGE_PRESENT | _PAGE_RONLY | _PAGE_ACCESSED) #define PAGE_NONE_C __pgprot(_PAGE_PROTNONE | _PAGE_ACCESSED)
#define PAGE_SHARED_C __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED) #define PAGE_SHARED_C __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED)
#define PAGE_COPY_C __pgprot(_PAGE_PRESENT | _PAGE_RONLY | _PAGE_ACCESSED) #define PAGE_COPY_C __pgprot(_PAGE_PRESENT | _PAGE_RONLY | _PAGE_ACCESSED)
#define PAGE_READONLY_C __pgprot(_PAGE_PRESENT | _PAGE_RONLY | _PAGE_ACCESSED) #define PAGE_READONLY_C __pgprot(_PAGE_PRESENT | _PAGE_RONLY | _PAGE_ACCESSED)
...@@ -118,7 +119,7 @@ extern inline void pgd_set(pgd_t * pgdp, pmd_t * pmdp) ...@@ -118,7 +119,7 @@ extern inline void pgd_set(pgd_t * pgdp, pmd_t * pmdp)
#define pte_none(pte) (!pte_val(pte)) #define pte_none(pte) (!pte_val(pte))
#define pte_present(pte) (pte_val(pte) & (_PAGE_PRESENT | _PAGE_FAKE_SUPER)) #define pte_present(pte) (pte_val(pte) & (_PAGE_PRESENT | _PAGE_PROTNONE))
#define pte_clear(ptep) ({ pte_val(*(ptep)) = 0; }) #define pte_clear(ptep) ({ pte_val(*(ptep)) = 0; })
#define pte_page(pte) (mem_map + ((unsigned long)(__va(pte_val(pte)) - PAGE_OFFSET) >> PAGE_SHIFT)) #define pte_page(pte) (mem_map + ((unsigned long)(__va(pte_val(pte)) - PAGE_OFFSET) >> PAGE_SHIFT))
...@@ -256,23 +257,23 @@ static inline void cache_page(void *vaddr) ...@@ -256,23 +257,23 @@ static inline void cache_page(void *vaddr)
} }
} }
#define PTE_FILE_MAX_BITS 29 #define PTE_FILE_MAX_BITS 28
static inline unsigned long pte_to_pgoff(pte_t pte) static inline unsigned long pte_to_pgoff(pte_t pte)
{ {
return ((pte.pte >> 12) << 7) + ((pte.pte >> 2) & 0x1ff); return pte.pte >> 4;
} }
static inline pte_t pgoff_to_pte(unsigned off) static inline pte_t pgoff_to_pte(unsigned off)
{ {
pte_t pte = { ((off >> 7) << 12) + ((off & 0x1ff) << 2) + _PAGE_FILE }; pte_t pte = { (off << 4) + _PAGE_FILE };
return pte; return pte;
} }
/* Encode and de-code a swap entry (must be !pte_none(e) && !pte_present(e)) */ /* Encode and de-code a swap entry (must be !pte_none(e) && !pte_present(e)) */
#define __swp_type(x) (((x).val >> 2) & 0x1ff) #define __swp_type(x) (((x).val >> 4) & 0xff)
#define __swp_offset(x) ((x).val >> 12) #define __swp_offset(x) ((x).val >> 12)
#define __swp_entry(type, offset) ((swp_entry_t) { ((type) << 2) | ((offset) << 12) }) #define __swp_entry(type, offset) ((swp_entry_t) { ((type) << 4) | ((offset) << 12) })
#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) })
#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) #define __swp_entry_to_pte(x) ((pte_t) { (x).val })
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment