diff options
| author | Kirill A. Shutemov <kirill.shutemov@linux.intel.com> | 2015-02-10 17:11:09 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-10 17:30:33 -0500 |
| commit | 8b70beac99466b6d164de9fe647b3567e6f17e3a (patch) | |
| tree | dc4e816dd2a8e0441d26b199cc149b552e91e259 | |
| parent | 917e401ea75478d4f4575bc8b0ef3d14ecf9ef69 (diff) | |
sh: drop _PAGE_FILE and pte_file()-related helpers
We've replaced remap_file_pages(2) implementation with emulation. Nobody
creates non-linear mapping anymore.
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
| -rw-r--r-- | arch/sh/include/asm/pgtable_32.h | 30 | ||||
| -rw-r--r-- | arch/sh/include/asm/pgtable_64.h | 9 |
2 files changed, 5 insertions, 34 deletions
diff --git a/arch/sh/include/asm/pgtable_32.h b/arch/sh/include/asm/pgtable_32.h index 0bce3d81569e..c646e563abce 100644 --- a/arch/sh/include/asm/pgtable_32.h +++ b/arch/sh/include/asm/pgtable_32.h | |||
| @@ -26,8 +26,6 @@ | |||
| 26 | * and timing control which (together with bit 0) are moved into the | 26 | * and timing control which (together with bit 0) are moved into the |
| 27 | * old-style PTEA on the parts that support it. | 27 | * old-style PTEA on the parts that support it. |
| 28 | * | 28 | * |
| 29 | * XXX: Leave the _PAGE_FILE and _PAGE_WT overhaul for a rainy day. | ||
| 30 | * | ||
| 31 | * SH-X2 MMUs and extended PTEs | 29 | * SH-X2 MMUs and extended PTEs |
| 32 | * | 30 | * |
| 33 | * SH-X2 supports an extended mode TLB with split data arrays due to the | 31 | * SH-X2 supports an extended mode TLB with split data arrays due to the |
| @@ -51,7 +49,6 @@ | |||
| 51 | #define _PAGE_PRESENT 0x100 /* V-bit : page is valid */ | 49 | #define _PAGE_PRESENT 0x100 /* V-bit : page is valid */ |
| 52 | #define _PAGE_PROTNONE 0x200 /* software: if not present */ | 50 | #define _PAGE_PROTNONE 0x200 /* software: if not present */ |
| 53 | #define _PAGE_ACCESSED 0x400 /* software: page referenced */ | 51 | #define _PAGE_ACCESSED 0x400 /* software: page referenced */ |
| 54 | #define _PAGE_FILE _PAGE_WT /* software: pagecache or swap? */ | ||
| 55 | #define _PAGE_SPECIAL 0x800 /* software: special page */ | 52 | #define _PAGE_SPECIAL 0x800 /* software: special page */ |
| 56 | 53 | ||
| 57 | #define _PAGE_SZ_MASK (_PAGE_SZ0 | _PAGE_SZ1) | 54 | #define _PAGE_SZ_MASK (_PAGE_SZ0 | _PAGE_SZ1) |
| @@ -105,14 +102,13 @@ static inline unsigned long copy_ptea_attributes(unsigned long x) | |||
| 105 | /* Mask which drops unused bits from the PTEL value */ | 102 | /* Mask which drops unused bits from the PTEL value */ |
| 106 | #if defined(CONFIG_CPU_SH3) | 103 | #if defined(CONFIG_CPU_SH3) |
| 107 | #define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED| \ | 104 | #define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED| \ |
| 108 | _PAGE_FILE | _PAGE_SZ1 | \ | 105 | _PAGE_SZ1 | _PAGE_HW_SHARED) |
| 109 | _PAGE_HW_SHARED) | ||
| 110 | #elif defined(CONFIG_X2TLB) | 106 | #elif defined(CONFIG_X2TLB) |
| 111 | /* Get rid of the legacy PR/SZ bits when using extended mode */ | 107 | /* Get rid of the legacy PR/SZ bits when using extended mode */ |
| 112 | #define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED | \ | 108 | #define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED | \ |
| 113 | _PAGE_FILE | _PAGE_PR_MASK | _PAGE_SZ_MASK) | 109 | _PAGE_PR_MASK | _PAGE_SZ_MASK) |
| 114 | #else | 110 | #else |
| 115 | #define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED | _PAGE_FILE) | 111 | #define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED) |
| 116 | #endif | 112 | #endif |
| 117 | 113 | ||
| 118 | #define _PAGE_FLAGS_HARDWARE_MASK (phys_addr_mask() & ~(_PAGE_CLEAR_FLAGS)) | 114 | #define _PAGE_FLAGS_HARDWARE_MASK (phys_addr_mask() & ~(_PAGE_CLEAR_FLAGS)) |
| @@ -343,7 +339,6 @@ static inline void set_pte(pte_t *ptep, pte_t pte) | |||
| 343 | #define pte_not_present(pte) (!((pte).pte_low & _PAGE_PRESENT)) | 339 | #define pte_not_present(pte) (!((pte).pte_low & _PAGE_PRESENT)) |
| 344 | #define pte_dirty(pte) ((pte).pte_low & _PAGE_DIRTY) | 340 | #define pte_dirty(pte) ((pte).pte_low & _PAGE_DIRTY) |
| 345 | #define pte_young(pte) ((pte).pte_low & _PAGE_ACCESSED) | 341 | #define pte_young(pte) ((pte).pte_low & _PAGE_ACCESSED) |
| 346 | #define pte_file(pte) ((pte).pte_low & _PAGE_FILE) | ||
| 347 | #define pte_special(pte) ((pte).pte_low & _PAGE_SPECIAL) | 342 | #define pte_special(pte) ((pte).pte_low & _PAGE_SPECIAL) |
| 348 | 343 | ||
| 349 | #ifdef CONFIG_X2TLB | 344 | #ifdef CONFIG_X2TLB |
| @@ -445,7 +440,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
| 445 | * Encode and de-code a swap entry | 440 | * Encode and de-code a swap entry |
| 446 | * | 441 | * |
| 447 | * Constraints: | 442 | * Constraints: |
| 448 | * _PAGE_FILE at bit 0 | ||
| 449 | * _PAGE_PRESENT at bit 8 | 443 | * _PAGE_PRESENT at bit 8 |
| 450 | * _PAGE_PROTNONE at bit 9 | 444 | * _PAGE_PROTNONE at bit 9 |
| 451 | * | 445 | * |
| @@ -453,9 +447,7 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
| 453 | * swap offset into bits 10:30. For the 64-bit PTE case, we keep the | 447 | * swap offset into bits 10:30. For the 64-bit PTE case, we keep the |
| 454 | * preserved bits in the low 32-bits and use the upper 32 as the swap | 448 | * preserved bits in the low 32-bits and use the upper 32 as the swap |
| 455 | * offset (along with a 5-bit type), following the same approach as x86 | 449 | * offset (along with a 5-bit type), following the same approach as x86 |
| 456 | * PAE. This keeps the logic quite simple, and allows for a full 32 | 450 | * PAE. This keeps the logic quite simple. |
| 457 | * PTE_FILE_MAX_BITS, as opposed to the 29-bits we're constrained with | ||
| 458 | * in the pte_low case. | ||
| 459 | * | 451 | * |
| 460 | * As is evident by the Alpha code, if we ever get a 64-bit unsigned | 452 | * As is evident by the Alpha code, if we ever get a 64-bit unsigned |
| 461 | * long (swp_entry_t) to match up with the 64-bit PTEs, this all becomes | 453 | * long (swp_entry_t) to match up with the 64-bit PTEs, this all becomes |
| @@ -471,13 +463,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
| 471 | #define __pte_to_swp_entry(pte) ((swp_entry_t){ (pte).pte_high }) | 463 | #define __pte_to_swp_entry(pte) ((swp_entry_t){ (pte).pte_high }) |
| 472 | #define __swp_entry_to_pte(x) ((pte_t){ 0, (x).val }) | 464 | #define __swp_entry_to_pte(x) ((pte_t){ 0, (x).val }) |
| 473 | 465 | ||
| 474 | /* | ||
| 475 | * Encode and decode a nonlinear file mapping entry | ||
| 476 | */ | ||
| 477 | #define pte_to_pgoff(pte) ((pte).pte_high) | ||
| 478 | #define pgoff_to_pte(off) ((pte_t) { _PAGE_FILE, (off) }) | ||
| 479 | |||
| 480 | #define PTE_FILE_MAX_BITS 32 | ||
| 481 | #else | 466 | #else |
| 482 | #define __swp_type(x) ((x).val & 0xff) | 467 | #define __swp_type(x) ((x).val & 0xff) |
| 483 | #define __swp_offset(x) ((x).val >> 10) | 468 | #define __swp_offset(x) ((x).val >> 10) |
| @@ -485,13 +470,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
| 485 | 470 | ||
| 486 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) >> 1 }) | 471 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) >> 1 }) |
| 487 | #define __swp_entry_to_pte(x) ((pte_t) { (x).val << 1 }) | 472 | #define __swp_entry_to_pte(x) ((pte_t) { (x).val << 1 }) |
| 488 | |||
| 489 | /* | ||
| 490 | * Encode and decode a nonlinear file mapping entry | ||
| 491 | */ | ||
| 492 | #define PTE_FILE_MAX_BITS 29 | ||
| 493 | #define pte_to_pgoff(pte) (pte_val(pte) >> 1) | ||
| 494 | #define pgoff_to_pte(off) ((pte_t) { ((off) << 1) | _PAGE_FILE }) | ||
| 495 | #endif | 473 | #endif |
| 496 | 474 | ||
| 497 | #endif /* __ASSEMBLY__ */ | 475 | #endif /* __ASSEMBLY__ */ |
diff --git a/arch/sh/include/asm/pgtable_64.h b/arch/sh/include/asm/pgtable_64.h index dda8c82601b9..07424968df62 100644 --- a/arch/sh/include/asm/pgtable_64.h +++ b/arch/sh/include/asm/pgtable_64.h | |||
| @@ -107,7 +107,6 @@ static __inline__ void set_pte(pte_t *pteptr, pte_t pteval) | |||
| 107 | #define _PAGE_DEVICE 0x001 /* CB0: if uncacheable, 1->device (i.e. no write-combining or reordering at bus level) */ | 107 | #define _PAGE_DEVICE 0x001 /* CB0: if uncacheable, 1->device (i.e. no write-combining or reordering at bus level) */ |
| 108 | #define _PAGE_CACHABLE 0x002 /* CB1: uncachable/cachable */ | 108 | #define _PAGE_CACHABLE 0x002 /* CB1: uncachable/cachable */ |
| 109 | #define _PAGE_PRESENT 0x004 /* software: page referenced */ | 109 | #define _PAGE_PRESENT 0x004 /* software: page referenced */ |
| 110 | #define _PAGE_FILE 0x004 /* software: only when !present */ | ||
| 111 | #define _PAGE_SIZE0 0x008 /* SZ0-bit : size of page */ | 110 | #define _PAGE_SIZE0 0x008 /* SZ0-bit : size of page */ |
| 112 | #define _PAGE_SIZE1 0x010 /* SZ1-bit : size of page */ | 111 | #define _PAGE_SIZE1 0x010 /* SZ1-bit : size of page */ |
| 113 | #define _PAGE_SHARED 0x020 /* software: reflects PTEH's SH */ | 112 | #define _PAGE_SHARED 0x020 /* software: reflects PTEH's SH */ |
| @@ -129,7 +128,7 @@ static __inline__ void set_pte(pte_t *pteptr, pte_t pteval) | |||
| 129 | #define _PAGE_WIRED _PAGE_EXT(0x001) /* software: wire the tlb entry */ | 128 | #define _PAGE_WIRED _PAGE_EXT(0x001) /* software: wire the tlb entry */ |
| 130 | #define _PAGE_SPECIAL _PAGE_EXT(0x002) | 129 | #define _PAGE_SPECIAL _PAGE_EXT(0x002) |
| 131 | 130 | ||
| 132 | #define _PAGE_CLEAR_FLAGS (_PAGE_PRESENT | _PAGE_FILE | _PAGE_SHARED | \ | 131 | #define _PAGE_CLEAR_FLAGS (_PAGE_PRESENT | _PAGE_SHARED | \ |
| 133 | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_WIRED) | 132 | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_WIRED) |
| 134 | 133 | ||
| 135 | /* Mask which drops software flags */ | 134 | /* Mask which drops software flags */ |
| @@ -260,7 +259,6 @@ static __inline__ void set_pte(pte_t *pteptr, pte_t pteval) | |||
| 260 | */ | 259 | */ |
| 261 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } | 260 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } |
| 262 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } | 261 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } |
| 263 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } | ||
| 264 | static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_WRITE; } | 262 | static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_WRITE; } |
| 265 | static inline int pte_special(pte_t pte){ return pte_val(pte) & _PAGE_SPECIAL; } | 263 | static inline int pte_special(pte_t pte){ return pte_val(pte) & _PAGE_SPECIAL; } |
| 266 | 264 | ||
| @@ -304,11 +302,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
| 304 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) | 302 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) |
| 305 | #define __swp_entry_to_pte(x) ((pte_t) { (x).val }) | 303 | #define __swp_entry_to_pte(x) ((pte_t) { (x).val }) |
| 306 | 304 | ||
| 307 | /* Encode and decode a nonlinear file mapping entry */ | ||
| 308 | #define PTE_FILE_MAX_BITS 29 | ||
| 309 | #define pte_to_pgoff(pte) (pte_val(pte)) | ||
| 310 | #define pgoff_to_pte(off) ((pte_t) { (off) | _PAGE_FILE }) | ||
| 311 | |||
| 312 | #endif /* !__ASSEMBLY__ */ | 305 | #endif /* !__ASSEMBLY__ */ |
| 313 | 306 | ||
| 314 | #define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) | 307 | #define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) |
