Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Hitoshi Yamamoto <hitoshiy@linux-m32r.org>
Signed-off-by: Hirokazu Takata <takata@linux-m32r.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Hirokazu Takata and committed by
Linus Torvalds
23c9bbba 0d4f6468

+3 -3
+2 -2
include/asm-m32r/pgtable-2level.h
··· 71 71 #define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) 72 72 73 73 #define PTE_FILE_MAX_BITS 29 74 - #define pte_to_pgoff(pte) (((pte_val(pte) >> 2) & 0xef) | (((pte_val(pte) >> 10)) << 7)) 75 - #define pgoff_to_pte(off) ((pte_t) { (((off) & 0xef) << 2) | (((off) >> 7) << 10) | _PAGE_FILE }) 74 + #define pte_to_pgoff(pte) (((pte_val(pte) >> 2) & 0x7f) | (((pte_val(pte) >> 10)) << 7)) 75 + #define pgoff_to_pte(off) ((pte_t) { (((off) & 0x7f) << 2) | (((off) >> 7) << 10) | _PAGE_FILE }) 76 76 77 77 #endif /* __KERNEL__ */ 78 78 #endif /* _ASM_M32R_PGTABLE_2LEVEL_H */
+1 -1
include/asm-m32r/pgtable.h
··· 366 366 #define pte_unmap_nested(pte) do { } while (0) 367 367 368 368 /* Encode and de-code a swap entry */ 369 - #define __swp_type(x) (((x).val >> 2) & 0x3f) 369 + #define __swp_type(x) (((x).val >> 2) & 0x1f) 370 370 #define __swp_offset(x) ((x).val >> 10) 371 371 #define __swp_entry(type, offset) \ 372 372 ((swp_entry_t) { ((type) << 2) | ((offset) << 10) })