Commit 23c9bbba authored by Hirokazu Takata's avatar Hirokazu Takata Committed by Linus Torvalds

m32r: fix pte_to_pgoff(), pgoff_to_pte() and __swp_type() macros

This patch is required to handle file-mapped or swapped-out pages
correctly.

- Fix pte_to_pgoff() and pgoff_to_pte() macros not to include
  _PAGE_PROTNONE bit of PTE.
  Mask value for { ACCESSED, N, (R, W, X), L, G } is not 0xef but 0x7f.
- Fix __swp_type() macro for MAX_SWAPFILES_SHIFT(=5), which is defined
  in include/linux/swap.h.

* M32R TLB format

     [0]    [1:19]           [20:23]       [24:31]
     +-----------------------+----+-------------+
     |          VPN          |0000|    ASID     |
     +-----------------------+----+-------------+
     +-+---------------------+----+-+---+-+-+-+-+
     |0         PPN          |0000|N|AC |L|G|V| |
     +-+---------------------+----+-+---+-+-+-+-+
                                ||   RWX     | |
* software bits in PTE          ||           | +-- _PAGE_FILE | _PAGE_DIRTY
                                ||           +---- _PAGE_PRESENT
                                |+---------------- _PAGE_ACCESSED
                                +----------------- _PAGE_PROTNONE
Signed-off-by: default avatarHitoshi Yamamoto <hitoshiy@linux-m32r.org>
Signed-off-by: default avatarHirokazu Takata <takata@linux-m32r.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 0d4f6468
...@@ -71,8 +71,8 @@ static inline pmd_t *pmd_offset(pgd_t * dir, unsigned long address) ...@@ -71,8 +71,8 @@ static inline pmd_t *pmd_offset(pgd_t * dir, unsigned long address)
#define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) #define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
#define PTE_FILE_MAX_BITS 29 #define PTE_FILE_MAX_BITS 29
#define pte_to_pgoff(pte) (((pte_val(pte) >> 2) & 0xef) | (((pte_val(pte) >> 10)) << 7)) #define pte_to_pgoff(pte) (((pte_val(pte) >> 2) & 0x7f) | (((pte_val(pte) >> 10)) << 7))
#define pgoff_to_pte(off) ((pte_t) { (((off) & 0xef) << 2) | (((off) >> 7) << 10) | _PAGE_FILE }) #define pgoff_to_pte(off) ((pte_t) { (((off) & 0x7f) << 2) | (((off) >> 7) << 10) | _PAGE_FILE })
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
#endif /* _ASM_M32R_PGTABLE_2LEVEL_H */ #endif /* _ASM_M32R_PGTABLE_2LEVEL_H */
...@@ -366,7 +366,7 @@ static inline void pmd_set(pmd_t * pmdp, pte_t * ptep) ...@@ -366,7 +366,7 @@ static inline void pmd_set(pmd_t * pmdp, pte_t * ptep)
#define pte_unmap_nested(pte) do { } while (0) #define pte_unmap_nested(pte) do { } while (0)
/* Encode and de-code a swap entry */ /* Encode and de-code a swap entry */
#define __swp_type(x) (((x).val >> 2) & 0x3f) #define __swp_type(x) (((x).val >> 2) & 0x1f)
#define __swp_offset(x) ((x).val >> 10) #define __swp_offset(x) ((x).val >> 10)
#define __swp_entry(type, offset) \ #define __swp_entry(type, offset) \
((swp_entry_t) { ((type) << 2) | ((offset) << 10) }) ((swp_entry_t) { ((type) << 2) | ((offset) << 10) })
......
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