powerpc: 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> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Michael Ellerman <mpe@ellerman.id.au> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
160cc26663
Коммит
780fc5642f
|
@ -333,8 +333,8 @@ static inline void __ptep_set_access_flags(pte_t *ptep, pte_t entry)
|
||||||
/*
|
/*
|
||||||
* Encode and decode a swap entry.
|
* Encode and decode a swap entry.
|
||||||
* Note that the bits we use in a PTE for representing a swap entry
|
* Note that the bits we use in a PTE for representing a swap entry
|
||||||
* must not include the _PAGE_PRESENT bit, the _PAGE_FILE bit, or the
|
* must not include the _PAGE_PRESENT bit or the _PAGE_HASHPTE bit (if used).
|
||||||
*_PAGE_HASHPTE bit (if used). -- paulus
|
* -- paulus
|
||||||
*/
|
*/
|
||||||
#define __swp_type(entry) ((entry).val & 0x1f)
|
#define __swp_type(entry) ((entry).val & 0x1f)
|
||||||
#define __swp_offset(entry) ((entry).val >> 5)
|
#define __swp_offset(entry) ((entry).val >> 5)
|
||||||
|
@ -342,11 +342,6 @@ static inline void __ptep_set_access_flags(pte_t *ptep, pte_t entry)
|
||||||
#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) >> 3 })
|
#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) >> 3 })
|
||||||
#define __swp_entry_to_pte(x) ((pte_t) { (x).val << 3 })
|
#define __swp_entry_to_pte(x) ((pte_t) { (x).val << 3 })
|
||||||
|
|
||||||
/* Encode and decode a nonlinear file mapping entry */
|
|
||||||
#define PTE_FILE_MAX_BITS 29
|
|
||||||
#define pte_to_pgoff(pte) (pte_val(pte) >> 3)
|
|
||||||
#define pgoff_to_pte(off) ((pte_t) { ((off) << 3) | _PAGE_FILE })
|
|
||||||
|
|
||||||
#ifndef CONFIG_PPC_4K_PAGES
|
#ifndef CONFIG_PPC_4K_PAGES
|
||||||
void pgtable_cache_init(void);
|
void pgtable_cache_init(void);
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -352,9 +352,6 @@ static inline void __ptep_set_access_flags(pte_t *ptep, pte_t entry)
|
||||||
#define __swp_entry(type, offset) ((swp_entry_t){((type)<< 1)|((offset)<<8)})
|
#define __swp_entry(type, offset) ((swp_entry_t){((type)<< 1)|((offset)<<8)})
|
||||||
#define __pte_to_swp_entry(pte) ((swp_entry_t){pte_val(pte) >> PTE_RPN_SHIFT})
|
#define __pte_to_swp_entry(pte) ((swp_entry_t){pte_val(pte) >> PTE_RPN_SHIFT})
|
||||||
#define __swp_entry_to_pte(x) ((pte_t) { (x).val << PTE_RPN_SHIFT })
|
#define __swp_entry_to_pte(x) ((pte_t) { (x).val << PTE_RPN_SHIFT })
|
||||||
#define pte_to_pgoff(pte) (pte_val(pte) >> PTE_RPN_SHIFT)
|
|
||||||
#define pgoff_to_pte(off) ((pte_t) {((off) << PTE_RPN_SHIFT)|_PAGE_FILE})
|
|
||||||
#define PTE_FILE_MAX_BITS (BITS_PER_LONG - PTE_RPN_SHIFT)
|
|
||||||
|
|
||||||
void pgtable_cache_add(unsigned shift, void (*ctor)(void *));
|
void pgtable_cache_add(unsigned shift, void (*ctor)(void *));
|
||||||
void pgtable_cache_init(void);
|
void pgtable_cache_init(void);
|
||||||
|
@ -389,7 +386,7 @@ void pgtable_cache_init(void);
|
||||||
* The last three bits are intentionally left to zero. This memory location
|
* The last three bits are intentionally left to zero. This memory location
|
||||||
* are also used as normal page PTE pointers. So if we have any pointers
|
* are also used as normal page PTE pointers. So if we have any pointers
|
||||||
* left around while we collapse a hugepage, we need to make sure
|
* left around while we collapse a hugepage, we need to make sure
|
||||||
* _PAGE_PRESENT and _PAGE_FILE bits of that are zero when we look at them
|
* _PAGE_PRESENT bit of that is zero when we look at them
|
||||||
*/
|
*/
|
||||||
static inline unsigned int hpte_valid(unsigned char *hpte_slot_array, int index)
|
static inline unsigned int hpte_valid(unsigned char *hpte_slot_array, int index)
|
||||||
{
|
{
|
||||||
|
|
|
@ -34,7 +34,6 @@ static inline int pte_write(pte_t pte)
|
||||||
{ return (pte_val(pte) & (_PAGE_RW | _PAGE_RO)) != _PAGE_RO; }
|
{ return (pte_val(pte) & (_PAGE_RW | _PAGE_RO)) != _PAGE_RO; }
|
||||||
static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; }
|
static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; }
|
||||||
static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; }
|
static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; }
|
||||||
static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; }
|
|
||||||
static inline int pte_special(pte_t pte) { return pte_val(pte) & _PAGE_SPECIAL; }
|
static inline int pte_special(pte_t pte) { return pte_val(pte) & _PAGE_SPECIAL; }
|
||||||
static inline int pte_none(pte_t pte) { return (pte_val(pte) & ~_PTE_NONE_MASK) == 0; }
|
static inline int pte_none(pte_t pte) { return (pte_val(pte) & ~_PTE_NONE_MASK) == 0; }
|
||||||
static inline pgprot_t pte_pgprot(pte_t pte) { return __pgprot(pte_val(pte) & PAGE_PROT_BITS); }
|
static inline pgprot_t pte_pgprot(pte_t pte) { return __pgprot(pte_val(pte) & PAGE_PROT_BITS); }
|
||||||
|
|
|
@ -38,7 +38,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define _PAGE_GUARDED 0x001 /* G: page is guarded from prefetch */
|
#define _PAGE_GUARDED 0x001 /* G: page is guarded from prefetch */
|
||||||
#define _PAGE_FILE 0x001 /* when !present: nonlinear file mapping */
|
|
||||||
#define _PAGE_PRESENT 0x002 /* software: PTE contains a translation */
|
#define _PAGE_PRESENT 0x002 /* software: PTE contains a translation */
|
||||||
#define _PAGE_NO_CACHE 0x004 /* I: caching is inhibited */
|
#define _PAGE_NO_CACHE 0x004 /* I: caching is inhibited */
|
||||||
#define _PAGE_WRITETHRU 0x008 /* W: caching is write-through */
|
#define _PAGE_WRITETHRU 0x008 /* W: caching is write-through */
|
||||||
|
|
|
@ -44,9 +44,6 @@
|
||||||
* - PRESENT *must* be in the bottom three bits because swap cache
|
* - PRESENT *must* be in the bottom three bits because swap cache
|
||||||
* entries use the top 29 bits for TLB2.
|
* entries use the top 29 bits for TLB2.
|
||||||
*
|
*
|
||||||
* - FILE *must* be in the bottom three bits because swap cache
|
|
||||||
* entries use the top 29 bits for TLB2.
|
|
||||||
*
|
|
||||||
* - CACHE COHERENT bit (M) has no effect on original PPC440 cores,
|
* - CACHE COHERENT bit (M) has no effect on original PPC440 cores,
|
||||||
* because it doesn't support SMP. However, some later 460 variants
|
* because it doesn't support SMP. However, some later 460 variants
|
||||||
* have -some- form of SMP support and so I keep the bit there for
|
* have -some- form of SMP support and so I keep the bit there for
|
||||||
|
@ -68,7 +65,6 @@
|
||||||
*
|
*
|
||||||
* There are three protection bits available for SWAP entry:
|
* There are three protection bits available for SWAP entry:
|
||||||
* _PAGE_PRESENT
|
* _PAGE_PRESENT
|
||||||
* _PAGE_FILE
|
|
||||||
* _PAGE_HASHPTE (if HW has)
|
* _PAGE_HASHPTE (if HW has)
|
||||||
*
|
*
|
||||||
* So those three bits have to be inside of 0-2nd LSB of PTE.
|
* So those three bits have to be inside of 0-2nd LSB of PTE.
|
||||||
|
@ -77,7 +73,6 @@
|
||||||
|
|
||||||
#define _PAGE_PRESENT 0x00000001 /* S: PTE valid */
|
#define _PAGE_PRESENT 0x00000001 /* S: PTE valid */
|
||||||
#define _PAGE_RW 0x00000002 /* S: Write permission */
|
#define _PAGE_RW 0x00000002 /* S: Write permission */
|
||||||
#define _PAGE_FILE 0x00000004 /* S: nonlinear file mapping */
|
|
||||||
#define _PAGE_EXEC 0x00000004 /* H: Execute permission */
|
#define _PAGE_EXEC 0x00000004 /* H: Execute permission */
|
||||||
#define _PAGE_ACCESSED 0x00000008 /* S: Page referenced */
|
#define _PAGE_ACCESSED 0x00000008 /* S: Page referenced */
|
||||||
#define _PAGE_DIRTY 0x00000010 /* S: Page dirty */
|
#define _PAGE_DIRTY 0x00000010 /* S: Page dirty */
|
||||||
|
|
|
@ -29,7 +29,6 @@
|
||||||
|
|
||||||
/* Definitions for 8xx embedded chips. */
|
/* Definitions for 8xx embedded chips. */
|
||||||
#define _PAGE_PRESENT 0x0001 /* Page is valid */
|
#define _PAGE_PRESENT 0x0001 /* Page is valid */
|
||||||
#define _PAGE_FILE 0x0002 /* when !present: nonlinear file mapping */
|
|
||||||
#define _PAGE_NO_CACHE 0x0002 /* I: cache inhibit */
|
#define _PAGE_NO_CACHE 0x0002 /* I: cache inhibit */
|
||||||
#define _PAGE_SHARED 0x0004 /* No ASID (context) compare */
|
#define _PAGE_SHARED 0x0004 /* No ASID (context) compare */
|
||||||
#define _PAGE_SPECIAL 0x0008 /* SW entry, forced to 0 by the TLB miss */
|
#define _PAGE_SPECIAL 0x0008 /* SW entry, forced to 0 by the TLB miss */
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
/* Architected bits */
|
/* Architected bits */
|
||||||
#define _PAGE_PRESENT 0x000001 /* software: pte contains a translation */
|
#define _PAGE_PRESENT 0x000001 /* software: pte contains a translation */
|
||||||
#define _PAGE_FILE 0x000002 /* (!present only) software: pte holds file offset */
|
|
||||||
#define _PAGE_SW1 0x000002
|
#define _PAGE_SW1 0x000002
|
||||||
#define _PAGE_BAP_SR 0x000004
|
#define _PAGE_BAP_SR 0x000004
|
||||||
#define _PAGE_BAP_UR 0x000008
|
#define _PAGE_BAP_UR 0x000008
|
||||||
|
|
|
@ -13,14 +13,11 @@
|
||||||
- PRESENT *must* be in the bottom three bits because swap cache
|
- PRESENT *must* be in the bottom three bits because swap cache
|
||||||
entries use the top 29 bits.
|
entries use the top 29 bits.
|
||||||
|
|
||||||
- FILE *must* be in the bottom three bits because swap cache
|
|
||||||
entries use the top 29 bits.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Definitions for FSL Book-E Cores */
|
/* Definitions for FSL Book-E Cores */
|
||||||
#define _PAGE_PRESENT 0x00001 /* S: PTE contains a translation */
|
#define _PAGE_PRESENT 0x00001 /* S: PTE contains a translation */
|
||||||
#define _PAGE_USER 0x00002 /* S: User page (maps to UR) */
|
#define _PAGE_USER 0x00002 /* S: User page (maps to UR) */
|
||||||
#define _PAGE_FILE 0x00002 /* S: when !present: nonlinear file mapping */
|
|
||||||
#define _PAGE_RW 0x00004 /* S: Write permission (SW) */
|
#define _PAGE_RW 0x00004 /* S: Write permission (SW) */
|
||||||
#define _PAGE_DIRTY 0x00008 /* S: Page dirty */
|
#define _PAGE_DIRTY 0x00008 /* S: Page dirty */
|
||||||
#define _PAGE_EXEC 0x00010 /* H: SX permission */
|
#define _PAGE_EXEC 0x00010 /* H: SX permission */
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
|
|
||||||
#define _PAGE_PRESENT 0x001 /* software: pte contains a translation */
|
#define _PAGE_PRESENT 0x001 /* software: pte contains a translation */
|
||||||
#define _PAGE_HASHPTE 0x002 /* hash_page has made an HPTE for this pte */
|
#define _PAGE_HASHPTE 0x002 /* hash_page has made an HPTE for this pte */
|
||||||
#define _PAGE_FILE 0x004 /* when !present: nonlinear file mapping */
|
|
||||||
#define _PAGE_USER 0x004 /* usermode access allowed */
|
#define _PAGE_USER 0x004 /* usermode access allowed */
|
||||||
#define _PAGE_GUARDED 0x008 /* G: prohibit speculative access */
|
#define _PAGE_GUARDED 0x008 /* G: prohibit speculative access */
|
||||||
#define _PAGE_COHERENT 0x010 /* M: enforce memory coherence (SMP systems) */
|
#define _PAGE_COHERENT 0x010 /* M: enforce memory coherence (SMP systems) */
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
*/
|
*/
|
||||||
#define _PAGE_PRESENT 0x0001 /* software: pte contains a translation */
|
#define _PAGE_PRESENT 0x0001 /* software: pte contains a translation */
|
||||||
#define _PAGE_USER 0x0002 /* matches one of the PP bits */
|
#define _PAGE_USER 0x0002 /* matches one of the PP bits */
|
||||||
#define _PAGE_FILE 0x0002 /* (!present only) software: pte holds file offset */
|
|
||||||
#define _PAGE_EXEC 0x0004 /* No execute on POWER4 and newer (we invert) */
|
#define _PAGE_EXEC 0x0004 /* No execute on POWER4 and newer (we invert) */
|
||||||
#define _PAGE_GUARDED 0x0008
|
#define _PAGE_GUARDED 0x0008
|
||||||
/* We can derive Memory coherence from _PAGE_NO_CACHE */
|
/* We can derive Memory coherence from _PAGE_NO_CACHE */
|
||||||
|
|
|
@ -782,7 +782,7 @@ pmd_t pfn_pmd(unsigned long pfn, pgprot_t pgprot)
|
||||||
{
|
{
|
||||||
pmd_t pmd;
|
pmd_t pmd;
|
||||||
/*
|
/*
|
||||||
* For a valid pte, we would have _PAGE_PRESENT or _PAGE_FILE always
|
* For a valid pte, we would have _PAGE_PRESENT always
|
||||||
* set. We use this to check THP page at pmd level.
|
* set. We use this to check THP page at pmd level.
|
||||||
* leaf pte for huge page, bottom two bits != 00
|
* leaf pte for huge page, bottom two bits != 00
|
||||||
*/
|
*/
|
||||||
|
|
Загрузка…
Ссылка в новой задаче