mm: remove non-linear mess
Subsystems (53)
cover mm: remove non-linear mess
We have remap_file_pages(2) emulation in -mm tree for few release cycles and we plan to have it mainline in v3.20. This patchset removes rest of VM_NONLINEAR infrastructure.
Patches 1-8 take care about generic code. They are pretty straight-forward and can be applied without other of patches.
Rest patches removes pte_file()-related stuff from architecture-specific code. It usually frees up one bit in non-present pte. I've tried to reuse that bit for swap offset, where I was able to figure out how to do that.
For obvious reason I cannot test all that arch-specific code and would like to see acks from maintainers.
In total, remap_file_pages(2) required about 1.4K lines of not-so-trivial kernel code. That's too much for functionality nobody uses.
git://git.kernel.org/pub/scm/linux/kernel/git/kas/linux.git remap_file_pages
Kirill A. Shutemov (38):
mm: drop support of non-linear mapping from unmap/zap codepath
mm: drop support of non-linear mapping from fault codepath
mm: drop vm_ops->remap_pages and generic_file_remap_pages() stub
proc: drop handling non-linear mappings
rmap: drop support of non-linear mappings
mm: replace vma->sharead.linear with vma->shared
mm: remove rest usage of VM_NONLINEAR and pte_file()
asm-generic: drop unused pte_file* helpers
alpha: drop _PAGE_FILE and pte_file()-related helpers
arc: drop _PAGE_FILE and pte_file()-related helpers
arm64: drop PTE_FILE and pte_file()-related helpers
arm: drop L_PTE_FILE and pte_file()-related helpers
avr32: drop _PAGE_FILE and pte_file()-related helpers
blackfin: drop pte_file()
c6x: drop pte_file()
cris: drop _PAGE_FILE and pte_file()-related helpers
frv: drop _PAGE_FILE and pte_file()-related helpers
hexagon: drop _PAGE_FILE and pte_file()-related helpers
ia64: drop _PAGE_FILE and pte_file()-related helpers
m32r: drop _PAGE_FILE and pte_file()-related helpers
m68k: drop _PAGE_FILE and pte_file()-related helpers
metag: drop _PAGE_FILE and pte_file()-related helpers
microblaze: drop _PAGE_FILE and pte_file()-related helpers
mips: drop _PAGE_FILE and pte_file()-related helpers
mn10300: drop _PAGE_FILE and pte_file()-related helpers
nios2: drop _PAGE_FILE and pte_file()-related helpers
openrisc: drop _PAGE_FILE and pte_file()-related helpers
parisc: drop _PAGE_FILE and pte_file()-related helpers
powerpc: drop _PAGE_FILE and pte_file()-related helpers
s390: drop pte_file()-related helpers
score: drop _PAGE_FILE and pte_file()-related helpers
sh: drop _PAGE_FILE and pte_file()-related helpers
sparc: drop pte_file()-related helpers
tile: drop pte_file()-related helpers
um: drop _PAGE_FILE and pte_file()-related helpers
unicore32: drop pte_file()-related helpers
x86: drop _PAGE_FILE and pte_file()-related helpers
xtensa: drop _PAGE_FILE and pte_file()-related helpers
Documentation/cachetlb.txt | 8 +- arch/alpha/include/asm/pgtable.h | 7 - arch/arc/include/asm/pgtable.h | 15 +- arch/arm/include/asm/pgtable-2level.h | 1 - arch/arm/include/asm/pgtable-3level.h | 1 - arch/arm/include/asm/pgtable-nommu.h | 2 - arch/arm/include/asm/pgtable.h | 20 +-- arch/arm/mm/proc-macros.S | 2 +- arch/arm64/include/asm/pgtable.h | 22 +-- arch/avr32/include/asm/pgtable.h | 25 ---- arch/blackfin/include/asm/pgtable.h | 5 - arch/c6x/include/asm/pgtable.h | 5 - arch/cris/include/arch-v10/arch/mmu.h | 3 - arch/cris/include/arch-v32/arch/mmu.h | 3 - arch/cris/include/asm/pgtable.h | 4 - arch/frv/include/asm/pgtable.h | 27 +--- arch/hexagon/include/asm/pgtable.h | 60 ++------ arch/ia64/include/asm/pgtable.h | 25 +--- arch/m32r/include/asm/pgtable-2level.h | 4 - arch/m32r/include/asm/pgtable.h | 11 -- arch/m68k/include/asm/mcf_pgtable.h | 23 +-- arch/m68k/include/asm/motorola_pgtable.h | 15 -- arch/m68k/include/asm/pgtable_no.h | 2 - arch/m68k/include/asm/sun3_pgtable.h | 15 -- arch/metag/include/asm/pgtable.h | 6 - arch/microblaze/include/asm/pgtable.h | 11 -- arch/mips/include/asm/pgtable-32.h | 36 ----- arch/mips/include/asm/pgtable-64.h | 9 -- arch/mips/include/asm/pgtable-bits.h | 9 -- arch/mips/include/asm/pgtable.h | 2 - arch/mn10300/include/asm/pgtable.h | 17 +-- arch/nios2/include/asm/pgtable-bits.h | 1 - arch/nios2/include/asm/pgtable.h | 10 +- arch/openrisc/include/asm/pgtable.h | 8 - arch/openrisc/kernel/head.S | 5 - arch/parisc/include/asm/pgtable.h | 10 -- arch/powerpc/include/asm/pgtable-ppc32.h | 9 +- arch/powerpc/include/asm/pgtable-ppc64.h | 5 +- arch/powerpc/include/asm/pgtable.h | 1 - arch/powerpc/include/asm/pte-40x.h | 1 - arch/powerpc/include/asm/pte-44x.h | 5 - arch/powerpc/include/asm/pte-8xx.h | 1 - arch/powerpc/include/asm/pte-book3e.h | 1 - arch/powerpc/include/asm/pte-fsl-booke.h | 3 - arch/powerpc/include/asm/pte-hash32.h | 1 - arch/powerpc/include/asm/pte-hash64.h | 1 - arch/powerpc/mm/pgtable_64.c | 2 +- arch/s390/include/asm/pgtable.h | 29 +--- arch/score/include/asm/pgtable-bits.h | 1 - arch/score/include/asm/pgtable.h | 18 +-- arch/sh/include/asm/pgtable_32.h | 31 +--- arch/sh/include/asm/pgtable_64.h | 9 +- arch/sparc/include/asm/pgtable_32.h | 24 --- arch/sparc/include/asm/pgtable_64.h | 40 ----- arch/sparc/include/asm/pgtsrmmu.h | 14 +- arch/tile/include/asm/pgtable.h | 11 -- arch/tile/mm/homecache.c | 4 - arch/um/include/asm/pgtable-2level.h | 9 -- arch/um/include/asm/pgtable-3level.h | 20 --- arch/um/include/asm/pgtable.h | 9 -- arch/unicore32/include/asm/pgtable-hwdef.h | 1 - arch/unicore32/include/asm/pgtable.h | 14 -- arch/x86/include/asm/pgtable-2level.h | 38 +---- arch/x86/include/asm/pgtable-3level.h | 12 -- arch/x86/include/asm/pgtable.h | 20 --- arch/x86/include/asm/pgtable_64.h | 6 +- arch/x86/include/asm/pgtable_types.h | 3 - arch/xtensa/include/asm/pgtable.h | 10 -- drivers/gpu/drm/drm_vma_manager.c | 3 +- fs/9p/vfs_file.c | 2 - fs/btrfs/file.c | 1 - fs/ceph/addr.c | 1 - fs/cifs/file.c | 1 - fs/ext4/file.c | 1 - fs/f2fs/file.c | 1 - fs/fuse/file.c | 1 - fs/gfs2/file.c | 1 - fs/inode.c | 1 - fs/nfs/file.c | 1 - fs/nilfs2/file.c | 1 - fs/ocfs2/mmap.c | 1 - fs/proc/task_mmu.c | 16 -- fs/ubifs/file.c | 1 - fs/xfs/xfs_file.c | 1 - include/asm-generic/pgtable.h | 15 -- include/linux/fs.h | 10 +- include/linux/mm.h | 27 +--- include/linux/mm_types.h | 12 +- include/linux/rmap.h | 2 - include/linux/swapops.h | 4 +- kernel/fork.c | 8 +- mm/debug.c | 1 - mm/filemap.c | 1 - mm/filemap_xip.c | 1 - mm/gup.c | 2 +- mm/interval_tree.c | 34 ++--- mm/ksm.c | 2 +- mm/madvise.c | 13 +- mm/memcontrol.c | 4 +- mm/memory.c | 225 +++++++++-------------------- mm/migrate.c | 32 ---- mm/mincore.c | 5 +- mm/mmap.c | 24 +-- mm/mprotect.c | 2 +- mm/mremap.c | 2 - mm/msync.c | 5 +- mm/rmap.c | 225 +---------------------------- mm/shmem.c | 1 - mm/swap.c | 4 +- 109 files changed, 187 insertions(+), 1290 deletions(-)
Signature · 1 line
2.1.3
PATCH 1/38 mm: drop support of non-linear mapping from unmap/zap codepath
We don't create non-linear mappings anymore. Let's drop code which handles them on unmap/zap.
--- include/linux/mm.h | 1 - mm/madvise.c | 9 +----- mm/memory.c | 82 ++++++++++++++---------------------------------------- 3 files changed, 22 insertions(+), 70 deletions(-)
include/linux/mm.h +0 -1
@@ -1119,7 +1119,6 @@ extern void user_shm_unlock(size_t, struct user_struct *);* Parameter block passed down to zap_pte_range in exceptional cases. */ struct zap_details { -struct vm_area_struct *nonlinear_vma;/* Check page->index if set */ struct address_space *check_mapping;/* Check page->mapping if set */ pgoff_t first_index;/* Lowest page->index to unmap */ pgoff_t last_index;/* Highest page->index to unmap */
mm/madvise.c +1 -8
@@ -419,14 +419,7 @@ static long madvise_dontneed(struct vm_area_struct *vma,if (vma->vm_flags & (VM_LOCKED |VM_HUGETLB |VM_PFNMAP ))return -EINVAL ; -if (unlikely (vma->vm_flags &VM_NONLINEAR )) { -struct zap_details details = { - .nonlinear_vma = vma, - .last_index =ULONG_MAX , - }; -zap_page_range (vma, start, end - start, &details); - }else -zap_page_range (vma, start, end - start,NULL ); +zap_page_range (vma, start, end - start,NULL );return 0 ; }
mm/memory.c +21 -61
149 lines not on this page · raw message
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 2/38 mm: drop support of non-linear mapping from fault codepath
In reply to Kirill A. ShutemovWe don't create non-linear mappings anymore. Let's drop code which handles them on page fault.
--- include/linux/mm.h | 16 ++++++-------- mm/memory.c | 65 ++++++++---------------------------------------------- 2 files changed, 16 insertions(+), 65 deletions(-)
include/linux/mm.h +7 -9
@@ -206,21 +206,19 @@ extern unsigned int kobjsize(const void *objp);extern pgprot_t protection_map[16 ];#define FAULT_FLAG_WRITE 0x01/* Fault was a write access */ -#define FAULT_FLAG_NONLINEAR 0x02/* Fault was via a nonlinear mapping */ -#define FAULT_FLAG_MKWRITE 0x04/* Fault was mkwrite of existing pte */ -#define FAULT_FLAG_ALLOW_RETRY 0x08/* Retry fault if blocking */ -#define FAULT_FLAG_RETRY_NOWAIT 0x10/* Don't drop mmap_sem and wait when retrying */ -#define FAULT_FLAG_KILLABLE 0x20/* The fault task is in SIGKILL killable region */ -#define FAULT_FLAG_TRIED 0x40/* second try */ -#define FAULT_FLAG_USER 0x80/* The fault originated in userspace */ +#define FAULT_FLAG_MKWRITE 0x02/* Fault was mkwrite of existing pte */ +#define FAULT_FLAG_ALLOW_RETRY 0x04/* Retry fault if blocking */ +#define FAULT_FLAG_RETRY_NOWAIT 0x08/* Don't drop mmap_sem and wait when retrying */ +#define FAULT_FLAG_KILLABLE 0x10/* The fault task is in SIGKILL killable region */ +#define FAULT_FLAG_TRIED 0x20/* Second try */ +#define FAULT_FLAG_USER 0x40/* The fault originated in userspace */ /* * vm_fault is filled by the the pagefault handler and passed to the vma's * ->fault function. The vma's ->fault is responsible for returning a bitmask * of VM_FAULT_xxx flags that give details about how the fault was handled. * -* pgoff should be used in favour of virtual_address, if possible. If pgoff -* is used, one may implement ->remap_pages to get nonlinear mapping support. +* pgoff should be used in favour of virtual_address, if possible. */ struct vm_fault {unsigned int flags;/* FAULT_FLAG_xxx flags */
mm/memory.c +9 -56
105 lines not on this page · raw message
Signature · 1 line
2.1.3
PATCH 3/38 mm: drop vm_ops->remap_pages and generic_file_remap_pages() stub
In reply to Kirill A. ShutemovNobody uses it anymore.
--- fs/9p/vfs_file.c | 2 -- fs/btrfs/file.c | 1 - fs/ceph/addr.c | 1 - fs/cifs/file.c | 1 - fs/ext4/file.c | 1 - fs/f2fs/file.c | 1 - fs/fuse/file.c | 1 - fs/gfs2/file.c | 1 - fs/nfs/file.c | 1 - fs/nilfs2/file.c | 1 - fs/ocfs2/mmap.c | 1 - fs/ubifs/file.c | 1 - fs/xfs/xfs_file.c | 1 - include/linux/fs.h | 6 ------ include/linux/mm.h | 3 --- mm/filemap.c | 1 - mm/filemap_xip.c | 1 - mm/shmem.c | 1 - 18 files changed, 26 deletions(-)
fs/9p/vfs_file.c +0 -2
@@ -831,7 +831,6 @@ static const struct vm_operations_struct v9fs_file_vm_ops = { .fault = filemap_fault, .map_pages = filemap_map_pages, .page_mkwrite = v9fs_vm_page_mkwrite, - .remap_pages = generic_file_remap_pages, };static const struct vm_operations_struct v9fs_mmap_file_vm_ops = {
@@ -839,7 +838,6 @@ static const struct vm_operations_struct v9fs_mmap_file_vm_ops = { .fault = filemap_fault, .map_pages = filemap_map_pages, .page_mkwrite = v9fs_vm_page_mkwrite, - .remap_pages = generic_file_remap_pages, };
fs/btrfs/file.c +0 -1
@@ -2081,7 +2081,6 @@ static const struct vm_operations_struct btrfs_file_vm_ops = { .fault = filemap_fault, .map_pages = filemap_map_pages, .page_mkwrite = btrfs_page_mkwrite, - .remap_pages = generic_file_remap_pages, };static int btrfs_file_mmap (struct file *filp,struct vm_area_struct *vma)
fs/ceph/addr.c +0 -1
@@ -1569,7 +1569,6 @@ out:static struct vm_operations_struct ceph_vmops = { .fault = ceph_filemap_fault, .page_mkwrite = ceph_page_mkwrite, - .remap_pages = generic_file_remap_pages, };int ceph_mmap (struct file *file,struct vm_area_struct *vma)
fs/cifs/file.c +0 -1
@@ -3244,7 +3244,6 @@ static struct vm_operations_struct cifs_file_vm_ops = { .fault = filemap_fault, .map_pages = filemap_map_pages, .page_mkwrite = cifs_page_mkwrite, - .remap_pages = generic_file_remap_pages, };int cifs_file_strict_mmap (struct file *file,struct vm_area_struct *vma)
fs/ext4/file.c +0 -1
@@ -195,7 +195,6 @@ static const struct vm_operations_struct ext4_file_vm_ops = { .fault = filemap_fault, .map_pages = filemap_map_pages, .page_mkwrite = ext4_page_mkwrite, - .remap_pages = generic_file_remap_pages, };static int ext4_file_mmap (struct file *file,struct vm_area_struct *vma)
fs/f2fs/file.c +0 -1
@@ -92,7 +92,6 @@ static const struct vm_operations_struct f2fs_file_vm_ops = { .fault = filemap_fault, .map_pages = filemap_map_pages, .page_mkwrite = f2fs_vm_page_mkwrite, - .remap_pages = generic_file_remap_pages, };static int get_parent_ino (struct inode *inode,nid_t *pino)
fs/fuse/file.c +0 -1
@@ -2062,7 +2062,6 @@ static const struct vm_operations_struct fuse_file_vm_ops = { .fault = filemap_fault, .map_pages = filemap_map_pages, .page_mkwrite = fuse_page_mkwrite, - .remap_pages = generic_file_remap_pages, };static int fuse_file_mmap (struct file *file,struct vm_area_struct *vma)
fs/gfs2/file.c +0 -1
@@ -498,7 +498,6 @@ static const struct vm_operations_struct gfs2_vm_ops = { .fault = filemap_fault, .map_pages = filemap_map_pages, .page_mkwrite = gfs2_page_mkwrite, - .remap_pages = generic_file_remap_pages, };/**
fs/nfs/file.c +0 -1
@@ -646,7 +646,6 @@ static const struct vm_operations_struct nfs_file_vm_ops = { .fault = filemap_fault, .map_pages = filemap_map_pages, .page_mkwrite = nfs_vm_page_mkwrite, - .remap_pages = generic_file_remap_pages, };static int nfs_need_sync_write (struct file *filp,struct inode *inode)
fs/nilfs2/file.c +0 -1
@@ -128,7 +128,6 @@ static const struct vm_operations_struct nilfs_file_vm_ops = { .fault = filemap_fault, .map_pages = filemap_map_pages, .page_mkwrite = nilfs_page_mkwrite, - .remap_pages = generic_file_remap_pages, };static int nilfs_file_mmap (struct file *file,struct vm_area_struct *vma)
fs/ocfs2/mmap.c +0 -1
@@ -173,7 +173,6 @@ out:static const struct vm_operations_struct ocfs2_file_vm_ops = { .fault = ocfs2_fault, .page_mkwrite = ocfs2_page_mkwrite, - .remap_pages = generic_file_remap_pages, };int ocfs2_mmap (struct file *file,struct vm_area_struct *vma)
fs/ubifs/file.c +0 -1
@@ -1536,7 +1536,6 @@ static const struct vm_operations_struct ubifs_file_vm_ops = { .fault = filemap_fault, .map_pages = filemap_map_pages, .page_mkwrite = ubifs_vm_page_mkwrite, - .remap_pages = generic_file_remap_pages, };static int ubifs_file_mmap (struct file *file,struct vm_area_struct *vma)
fs/xfs/xfs_file.c +0 -1
@@ -1384,5 +1384,4 @@ static const struct vm_operations_struct xfs_file_vm_ops = { .fault = filemap_fault, .map_pages = filemap_map_pages, .page_mkwrite = xfs_vm_page_mkwrite, - .remap_pages = generic_file_remap_pages, };
include/linux/fs.h +0 -6
@@ -2481,12 +2481,6 @@ extern int sb_min_blocksize(struct super_block *, int);extern int generic_file_mmap (struct file *,struct vm_area_struct *);extern int generic_file_readonly_mmap (struct file *,struct vm_area_struct *); -static inline int generic_file_remap_pages (struct vm_area_struct *vma, -unsigned long addr,unsigned long size,pgoff_t pgoff) -{ -BUG (); -return 0 ; -}int generic_write_checks (struct file *file,loff_t *pos,size_t *count,int isblk);extern ssize_t generic_file_read_iter (struct kiocb *,struct iov_iter *);extern ssize_t __generic_file_write_iter (struct kiocb *,struct iov_iter *);
include/linux/mm.h +0 -3
@@ -285,9 +285,6 @@ struct vm_operations_struct {struct mempolicy *(*get_policy)(struct vm_area_struct *vma,unsigned long addr);#endif -/* called by sys_remap_file_pages() to populate non-linear mapping */ -int (*remap_pages)(struct vm_area_struct *vma,unsigned long addr, -unsigned long size,pgoff_t pgoff); };struct mmu_gather ;
mm/filemap.c +0 -1
@@ -2091,7 +2091,6 @@ const struct vm_operations_struct generic_file_vm_ops = { .fault = filemap_fault, .map_pages = filemap_map_pages, .page_mkwrite = filemap_page_mkwrite, - .remap_pages = generic_file_remap_pages, };/* This is used for a general mmap of a disk file */
mm/filemap_xip.c +0 -1
@@ -301,7 +301,6 @@ out:static const struct vm_operations_struct xip_file_vm_ops = { .fault = xip_file_fault, .page_mkwrite = filemap_page_mkwrite, - .remap_pages = generic_file_remap_pages, };int xip_file_mmap (struct file * file,struct vm_area_struct * vma)
mm/shmem.c +0 -1
@@ -3201,7 +3201,6 @@ static const struct vm_operations_struct shmem_vm_ops = { .set_policy = shmem_set_policy, .get_policy = shmem_get_policy,#endif - .remap_pages = generic_file_remap_pages, }; static struct dentry *shmem_mount(struct file_system_type *fs_type,
Signature · 1 line
2.1.3
PATCH 4/38 proc: drop handling non-linear mappings
In reply to Kirill A. ShutemovWe have to handle non-linear mappings for /proc/PID/{smaps,clear_refs} which is unused now. Let's drop it.
--- fs/proc/task_mmu.c | 16 ---------------- 1 file changed, 16 deletions(-)
fs/proc/task_mmu.c +0 -16
@@ -443,7 +443,6 @@ struct mem_size_stats {unsigned long anonymous;unsigned long anonymous_thp;unsigned long swap; -unsigned long nonlinear;u64 pss; };
@@ -484,7 +483,6 @@ static void smaps_pte_entry(pte_t *pte, unsigned long addr, {struct mem_size_stats *mss = walk->private;struct vm_area_struct *vma = mss->vma; -pgoff_t pgoff =linear_page_index (vma, addr);struct page *page =NULL ;if (pte_present (*pte)) {
@@ -496,17 +494,10 @@ static void smaps_pte_entry(pte_t *pte, unsigned long addr, mss->swap +=PAGE_SIZE ; else if (is_migration_entry(swpent)) page =migration_entry_to_page (swpent); - }else if (pte_file (*pte)) { -if (pte_to_pgoff (*pte) != pgoff) - mss->nonlinear +=PAGE_SIZE ; }if (!page)return ; - -if (page->index != pgoff) - mss->nonlinear +=PAGE_SIZE ; -smaps_account (mss, page,PAGE_SIZE ,pte_young (*pte),pte_dirty (*pte)); }
@@ -596,7 +587,6 @@ static void show_smap_vma_flags(struct seq_file *m, struct vm_area_struct *vma) [ilog2(VM_ACCOUNT)] = "ac", [ilog2(VM_NORESERVE)] = "nr", [ilog2(VM_HUGETLB)] = "ht", - [ilog2(VM_NONLINEAR)] = "nl", [ilog2(VM_ARCH_1)] = "ar", [ilog2 (VM_DONTDUMP )] ="dd" , #ifdef CONFIG_MEM_SOFT_DIRTY
@@ -668,10 +658,6 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) (vma->vm_flags &VM_LOCKED ) ? (unsigned long)(mss.pss >> (10 + PSS_SHIFT)) : 0); -if (vma->vm_flags &VM_NONLINEAR ) -seq_printf (m,"Nonlinear: %8lu kB\n" , - mss.nonlinear >>10 ); -show_smap_vma_flags (m, vma);m_cache_vma (m, vma);return 0 ;
@@ -772,8 +758,6 @@ static inline void clear_soft_dirty(struct vm_area_struct *vma, ptent =pte_clear_flags (ptent, _PAGE_SOFT_DIRTY); }else if (is_swap_pte (ptent)) { ptent =pte_swp_clear_soft_dirty (ptent); - }else if (pte_file (ptent)) { - ptent =pte_file_clear_soft_dirty (ptent); }set_pte_at (vma->vm_mm, addr, pte, ptent);
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 5/38 rmap: drop support of non-linear mappings
In reply to Kirill A. ShutemovWe don't create non-linear mappings anymore. Let's drop code which handles them in rmap.
--- Documentation/cachetlb.txt | 8 +- fs/inode.c | 1 - include/linux/fs.h | 4 +- include/linux/mm.h | 6 -- include/linux/mm_types.h | 4 +- include/linux/rmap.h | 2 - kernel/fork.c | 8 +- mm/migrate.c | 32 ------- mm/mmap.c | 24 ++--- mm/rmap.c | 225 +-------------------------------------------- mm/swap.c | 4 +- 11 files changed, 18 insertions(+), 300 deletions(-)
Documentation/cachetlb.txt +4 -4
@@ -317,10 +317,10 @@ maps this page at its virtual address. about doing this. The idea is, first at flush_dcache_page() time, if - page->mapping->i_mmap is an empty tree and ->i_mmap_nonlinear - an empty list, just mark the architecture private page flag bit. - Later, in update_mmu_cache(), a check is made of this flag bit, - and if set the flush is done and the flag bit is cleared. + page->mapping->i_mmap is an empty tree, just mark the architecture + private page flag bit. Later, in update_mmu_cache(), a check is + made of this flag bit, and if set the flush is done and the flag + bit is cleared. IMPORTANT NOTE: It is often important, if you defer the flush, that the actual flush occurs on the same CPU
fs/inode.c +0 -1
@@ -355,7 +355,6 @@ void address_space_init_once(struct address_space *mapping)INIT_LIST_HEAD (&mapping->private_list);spin_lock_init (&mapping->private_lock); mapping->i_mmap =RB_ROOT ; -INIT_LIST_HEAD (&mapping->i_mmap_nonlinear); }EXPORT_SYMBOL (address_space_init_once);
include/linux/fs.h +1 -3
@@ -401,7 +401,6 @@ struct address_space {spinlock_t tree_lock;/* and lock protecting it */ atomic_t i_mmap_writable;/* count VM_SHARED mappings */ struct rb_root i_mmap;/* tree of private and shared mappings */ -struct list_head i_mmap_nonlinear;/*list VM_NONLINEAR mappings */ struct rw_semaphore i_mmap_rwsem;/* protect tree, count, list */ /* Protected by tree_lock together with the radix tree */ unsigned long nrpages;/* number of total pages */
@@ -493,8 +492,7 @@ static inline void i_mmap_unlock_read(struct address_space *mapping)*/ static inline int mapping_mapped (struct address_space *mapping) { -return !RB_EMPTY_ROOT (&mapping->i_mmap) || - !list_empty (&mapping->i_mmap_nonlinear); +return !RB_EMPTY_ROOT (&mapping->i_mmap); }/*
include/linux/mm.h +0 -6
@@ -1769,12 +1769,6 @@ struct vm_area_struct *vma_interval_tree_iter_next(struct vm_area_struct *node,for (vma =vma_interval_tree_iter_first (root, start, last); \ vma; vma =vma_interval_tree_iter_next (vma, start, last)) -static inline void vma_nonlinear_insert(struct vm_area_struct *vma, -struct list_head *list) -{ -list_add_tail (&vma->shared.nonlinear, list); -} - void anon_vma_interval_tree_insert(struct anon_vma_chain *node, struct rb_root *root); void anon_vma_interval_tree_remove(struct anon_vma_chain *node,
include/linux/mm_types.h +1 -3
@@ -273,15 +273,13 @@ struct vm_area_struct {/* * For areas with an address space and backing store, -* linkage into the address_space->i_mmap interval tree, or -* linkage of vma in the address_space->i_mmap_nonlinear list. +* linkage into the address_space->i_mmap interval tree. */ union {struct {struct rb_node rb;unsigned long rb_subtree_last; } linear; -struct list_head nonlinear; } shared;/*
include/linux/rmap.h +0 -2
@@ -238,7 +238,6 @@ int page_mapped_in_vma(struct page *page, struct vm_area_struct *vma);* arg: passed to rmap_one() and invalid_vma() * rmap_one: executed on each vma where page is mapped * done: for checking traversing termination condition -* file_nonlinear: for handling file nonlinear mapping * anon_lock: for getting anon_lock by optimized way rather than default * invalid_vma: for skipping uninterested vma */
@@ -247,7 +246,6 @@ struct rmap_walk_control {int (*rmap_one)(struct page *page,struct vm_area_struct *vma,unsigned long addr,void *arg);int (*done)(struct page *page); -int (*file_nonlinear)(struct page *,struct address_space *,void *arg);struct anon_vma *(*anon_lock)(struct page *page);bool (*invalid_vma)(struct vm_area_struct *vma,void *arg); };
kernel/fork.c +2 -6
@@ -438,12 +438,8 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)atomic_inc (&mapping->i_mmap_writable);flush_dcache_mmap_lock (mapping);/* insert tmp into the share list, just after mpnt */ -if (unlikely (tmp->vm_flags &VM_NONLINEAR )) -vma_nonlinear_insert (tmp, - &mapping->i_mmap_nonlinear); -else -vma_interval_tree_insert_after (tmp, mpnt, - &mapping->i_mmap); +vma_interval_tree_insert_after (tmp, mpnt, + &mapping->i_mmap);flush_dcache_mmap_unlock (mapping);i_mmap_unlock_write (mapping); }
mm/migrate.c +0 -32
@@ -179,37 +179,6 @@ out: }/* -* Congratulations to trinity for discovering this bug. -* mm/fremap.c's remap_file_pages() accepts any range within a single vma to -* convert that vma to VM_NONLINEAR; and generic_file_remap_pages() will then -* replace the specified range by file ptes throughout (maybe populated after). -* If page migration finds a page within that range, while it's still located -* by vma_interval_tree rather than lost to i_mmap_nonlinear list, no problem: -* zap_pte() clears the temporary migration entry before mmap_sem is dropped. -* But if the migrating page is in a part of the vma outside the range to be -* remapped, then it will not be cleared, and remove_migration_ptes() needs to -* deal with it. Fortunately, this part of the vma is of course still linear, -* so we just need to use linear location on the nonlinear list. -*/ -static int remove_linear_migration_ptes_from_nonlinear (struct page *page, -struct address_space *mapping,void *arg) -{ -struct vm_area_struct *vma; -/* hugetlbfs does not support remap_pages, so no huge pgoff worries */ -pgoff_t pgoff = page->index << (PAGE_CACHE_SHIFT -PAGE_SHIFT ); -unsigned long addr; - -list_for_each_entry (vma, - &mapping->i_mmap_nonlinear, shared.nonlinear) { - - addr = vma->vm_start + ((pgoff - vma->vm_pgoff) <<PAGE_SHIFT ); -if (addr >= vma->vm_start && addr < vma->vm_end) -remove_migration_pte (page, vma, addr, arg); - } -return SWAP_AGAIN ; -} - -/* * Get rid of all migration entries and replace them by * references to the indicated page. */
@@ -218,7 +187,6 @@ static void remove_migration_ptes(struct page *old, struct page *new)struct rmap_walk_control rwc = { .rmap_one = remove_migration_pte, .arg = old, - .file_nonlinear = remove_linear_migration_ptes_from_nonlinear, };rmap_walk (new, &rwc);
mm/mmap.c +7 -17
@@ -243,10 +243,7 @@ static void __remove_shared_vm_struct(struct vm_area_struct *vma,mapping_unmap_writable (mapping);flush_dcache_mmap_lock (mapping); -if (unlikely (vma->vm_flags &VM_NONLINEAR )) -list_del_init (&vma->shared.nonlinear); -else -vma_interval_tree_remove (vma, &mapping->i_mmap); +vma_interval_tree_remove (vma, &mapping->i_mmap);flush_dcache_mmap_unlock (mapping); }
@@ -649,10 +646,7 @@ static void __vma_link_file(struct vm_area_struct *vma)atomic_inc (&mapping->i_mmap_writable);flush_dcache_mmap_lock (mapping); -if (unlikely (vma->vm_flags &VM_NONLINEAR )) -vma_nonlinear_insert (vma, &mapping->i_mmap_nonlinear); -else -vma_interval_tree_insert (vma, &mapping->i_mmap); +vma_interval_tree_insert (vma, &mapping->i_mmap);flush_dcache_mmap_unlock (mapping); } }
@@ -787,14 +781,11 @@ again: remove_next = 1 + (end > next->vm_end);if (file) { mapping = file->f_mapping; -if (!(vma->vm_flags &VM_NONLINEAR )) { - root = &mapping->i_mmap; -uprobe_munmap (vma, vma->vm_start, vma->vm_end); + root = &mapping->i_mmap; +uprobe_munmap (vma, vma->vm_start, vma->vm_end); -if (adjust_next) -uprobe_munmap (next, next->vm_start, - next->vm_end); - } +if (adjust_next) +uprobe_munmap (next, next->vm_start, next->vm_end);i_mmap_lock_write (mapping);if (insert) {
@@ -3172,8 +3163,7 @@ static void vm_lock_mapping(struct mm_struct *mm, struct address_space *mapping)* * mmap_sem in write mode is required in order to block all operations * that could modify pagetables and free pages without need of -* altering the vma layout (for example populate_range() with -* nonlinear vmas). It's also needed in write mode to avoid new +* altering the vma layout. It's also needed in write mode to avoid new * anon_vmas to be associated with existing vmas. * * A single task can't take more than one mm_take_all_locks() in a row
mm/rmap.c +2 -223
261 lines not on this page · raw message
mm/swap.c +1 -3
@@ -1140,10 +1140,8 @@ void __init swap_setup(void)if (bdi_init (swapper_spaces[0 ].backing_dev_info))panic ("Failed to init swap bdi" ); -for (i =0 ; i <MAX_SWAPFILES ; i++) { +for (i =0 ; i <MAX_SWAPFILES ; i++)spin_lock_init (&swapper_spaces[i].tree_lock); -INIT_LIST_HEAD (&swapper_spaces[i].i_mmap_nonlinear); - }#endif /* Use a smaller cluster for small-memory machines */
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 6/38 mm: replace vma->sharead.linear with vma->shared
In reply to Kirill A. ShutemovAfter removing vma->shared.nonlinear we have only one member of vma->shared union, which doesn't make much sense.
This patch drops the union and move struct vma->shared.linear to vma->shared.
--- include/linux/mm_types.h | 8 +++----- mm/interval_tree.c | 34 +++++++++++++++++----------------- 2 files changed, 20 insertions(+), 22 deletions(-)
include/linux/mm_types.h +3 -5
@@ -275,11 +275,9 @@ struct vm_area_struct {* For areas with an address space and backing store, * linkage into the address_space->i_mmap interval tree. */ -union { -struct { -struct rb_node rb; -unsigned long rb_subtree_last; - } linear; +struct { +struct rb_node rb; +unsigned long rb_subtree_last; } shared;/*
mm/interval_tree.c +17 -17
@@ -21,8 +21,8 @@ static inline unsigned long vma_last_pgoff(struct vm_area_struct *v)return v->vm_pgoff + ((v->vm_end - v->vm_start) >>PAGE_SHIFT ) -1 ; } -INTERVAL_TREE_DEFINE(struct vm_area_struct, shared.linear.rb, - unsigned long, shared.linear.rb_subtree_last, +INTERVAL_TREE_DEFINE(struct vm_area_struct, shared.rb, + unsigned long, shared.rb_subtree_last, vma_start_pgoff, vma_last_pgoff,, vma_interval_tree)/* Insert node immediately after prev in the interval tree */
@@ -36,26 +36,26 @@ void vma_interval_tree_insert_after(struct vm_area_struct *node,VM_BUG_ON_VMA (vma_start_pgoff (node) !=vma_start_pgoff (prev), node); -if (!prev->shared.linear.rb.rb_right) { +if (!prev->shared.rb.rb_right) { parent = prev; - link = &prev->shared.linear.rb.rb_right; + link = &prev->shared.rb.rb_right; }else { - parent =rb_entry (prev->shared.linear.rb.rb_right, - struct vm_area_struct, shared.linear.rb); -if (parent->shared.linear.rb_subtree_last < last) - parent->shared.linear.rb_subtree_last = last; -while (parent->shared.linear.rb.rb_left) { - parent =rb_entry (parent->shared.linear.rb.rb_left, - struct vm_area_struct, shared.linear.rb); -if (parent->shared.linear.rb_subtree_last < last) - parent->shared.linear.rb_subtree_last = last; + parent =rb_entry (prev->shared.rb.rb_right, + struct vm_area_struct, shared.rb); +if (parent->shared.rb_subtree_last < last) + parent->shared.rb_subtree_last = last; +while (parent->shared.rb.rb_left) { + parent =rb_entry (parent->shared.rb.rb_left, + struct vm_area_struct, shared.rb); +if (parent->shared.rb_subtree_last < last) + parent->shared.rb_subtree_last = last; } - link = &parent->shared.linear.rb.rb_left; + link = &parent->shared.rb.rb_left; } - node->shared.linear.rb_subtree_last = last; -rb_link_node (&node->shared.linear.rb, &parent->shared.linear.rb, link); -rb_insert_augmented (&node->shared.linear.rb, root, + node->shared.rb_subtree_last = last; +rb_link_node (&node->shared.rb, &parent->shared.rb, link); +rb_insert_augmented (&node->shared.rb, root, &vma_interval_tree_augment); }
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 7/38 mm: remove rest usage of VM_NONLINEAR and pte_file()
In reply to Kirill A. ShutemovOne bit in ->vm_flags is unused now!
--- drivers/gpu/drm/drm_vma_manager.c | 3 +- include/linux/mm.h | 1 - include/linux/swapops.h | 4 +- mm/debug.c | 1 - mm/gup.c | 2 +- mm/ksm.c | 2 +- mm/madvise.c | 4 +- mm/memcontrol.c | 4 +- mm/memory.c | 78 +++++++++++++++++++-------------------- mm/mincore.c | 5 +-- mm/mprotect.c | 2 +- mm/mremap.c | 2 - mm/msync.c | 5 +-- 13 files changed, 47 insertions(+), 66 deletions(-)
drivers/gpu/drm/drm_vma_manager.c +1 -2
@@ -50,8 +50,7 @@* * You must not use multiple offset managers on a single address_space. * Otherwise, mm-core will be unable to tear down memory mappings as the VM will -* no longer be linear. Please use VM_NONLINEAR in that case and implement your -* own offset managers. +* no longer be linear. * * This offset manager works on page-based addresses. That is, every argument * and return code (with the exception of drm_vma_node_offset_addr()) is given
include/linux/mm.h +0 -1
@@ -138,7 +138,6 @@ extern unsigned int kobjsize(const void *objp);#define VM_ACCOUNT 0x00100000/* Is a VM accounted object */ #define VM_NORESERVE 0x00200000/* should the VM suppress accounting */ #define VM_HUGETLB 0x00400000/* Huge TLB Page VM */ -#define VM_NONLINEAR 0x00800000/* Is non-linear (remap_file_pages) */ #define VM_ARCH_1 0x01000000/* Architecture-specific flag */ #define VM_ARCH_2 0x02000000#define VM_DONTDUMP 0x04000000/* Do not include in the core dump */
include/linux/swapops.h +1 -3
@@ -54,7 +54,7 @@ static inline pgoff_t swp_offset(swp_entry_t entry)/* check whether a pte points to a swap entry */ static inline int is_swap_pte (pte_t pte) { -return !pte_none (pte) && !pte_present_nonuma (pte) && !pte_file (pte); +return !pte_none (pte) && !pte_present_nonuma (pte); }#endif
@@ -66,7 +66,6 @@ static inline swp_entry_t pte_to_swp_entry(pte_t pte) {swp_entry_t arch_entry; -BUG_ON (pte_file (pte));if (pte_swp_soft_dirty (pte)) pte =pte_swp_clear_soft_dirty (pte); arch_entry =__pte_to_swp_entry (pte);
@@ -82,7 +81,6 @@ static inline pte_t swp_entry_to_pte(swp_entry_t entry)swp_entry_t arch_entry; arch_entry =__swp_entry (swp_type (entry),swp_offset (entry)); -BUG_ON (pte_file (__swp_entry_to_pte (arch_entry)));return __swp_entry_to_pte (arch_entry); }
mm/debug.c +0 -1
@@ -130,7 +130,6 @@ static const struct trace_print_flags vmaflags_names[] = { {VM_ACCOUNT, "account" }, {VM_NORESERVE, "noreserve" }, {VM_HUGETLB, "hugetlb" }, - {VM_NONLINEAR, "nonlinear" }, #if defined(CONFIG_X86) {VM_PAT, "pat" }, #elif defined(CONFIG_PPC)
mm/gup.c +1 -1
@@ -55,7 +55,7 @@ retry:*/ if (likely (!(flags &FOLL_MIGRATION ))) goto no_page; -if (pte_none (pte) ||pte_file (pte)) +if (pte_none (pte)) goto no_page; entry =pte_to_swp_entry (pte);if (!is_migration_entry (entry))
mm/ksm.c +1 -1
@@ -1748,7 +1748,7 @@ int ksm_madvise(struct vm_area_struct *vma, unsigned long start,*/ if (*vm_flags & (VM_MERGEABLE |VM_SHARED |VM_MAYSHARE |VM_PFNMAP |VM_IO |VM_DONTEXPAND | -VM_HUGETLB |VM_NONLINEAR |VM_MIXEDMAP )) +VM_HUGETLB |VM_MIXEDMAP ))return 0 ;/* just ignore the advice */ #ifdef VM_SAO
mm/madvise.c +2 -2
@@ -164,7 +164,7 @@ static int swapin_walk_pmd_entry(pmd_t *pmd, unsigned long start, pte = *(orig_pte + ((index - start) /PAGE_SIZE ));pte_unmap_unlock (orig_pte, ptl); -if (pte_present (pte) ||pte_none (pte) ||pte_file (pte)) +if (pte_present (pte) ||pte_none (pte))continue ; entry =pte_to_swp_entry (pte);if (unlikely (non_swap_entry (entry)))
@@ -437,7 +437,7 @@ static long madvise_remove(struct vm_area_struct *vma, *prev =NULL ;/* tell sys_madvise we drop mmap_sem */ -if (vma->vm_flags & (VM_LOCKED |VM_NONLINEAR |VM_HUGETLB )) +if (vma->vm_flags & (VM_LOCKED |VM_HUGETLB ))return -EINVAL ; f = vma->vm_file;
mm/memcontrol.c +1 -3
@@ -4937,8 +4937,6 @@ static struct page *mc_handle_file_pte(struct vm_area_struct *vma, mapping = vma->vm_file->f_mapping;if (pte_none (ptent)) pgoff =linear_page_index (vma, addr); -else /* pte_file(ptent) is true */ - pgoff =pte_to_pgoff (ptent);/* page is moved even if it's not RSS of this task(page-faulted). */ #ifdef CONFIG_SWAP
@@ -4970,7 +4968,7 @@ static enum mc_target_type get_mctgt_type(struct vm_area_struct *vma, page =mc_handle_present_pte (vma, addr, ptent); else if (is_swap_pte(ptent)) page =mc_handle_swap_pte (vma, addr, ptent, &ent); - else if (pte_none(ptent) || pte_file(ptent)) + else if (pte_none(ptent)) page =mc_handle_file_pte (vma, addr, ptent, &ent);if (!page && !ent.val)
mm/memory.c +37 -41
90 lines not on this page · raw message
mm/mincore.c +1 -4
@@ -131,10 +131,7 @@ static void mincore_pte_range(struct vm_area_struct *vma, pmd_t *pmd,mincore_unmapped_range (vma, addr, next, vec); else if (pte_present(pte)) *vec = 1; - else if (pte_file(pte)) { - pgoff =pte_to_pgoff (pte); - *vec =mincore_page (vma->vm_file->f_mapping, pgoff); - } else { /* pte is a swap entry */ + else { /* pte is a swap entry */swp_entry_t entry =pte_to_swp_entry (pte);if (non_swap_entry (entry)) {
mm/mprotect.c +1 -1
@@ -105,7 +105,7 @@ static unsigned long change_pte_range(struct vm_area_struct *vma, pmd_t *pmd, }if (updated) pages++; - }else if (IS_ENABLED (CONFIG_MIGRATION ) && !pte_file (oldpte)) { + }else if (IS_ENABLED (CONFIG_MIGRATION )) {swp_entry_t entry =pte_to_swp_entry (oldpte);if (is_write_migration_entry (entry)) {
mm/mremap.c +0 -2
@@ -81,8 +81,6 @@ static pte_t move_soft_dirty_pte(pte_t pte) pte =pte_mksoft_dirty (pte); else if (is_swap_pte(pte)) pte =pte_swp_mksoft_dirty (pte); - else if (pte_file(pte)) - pte =pte_file_mksoft_dirty (pte);#endif return pte; }
mm/msync.c +1 -4
@@ -86,10 +86,7 @@ SYSCALL_DEFINE3(msync, unsigned long, start, size_t, len, int, flags) (vma->vm_flags & VM_SHARED)) {get_file (file);up_read (&mm->mmap_sem); -if (vma->vm_flags &VM_NONLINEAR ) - error =vfs_fsync (file,1 ); -else - error =vfs_fsync_range (file, fstart, fend,1 ); + error =vfs_fsync_range (file, fstart, fend,1 );fput (file);if (error || start >= end) goto out;
Signature · 1 line
2.1.3
PATCH v2 7/38 mm: remove rest usage of VM_NONLINEAR and pte_file()
From a7006b3b91e72963dc5f4756aaeae71af2d28b60 Mon Sep 17 00:00:00 2001
From: "Kirill A. Shutemov" <[email protected]>
Date: Tue, 23 Dec 2014 13:32:55 +0200
One bit in ->vm_flags is unused now!
---
v2: fix warning on !CONFIG_SWAP
--- drivers/gpu/drm/drm_vma_manager.c | 3 +- include/linux/mm.h | 1 - include/linux/swapops.h | 4 +- mm/debug.c | 1 - mm/gup.c | 2 +- mm/ksm.c | 2 +- mm/madvise.c | 4 +- mm/memcontrol.c | 4 +- mm/memory.c | 78 +++++++++++++++++++-------------------- mm/mincore.c | 9 +---- mm/mprotect.c | 2 +- mm/mremap.c | 2 - mm/msync.c | 5 +-- 13 files changed, 48 insertions(+), 69 deletions(-)
drivers/gpu/drm/drm_vma_manager.c +1 -2
@@ -50,8 +50,7 @@* * You must not use multiple offset managers on a single address_space. * Otherwise, mm-core will be unable to tear down memory mappings as the VM will -* no longer be linear. Please use VM_NONLINEAR in that case and implement your -* own offset managers. +* no longer be linear. * * This offset manager works on page-based addresses. That is, every argument * and return code (with the exception of drm_vma_node_offset_addr()) is given
include/linux/mm.h +0 -1
@@ -138,7 +138,6 @@ extern unsigned int kobjsize(const void *objp);#define VM_ACCOUNT 0x00100000/* Is a VM accounted object */ #define VM_NORESERVE 0x00200000/* should the VM suppress accounting */ #define VM_HUGETLB 0x00400000/* Huge TLB Page VM */ -#define VM_NONLINEAR 0x00800000/* Is non-linear (remap_file_pages) */ #define VM_ARCH_1 0x01000000/* Architecture-specific flag */ #define VM_ARCH_2 0x02000000#define VM_DONTDUMP 0x04000000/* Do not include in the core dump */
include/linux/swapops.h +1 -3
@@ -54,7 +54,7 @@ static inline pgoff_t swp_offset(swp_entry_t entry)/* check whether a pte points to a swap entry */ static inline int is_swap_pte (pte_t pte) { -return !pte_none (pte) && !pte_present_nonuma (pte) && !pte_file (pte); +return !pte_none (pte) && !pte_present_nonuma (pte); }#endif
@@ -66,7 +66,6 @@ static inline swp_entry_t pte_to_swp_entry(pte_t pte) {swp_entry_t arch_entry; -BUG_ON (pte_file (pte));if (pte_swp_soft_dirty (pte)) pte =pte_swp_clear_soft_dirty (pte); arch_entry =__pte_to_swp_entry (pte);
@@ -82,7 +81,6 @@ static inline pte_t swp_entry_to_pte(swp_entry_t entry)swp_entry_t arch_entry; arch_entry =__swp_entry (swp_type (entry),swp_offset (entry)); -BUG_ON (pte_file (__swp_entry_to_pte (arch_entry)));return __swp_entry_to_pte (arch_entry); }
mm/debug.c +0 -1
@@ -130,7 +130,6 @@ static const struct trace_print_flags vmaflags_names[] = { {VM_ACCOUNT, "account" }, {VM_NORESERVE, "noreserve" }, {VM_HUGETLB, "hugetlb" }, - {VM_NONLINEAR, "nonlinear" }, #if defined(CONFIG_X86) {VM_PAT, "pat" }, #elif defined(CONFIG_PPC)
mm/gup.c +1 -1
@@ -55,7 +55,7 @@ retry:*/ if (likely (!(flags &FOLL_MIGRATION ))) goto no_page; -if (pte_none (pte) ||pte_file (pte)) +if (pte_none (pte)) goto no_page; entry =pte_to_swp_entry (pte);if (!is_migration_entry (entry))
mm/ksm.c +1 -1
@@ -1748,7 +1748,7 @@ int ksm_madvise(struct vm_area_struct *vma, unsigned long start,*/ if (*vm_flags & (VM_MERGEABLE |VM_SHARED |VM_MAYSHARE |VM_PFNMAP |VM_IO |VM_DONTEXPAND | -VM_HUGETLB |VM_NONLINEAR |VM_MIXEDMAP )) +VM_HUGETLB |VM_MIXEDMAP ))return 0 ;/* just ignore the advice */ #ifdef VM_SAO
mm/madvise.c +2 -2
@@ -164,7 +164,7 @@ static int swapin_walk_pmd_entry(pmd_t *pmd, unsigned long start, pte = *(orig_pte + ((index - start) /PAGE_SIZE ));pte_unmap_unlock (orig_pte, ptl); -if (pte_present (pte) ||pte_none (pte) ||pte_file (pte)) +if (pte_present (pte) ||pte_none (pte))continue ; entry =pte_to_swp_entry (pte);if (unlikely (non_swap_entry (entry)))
@@ -437,7 +437,7 @@ static long madvise_remove(struct vm_area_struct *vma, *prev =NULL ;/* tell sys_madvise we drop mmap_sem */ -if (vma->vm_flags & (VM_LOCKED |VM_NONLINEAR |VM_HUGETLB )) +if (vma->vm_flags & (VM_LOCKED |VM_HUGETLB ))return -EINVAL ; f = vma->vm_file;
mm/memcontrol.c +1 -3
@@ -4937,8 +4937,6 @@ static struct page *mc_handle_file_pte(struct vm_area_struct *vma, mapping = vma->vm_file->f_mapping;if (pte_none (ptent)) pgoff =linear_page_index (vma, addr); -else /* pte_file(ptent) is true */ - pgoff =pte_to_pgoff (ptent);/* page is moved even if it's not RSS of this task(page-faulted). */ #ifdef CONFIG_SWAP
@@ -4970,7 +4968,7 @@ static enum mc_target_type get_mctgt_type(struct vm_area_struct *vma, page =mc_handle_present_pte (vma, addr, ptent); else if (is_swap_pte(ptent)) page =mc_handle_swap_pte (vma, addr, ptent, &ent); - else if (pte_none(ptent) || pte_file(ptent)) + else if (pte_none(ptent)) page =mc_handle_file_pte (vma, addr, ptent, &ent);if (!page && !ent.val)
mm/memory.c +37 -41
90 lines not on this page · raw message
mm/mincore.c +2 -7
@@ -124,17 +124,13 @@ static void mincore_pte_range(struct vm_area_struct *vma, pmd_t *pmd, ptep =pte_offset_map_lock (vma->vm_mm, pmd, addr, &ptl); do { pte_t pte = *ptep; - pgoff_t pgoff; next = addr + PAGE_SIZE; if (pte_none(pte)) mincore_unmapped_range(vma, addr, next, vec); else if (pte_present(pte)) *vec = 1; - else if (pte_file(pte)) { - pgoff = pte_to_pgoff(pte); - *vec = mincore_page(vma->vm_file->f_mapping, pgoff); - } else { /* pte is a swap entry */ + else { /* pte is a swap entry */ swp_entry_t entry = pte_to_swp_entry(pte); if (non_swap_entry(entry)) {
@@ -145,9 +141,8 @@ static void mincore_pte_range(struct vm_area_struct *vma, pmd_t *pmd, *vec =1 ; }else {#ifdef CONFIG_SWAP - pgoff = entry.val; *vec =mincore_page (swap_address_space (entry), - pgoff); + entry.val);#else WARN_ON (1 ); *vec =1 ;
mm/mprotect.c +1 -1
@@ -105,7 +105,7 @@ static unsigned long change_pte_range(struct vm_area_struct *vma, pmd_t *pmd, }if (updated) pages++; - }else if (IS_ENABLED (CONFIG_MIGRATION ) && !pte_file (oldpte)) { + }else if (IS_ENABLED (CONFIG_MIGRATION )) {swp_entry_t entry =pte_to_swp_entry (oldpte);if (is_write_migration_entry (entry)) {
mm/mremap.c +0 -2
@@ -81,8 +81,6 @@ static pte_t move_soft_dirty_pte(pte_t pte) pte =pte_mksoft_dirty (pte); else if (is_swap_pte(pte)) pte =pte_swp_mksoft_dirty (pte); - else if (pte_file(pte)) - pte =pte_file_mksoft_dirty (pte);#endif return pte; }
mm/msync.c +1 -4
@@ -86,10 +86,7 @@ SYSCALL_DEFINE3(msync, unsigned long, start, size_t, len, int, flags) (vma->vm_flags & VM_SHARED)) {get_file (file);up_read (&mm->mmap_sem); -if (vma->vm_flags &VM_NONLINEAR ) - error =vfs_fsync (file,1 ); -else - error =vfs_fsync_range (file, fstart, fend,1 ); + error =vfs_fsync_range (file, fstart, fend,1 );fput (file);if (error || start >= end) goto out;
Signature · 1 line
2.1.3
PATCH 8/38 asm-generic: drop unused pte_file* helpers
In reply to Kirill A. ShutemovAll users are gone.
--- include/asm-generic/pgtable.h | 15 --------------- 1 file changed, 15 deletions(-)
include/asm-generic/pgtable.h +0 -15
@@ -474,21 +474,6 @@ static inline pte_t pte_swp_clear_soft_dirty(pte_t pte) {return pte; } - -static inline pte_t pte_file_clear_soft_dirty (pte_t pte) -{ -return pte; -} - -static inline pte_t pte_file_mksoft_dirty (pte_t pte) -{ -return pte; -} - -static inline int pte_file_soft_dirty (pte_t pte) -{ -return 0 ; -}#endif #ifndef __HAVE_PFNMAP_TRACKING
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 9/38 alpha: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/alpha/include/asm/pgtable.h | 7 ------- 1 file changed, 7 deletions(-)
arch/alpha/include/asm/pgtable.h +0 -7
@@ -73,7 +73,6 @@ struct vm_area_struct;/* .. and these are ours ... */ #define _PAGE_DIRTY 0x20000#define _PAGE_ACCESSED 0x40000 -#define _PAGE_FILE 0x80000/* set:pagecache, unset:swap */ /* * NOTE! The "accessed" bit isn't necessarily exact: it can be kept exactly
@@ -268,7 +267,6 @@ extern inline void pgd_clear(pgd_t * pgdp) { pgd_val(*pgdp) = 0; }extern inline int pte_write (pte_t pte) {return !(pte_val (pte) & _PAGE_FOW); }extern inline int pte_dirty (pte_t pte) {return pte_val (pte) & _PAGE_DIRTY; }extern inline int pte_young (pte_t pte) {return pte_val (pte) & _PAGE_ACCESSED; } -extern inline int pte_file (pte_t pte) {return pte_val (pte) & _PAGE_FILE; }extern inline int pte_special (pte_t pte) {return 0 ; }extern inline pte_t pte_wrprotect (pte_t pte) {pte_val (pte) |= _PAGE_FOW;return pte; }
@@ -345,11 +343,6 @@ extern inline pte_t mk_swap_pte(unsigned long type, unsigned long offset)#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -#define pte_to_pgoff (pte) (pte_val(pte) >> 32) -#define pgoff_to_pte (off) ((pte_t) { ((off) << 32) | _PAGE_FILE }) - -#define PTE_FILE_MAX_BITS 32 -#ifndef CONFIG_DISCONTIGMEM #define kern_addr_valid (addr) (1)#endif
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 10/38 arc: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/arc/include/asm/pgtable.h | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-)
arch/arc/include/asm/pgtable.h +2 -13
@@ -61,7 +61,6 @@#define _PAGE_WRITE (1<<4)/* Page has user write perm (H) */ #define _PAGE_READ (1<<5)/* Page has user read perm (H) */ #define _PAGE_MODIFIED (1<<6)/* Page modified (dirty) (S) */ -#define _PAGE_FILE (1<<7)/* page cache/ swap (S) */ #define _PAGE_GLOBAL (1<<8)/* Page is global (H) */ #define _PAGE_PRESENT (1<<10)/* TLB entry is valid (H) */
@@ -73,7 +72,6 @@#define _PAGE_READ (1<<3)/* Page has user read perm (H) */ #define _PAGE_ACCESSED (1<<4)/* Page is accessed (S) */ #define _PAGE_MODIFIED (1<<5)/* Page modified (dirty) (S) */ -#define _PAGE_FILE (1<<6)/* page cache/ swap (S) */ #define _PAGE_GLOBAL (1<<8)/* Page is global (H) */ #define _PAGE_PRESENT (1<<9)/* TLB entry is valid (H) */ #define _PAGE_SHARED_CODE (1<<11)/* Shared Code page with cmn vaddr
@@ -268,15 +266,6 @@ static inline void pmd_set(pmd_t *pmdp, pte_t *ptep) pte; \ }) -/* TBD: Non linear mapping stuff */ -static inline int pte_file (pte_t pte) -{ -return pte_val (pte) & _PAGE_FILE; -} - -#define PTE_FILE_MAX_BITS 30 -#define pgoff_to_pte (x) __pte(x) -#define pte_to_pgoff (x) (pte_val(x) >> 2)#define pte_pfn (pte) (pte_val(pte) >> PAGE_SHIFT)#define pfn_pte (pfn, prot) (__pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot)))#define __pte_index (addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
@@ -358,13 +347,13 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,#endif extern void paging_init (void ); -extern pgd_t swapper_pg_dir[]__aligned(PAGE_SIZE) ; +xtern pgd_t swapper_pg_dir[] __aligned(PAGE_SIZE);void update_mmu_cache (struct vm_area_struct *vma,unsigned long address,pte_t *ptep);/* Encode swap {type,off} tuple into PTE * We reserve 13 bits for 5-bit @type, keeping bits 12-5 zero, ensuring that -* both PAGE_FILE and PAGE_PRESENT are zero in a PTE holding swap "identifier" +* PAGE_PRESENT is zero in a PTE holding swap "identifier" */ #define __swp_entry (type, off) ((swp_entry_t) { \ ((type) & 0x1f) | ((off) << 13) })
Signature · 1 line
2.1.3
Re: [PATCH 10/38] arc: drop _PAGE_FILE and pte_file()-related helpers
Hi Kirill,
Quoted 46 lines · Kirill A. Shutemov
We've replaced
remap_file_pages(2)implementation with emulation. Nobody creates non-linear mapping anymore.Signed-off-by Kirill A. Shutemov <[email protected]>Cc Vineet Gupta <[email protected]>--- arch/arc/include/asm/pgtable.h | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-)arch/arc/include/asm/pgtable.h +0
-11@@ -61,7 +61,6 @@#define _PAGE_WRITE (1<<4)/* Page has user write perm (H) */ #define _PAGE_READ (1<<5)/* Page has user read perm (H) */ #define _PAGE_MODIFIED (1<<6)/* Page modified (dirty) (S) */ -#define _PAGE_FILE (1<<7)/* page cache/ swap (S) */ #define _PAGE_GLOBAL (1<<8)/* Page is global (H) */ #define _PAGE_PRESENT (1<<10)/* TLB entry is valid (H) */ @@ -73,7 +72,6 @@#define _PAGE_READ (1<<3)/* Page has user read perm (H) */ #define _PAGE_ACCESSED (1<<4)/* Page is accessed (S) */ #define _PAGE_MODIFIED (1<<5)/* Page modified (dirty) (S) */ -#define _PAGE_FILE (1<<6)/* page cache/ swap (S) */ #define _PAGE_GLOBAL (1<<8)/* Page is global (H) */ #define _PAGE_PRESENT (1<<9)/* TLB entry is valid (H) */ #define _PAGE_SHARED_CODE (1<<11)/* Shared Code page with cmn vaddr @@ -268,15 +266,6 @@ static inline void pmd_set(pmd_t *pmdp, pte_t *ptep) pte; \ }) -/* TBD: Non linear mapping stuff */ -static inline int pte_file (pte_t pte) -{ -return pte_val (pte) & _PAGE_FILE; -} - -#define PTE_FILE_MAX_BITS 30 -#define pgoff_to_pte (x) __pte(x) -#define pte_to_pgoff (x) (pte_val(x) >> 2)#define pte_pfn (pte) (pte_val(pte) >> PAGE_SHIFT)#define pfn_pte (pfn, prot) (__pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot)))#define __pte_index (addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
arch/arc/include/asm/pgtable.h static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, · line 350
Quoted 5 lines
arch/arc/include/asm/pgtable.h +1
-1@@ -358,13 +347,13 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,#endif extern void paging_init (void ); -extern pgd_t swapper_pg_dir[]__aligned(PAGE_SIZE) ; +xtern pgd_t swapper_pg_dir[] __aligned(PAGE_SIZE);
I don't think u intended that. Otherwise
Thx,
-Vineet
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 11/38 arm64: drop PTE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
This patch also adjust __SWP_TYPE_SHIFT and increase number of bits availble for swap offset.
--- arch/arm64/include/asm/pgtable.h | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-)
arch/arm64/include/asm/pgtable.h +4 -18
@@ -25,7 +25,6 @@* Software defined PTE bits definition. */ #define PTE_VALID (_AT(pteval_t, 1) << 0) -#define PTE_FILE (_AT(pteval_t, 1) << 2)/* only when !pte_present() */ #define PTE_DIRTY (_AT(pteval_t, 1) << 55)#define PTE_SPECIAL (_AT(pteval_t, 1) << 56)#define PTE_WRITE (_AT(pteval_t, 1) << 57)
@@ -470,13 +469,12 @@ extern pgd_t idmap_pg_dir[PTRS_PER_PGD];/* * Encode and decode a swap entry: * bits 0-1: present (must be zero) -* bit 2: PTE_FILE -* bits 3-8: swap type -* bits 9-57: swap offset +* bits 2-7: swap type +* bits 8-57: swap offset */ -#define __SWP_TYPE_SHIFT 3 +#define __SWP_TYPE_SHIFT 2#define __SWP_TYPE_BITS 6 -#define __SWP_OFFSET_BITS 49 +#define __SWP_OFFSET_BITS 50#define __SWP_TYPE_MASK ((1 << __SWP_TYPE_BITS) - 1)#define __SWP_OFFSET_SHIFT (__SWP_TYPE_BITS + __SWP_TYPE_SHIFT)#define __SWP_OFFSET_MASK ((1UL << __SWP_OFFSET_BITS) - 1)
@@ -494,18 +492,6 @@ extern pgd_t idmap_pg_dir[PTRS_PER_PGD];*/ #define MAX_SWAPFILES_CHECK () BUILD_BUG_ON(MAX_SWAPFILES_SHIFT > __SWP_TYPE_BITS) -/* -* Encode and decode a file entry: -* bits 0-1: present (must be zero) -* bit 2: PTE_FILE -* bits 3-57: file offset / PAGE_SIZE -*/ -#define pte_file (pte) (pte_val(pte) & PTE_FILE) -#define pte_to_pgoff (x) (pte_val(x) >> 3) -#define pgoff_to_pte (x) __pte(((x) << 3) | PTE_FILE) - -#define PTE_FILE_MAX_BITS 55 -extern int kern_addr_valid (unsigned long addr);#include <asm-generic/pgtable.h>
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Re: [PATCH 11/38] arm64: drop PTE_FILE and pte_file()-related helpers
Quoted 9 lines · Kirill A. Shutemov
We've replaced
remap_file_pages(2)implementation with emulation. Nobody creates non-linear mapping anymore.This patch also adjust
__SWP_TYPE_SHIFTand increase number of bits availble for swap offset.Signed-off-by Kirill A. Shutemov <[email protected]>Cc Catalin Marinas <[email protected]>Cc Will Deacon <[email protected]>
I haven't looked at the remap_file_pages() code but since the pte_file is no longer needed:
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 12/38 arm: drop L_PTE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
This patch also adjust __SWP_TYPE_SHIFT, effectively increase size of possible swap file to 128G.
--- arch/arm/include/asm/pgtable-2level.h | 1 - arch/arm/include/asm/pgtable-3level.h | 1 - arch/arm/include/asm/pgtable-nommu.h | 2 -- arch/arm/include/asm/pgtable.h | 20 +++----------------- arch/arm/mm/proc-macros.S | 2 +- 5 files changed, 4 insertions(+), 22 deletions(-)
arch/arm/include/asm/pgtable-2level.h +0 -1
@@ -118,7 +118,6 @@#define L_PTE_VALID (_AT(pteval_t, 1) << 0)/* Valid */ #define L_PTE_PRESENT (_AT(pteval_t, 1) << 0)#define L_PTE_YOUNG (_AT(pteval_t, 1) << 1) -#define L_PTE_FILE (_AT(pteval_t, 1) << 2)/* only when !PRESENT */ #define L_PTE_DIRTY (_AT(pteval_t, 1) << 6)#define L_PTE_RDONLY (_AT(pteval_t, 1) << 7)#define L_PTE_USER (_AT(pteval_t, 1) << 8)
arch/arm/include/asm/pgtable-3level.h +0 -1
@@ -77,7 +77,6 @@*/ #define L_PTE_VALID (_AT(pteval_t, 1) << 0)/* Valid */ #define L_PTE_PRESENT (_AT(pteval_t, 3) << 0)/* Present */ -#define L_PTE_FILE (_AT(pteval_t, 1) << 2)/* only when !PRESENT */ #define L_PTE_USER (_AT(pteval_t, 1) << 6)/* AP[1] */ #define L_PTE_SHARED (_AT(pteval_t, 3) << 8)/* SH[1:0], inner shareable */ #define L_PTE_YOUNG (_AT(pteval_t, 1) << 10)/* AF */
arch/arm/include/asm/pgtable-nommu.h +0 -2
@@ -54,8 +54,6 @@typedef pte_t *pte_addr_t ; -static inline int pte_file (pte_t pte) {return 0 ; } -/* * ZERO_PAGE is a global shared page that is always zero: used * for zero-mapped memory areas etc..
arch/arm/include/asm/pgtable.h +3 -17
@@ -318,12 +318,12 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)* * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 -* <--------------- offset ----------------------> < type -> 0 0 0 +* <--------------- offset ------------------------> < type -> 0 0 * -* This gives us up to 31 swap files and 64GB per swap file. Note that +* This gives us up to 31 swap files and 128GB per swap file. Note that * the offset field is always non-zero. */ -#define __SWP_TYPE_SHIFT 3 +#define __SWP_TYPE_SHIFT 2#define __SWP_TYPE_BITS 5#define __SWP_TYPE_MASK ((1 << __SWP_TYPE_BITS) - 1)#define __SWP_OFFSET_SHIFT (__SWP_TYPE_BITS + __SWP_TYPE_SHIFT)
@@ -342,20 +342,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)*/ #define MAX_SWAPFILES_CHECK () BUILD_BUG_ON(MAX_SWAPFILES_SHIFT > __SWP_TYPE_BITS) -/* -* Encode and decode a file entry. File entries are stored in the Linux -* page tables as follows: -* -* 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 -* 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 -* <----------------------- offset ------------------------> 1 0 0 -*/ -#define pte_file (pte) (pte_val(pte) & L_PTE_FILE) -#define pte_to_pgoff (x) (pte_val(x) >> 3) -#define pgoff_to_pte (x) __pte(((x) << 3) | L_PTE_FILE) - -#define PTE_FILE_MAX_BITS 29 -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ /* FIXME: this is not correct */ #define kern_addr_valid (addr) (1)
arch/arm/mm/proc-macros.S +1 -1
@@ -98,7 +98,7 @@ #endif #if !defined (CONFIG_ARM_LPAE) && \ (L_PTE_XN+L_PTE_USER+L_PTE_RDONLY+L_PTE_DIRTY+L_PTE_YOUNG+\ - L_PTE_FILE+L_PTE_PRESENT) > L_PTE_SHARED + L_PTE_PRESENT) > L_PTE_SHARED #error Invalid Linux PTE bit settings #endif #endif /* CONFIG_MMU */
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 13/38 avr32: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/avr32/include/asm/pgtable.h | 25 ------------------------- 1 file changed, 25 deletions(-)
arch/avr32/include/asm/pgtable.h +0 -25
@@ -86,9 +86,6 @@ extern struct page *empty_zero_page;#define _PAGE_BIT_PRESENT 10#define _PAGE_BIT_ACCESSED 11/* software: page was accessed */ -/* The following flags are only valid when !PRESENT */ -#define _PAGE_BIT_FILE 0/* software: pagecache or swap? */ -#define _PAGE_WT (1 << _PAGE_BIT_WT)#define _PAGE_DIRTY (1 << _PAGE_BIT_DIRTY)#define _PAGE_EXECUTE (1 << _PAGE_BIT_EXECUTE)
@@ -101,7 +98,6 @@ extern struct page *empty_zero_page;/* Software flags */ #define _PAGE_ACCESSED (1 << _PAGE_BIT_ACCESSED)#define _PAGE_PRESENT (1 << _PAGE_BIT_PRESENT) -#define _PAGE_FILE (1 << _PAGE_BIT_FILE)/* * Page types, i.e. sizes. _PAGE_TYPE_NONE corresponds to what is
@@ -210,14 +206,6 @@ static inline int pte_special(pte_t pte)return 0 ; } -/* -* The following only work if pte_present() is not true. -*/ -static inline int pte_file (pte_t pte) -{ -return pte_val (pte) & _PAGE_FILE; -} -/* Mutator functions for PTE bits */ static inline pte_t pte_wrprotect (pte_t pte) {
@@ -329,7 +317,6 @@ extern void update_mmu_cache(struct vm_area_struct * vma,* Encode and decode a swap entry * * Constraints: -* _PAGE_FILE at bit 0 * _PAGE_TYPE_* at bits 2-3 (for emulating _PAGE_PROTNONE) * _PAGE_PRESENT at bit 10 *
@@ -346,18 +333,6 @@ extern void update_mmu_cache(struct vm_area_struct * vma,#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -/* -* Encode and decode a nonlinear file mapping entry. We have to -* preserve _PAGE_FILE and _PAGE_PRESENT here. _PAGE_TYPE_* isn't -* necessary, since _PAGE_FILE implies !_PAGE_PROTNONE (?) -*/ -#define PTE_FILE_MAX_BITS 30 -#define pte_to_pgoff (pte) (((pte_val(pte) >> 1) & 0x1ff) \ - | ((pte_val(pte) >> 11) << 9)) -#define pgoff_to_pte (off) ((pte_t) { ((((off) & 0x1ff) << 1) \ - | (((off) >> 9) << 11) \ - | _PAGE_FILE) }) -typedef pte_t *pte_addr_t ;#define kern_addr_valid (addr) (1)
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Re: [PATCH 13/38] avr32: drop _PAGE_FILE and pte_file()-related helpers
Quoted 9 lines · Kirill A. Shutemov
We've replaced
remap_file_pages(2)implementation with emulation. Nobody creates non-linear mapping anymore.Signed-off-by Kirill A. Shutemov <[email protected]>Cc Haavard Skinnemoen <[email protected]>Cc Hans-Christian Egtvedt <[email protected]>--- arch/avr32/include/asm/pgtable.h | 25 ------------------------- 1 file changed, 25 deletions(-)
Oooh, 25 lines less code, fantastic.
<snipp diff>
Signature · 7 lines
HcE -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 14/38 blackfin: drop pte_file()
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/blackfin/include/asm/pgtable.h | 5 ----- 1 file changed, 5 deletions(-)
arch/blackfin/include/asm/pgtable.h +0 -5
@@ -45,11 +45,6 @@ extern void paging_init(void);#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -static inline int pte_file (pte_t pte) -{ -return 0 ; -} -#define set_pte (pteptr, pteval) (*(pteptr) = pteval)#define set_pte_at (mm, addr, ptep, pteval) set_pte(ptep, pteval)
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 15/38 c6x: drop pte_file()
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/c6x/include/asm/pgtable.h | 5 ----- 1 file changed, 5 deletions(-)
arch/c6x/include/asm/pgtable.h +0 -5
@@ -50,11 +50,6 @@ extern void paging_init(void);#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -static inline int pte_file (pte_t pte) -{ -return 0 ; -} -#define set_pte (pteptr, pteval) (*(pteptr) = pteval)#define set_pte_at (mm, addr, ptep, pteval) set_pte(ptep, pteval)
Signature · 1 line
2.1.3
Re: [PATCH 15/38] c6x: drop pte_file()
Quoted 10 lines · Kirill A. Shutemov
We've replaced
remap_file_pages(2)implementation with emulation. Nobody creates non-linear mapping anymore.Signed-off-by Kirill A. Shutemov <[email protected]>Cc Mark Salter <[email protected]>Cc Aurelien Jacquiot <[email protected]>--- arch/c6x/include/asm/pgtable.h | 5 ----- 1 file changed, 5 deletions(-)
Quoted 6 lines
arch/c6x/include/asm/pgtable.h +0
-0@@ -50,11 +50,6 @@ extern void paging_init(void);#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })
arch/c6x/include/asm/pgtable.h extern void paging_init(void); · line 55
Quoted 10 lines
arch/c6x/include/asm/pgtable.h +0
-5#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -static inline int pte_file (pte_t pte) -{ -return 0 ; -} -#define set_pte (pteptr, pteval) (*(pteptr) = pteval)#define set_pte_at (mm, addr, ptep, pteval) set_pte(ptep, pteval)
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 16/38 cris: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/cris/include/arch-v10/arch/mmu.h | 3 --- arch/cris/include/arch-v32/arch/mmu.h | 3 --- arch/cris/include/asm/pgtable.h | 4 ---- 3 files changed, 10 deletions(-)
arch/cris/include/arch-v10/arch/mmu.h +0 -3
@@ -58,7 +58,6 @@ typedef struct/* Bits the HW doesn't care about but the kernel uses them in SW */ #define _PAGE_PRESENT (1<<4)/* page present in memory */ -#define _PAGE_FILE (1<<5)/* set: pagecache, unset: swap (when !PRESENT) */ #define _PAGE_ACCESSED (1<<5)/* simulated in software using valid bit */ #define _PAGE_MODIFIED (1<<6)/* simulated in software using we bit */ #define _PAGE_READ (1<<7)/* read-enabled */
@@ -105,6 +104,4 @@ typedef struct#define __S110 PAGE_SHARED#define __S111 PAGE_SHARED -#define PTE_FILE_MAX_BITS 26 -#endif
arch/cris/include/arch-v32/arch/mmu.h +0 -3
@@ -53,7 +53,6 @@ typedef struct* software. */ #define _PAGE_PRESENT (1 << 5)/* Page is present in memory. */ -#define _PAGE_FILE (1 << 6)/* 1=pagecache, 0=swap (when !present) */ #define _PAGE_ACCESSED (1 << 6)/* Simulated in software using valid bit. */ #define _PAGE_MODIFIED (1 << 7)/* Simulated in software using we bit. */ #define _PAGE_READ (1 << 8)/* Read enabled. */
@@ -108,6 +107,4 @@ typedef struct#define __S110 PAGE_SHARED_EXEC#define __S111 PAGE_SHARED_EXEC -#define PTE_FILE_MAX_BITS 25 -#endif /* _ASM_CRIS_ARCH_MMU_H */
arch/cris/include/asm/pgtable.h +0 -4
@@ -114,7 +114,6 @@ extern unsigned long empty_zero_page;static inline int pte_write (pte_t pte) {return pte_val (pte) & _PAGE_WRITE; }static inline int pte_dirty (pte_t pte) {return pte_val (pte) & _PAGE_MODIFIED; }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 0 ; }static inline pte_t pte_wrprotect (pte_t pte)
@@ -290,9 +289,6 @@ static inline void update_mmu_cache(struct vm_area_struct * vma,*/ #define pgtable_cache_init () do { } while (0) -#define pte_to_pgoff (x) (pte_val(x) >> 6) -#define pgoff_to_pte (x) __pte(((x) << 6) | _PAGE_FILE) -typedef pte_t *pte_addr_t ;#endif /* __ASSEMBLY__ */
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 17/38 frv: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
This patch also increase number of bits availble for swap offset.
--- arch/frv/include/asm/pgtable.h | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-)
arch/frv/include/asm/pgtable.h +5 -22
@@ -62,10 +62,6 @@ typedef pte_t *pte_addr_t;#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -#ifndef __ASSEMBLY__ -static inline int pte_file (pte_t pte) {return 0 ; } -#endif -#define ZERO_PAGE (vaddr) ({ BUG(); NULL; })#define swapper_pg_dir ((pgd_t *) NULL)
@@ -298,7 +294,6 @@ static inline pmd_t *pmd_offset(pud_t *dir, unsigned long address)#define _PAGE_RESERVED_MASK (xAMPRx_RESERVED8 | xAMPRx_RESERVED13) -#define _PAGE_FILE 0x002/* set:pagecache unset:swap */ #define _PAGE_PROTNONE 0x000/* If not present */ #define _PAGE_CHG_MASK (PTE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY)
@@ -463,27 +458,15 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)* Handle swap and file entries * - the PTE is encoded in the following format: * bit 0: Must be 0 (!_PAGE_PRESENT) -* bit 1: Type: 0 for swap, 1 for file (_PAGE_FILE) -* bits 2-7: Swap type -* bits 8-31: Swap offset -* bits 2-31: File pgoff +* bits 1-6: Swap type +* bits 7-31: Swap offset */ -#define __swp_type (x) (((x).val >> 2) & 0x1f) -#define __swp_offset (x) ((x).val >> 8) -#define __swp_entry (type, offset) ((swp_entry_t) { ((type) << 2) | ((offset) << 8) }) +#define __swp_type (x) (((x).val >> 1) & 0x1f) +#define __swp_offset (x) ((x).val >> 7) +#define __swp_entry (type, offset) ((swp_entry_t) { ((type) << 1) | ((offset) << 7) })#define __pte_to_swp_entry (_pte) ((swp_entry_t) { (_pte).pte })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -static inline int pte_file (pte_t pte) -{ -return pte.pte & _PAGE_FILE; -} - -#define PTE_FILE_MAX_BITS 29 - -#define pte_to_pgoff (PTE ) ((PTE).pte >> 2) -#define pgoff_to_pte (off) __pte((off) << 2 | _PAGE_FILE) -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ #define PageSkip (page) (0)#define kern_addr_valid (addr) (1)
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 18/38 hexagon: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
This patch also increase number of bits availble for swap offset.
--- arch/hexagon/include/asm/pgtable.h | 60 ++++++++++---------------------------- 1 file changed, 16 insertions(+), 44 deletions(-)
arch/hexagon/include/asm/pgtable.h +16 -44
@@ -62,13 +62,6 @@ extern unsigned long zero_page_mask;#define _PAGE_ACCESSED (1<<2)/* -* _PAGE_FILE is only meaningful if _PAGE_PRESENT is false, while -* _PAGE_DIRTY is only meaningful if _PAGE_PRESENT is true. -* So we can overload the bit... -*/ -#define _PAGE_FILE _PAGE_DIRTY/* set: pagecache, unset = swap */ - -/* * For now, let's say that Valid and Present are the same thing. * Alternatively, we could say that it's the "or" of R, W, and X * permissions.
@@ -456,57 +449,36 @@ static inline int pte_exec(pte_t pte)#define pgtable_cache_init () do { } while (0)/* -* Swap/file PTE definitions. If _PAGE_PRESENT is zero, the rest of the -* PTE is interpreted as swap information. Depending on the _PAGE_FILE -* bit, the remaining free bits are eitehr interpreted as a file offset -* or a swap type/offset tuple. Rather than have the TLB fill handler -* test _PAGE_PRESENT, we're going to reserve the permissions bits -* and set them to all zeros for swap entries, which speeds up the -* miss handler at the cost of 3 bits of offset. That trade-off can -* be revisited if necessary, but Hexagon processor architecture and -* target applications suggest a lot of TLB misses and not much swap space. +* Swap/file PTE definitions. If _PAGE_PRESENT is zero, the rest of the PTE is +* interpreted as swap information. The remaining free bits are interpreted as +* swap type/offset tuple. Rather than have the TLB fill handler test +* _PAGE_PRESENT, we're going to reserve the permissions bits and set them to +* all zeros for swap entries, which speeds up the miss handler at the cost of +* 3 bits of offset. That trade-off can be revisited if necessary, but Hexagon +* processor architecture and target applications suggest a lot of TLB misses +* and not much swap space. * * Format of swap PTE: * bit 0: Present (zero) -* bit 1: _PAGE_FILE (zero) -* bits 2-6: swap type (arch independent layer uses 5 bits max) -* bits 7-9: bits 2:0 of offset -* bits 10-12: effectively _PAGE_PROTNONE (all zero) -* bits 13-31: bits 21:3 of swap offset -* -* Format of file PTE: -* bit 0: Present (zero) -* bit 1: _PAGE_FILE (zero) -* bits 2-9: bits 7:0 of offset -* bits 10-12: effectively _PAGE_PROTNONE (all zero) -* bits 13-31: bits 26:8 of swap offset +* bits 1-5: swap type (arch independent layer uses 5 bits max) +* bits 6-9: bits 3:0 of offset +* bits 10-12: effectively _PAGE_PROTNONE (all zero) +* bits 13-31: bits 22:4 of swap offset * * The split offset makes some of the following macros a little gnarly, * but there's plenty of precedent for this sort of thing. */ -#define PTE_FILE_MAX_BITS 27/* Used for swap PTEs */ -#define __swp_type (swp_pte) (((swp_pte).val >> 2) & 0x1f) +#define __swp_type (swp_pte) (((swp_pte).val >> 1) & 0x1f)#define __swp_offset (swp_pte) \ - ((((swp_pte).val >> 7) & 0x7) | (((swp_pte).val >> 10) & 0x003ffff8)) + ((((swp_pte).val >> 6) & 0xf) | (((swp_pte).val >> 9) & 0x7ffff0))#define __swp_entry (type, offset) \ ((swp_entry_t) { \ - ((type << 2) | \ - ((offset & 0x3ffff8) << 10) | ((offset & 0x7) << 7)) }) - -/* Used for file PTEs */ -#define pte_file (pte) \ - ((pte_val(pte) & (_PAGE_FILE | _PAGE_PRESENT)) == _PAGE_FILE) - -#define pte_to_pgoff (pte) \ - (((pte_val(pte) >> 2) & 0xff) | ((pte_val(pte) >> 5) & 0x07ffff00)) - -#define pgoff_to_pte (off) \ - ((pte_t) { ((((off) & 0x7ffff00) << 5) | (((off) & 0xff) << 2)\ - | _PAGE_FILE) }) + ((type << 1) | \ + ((offset & 0x7ffff0) << 9) | ((offset & 0xf) << 6)) })/* Oh boy. There are a lot of possible arch overrides found in this file. */ #include <asm-generic/pgtable.h>
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 19/38 ia64: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
This patch also increase number of bits availble for swap offset.
--- arch/ia64/include/asm/pgtable.h | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-)
arch/ia64/include/asm/pgtable.h +5 -20
@@ -57,9 +57,6 @@#define _PAGE_ED (__IA64_UL(1) << 52)/* exception deferral */ #define _PAGE_PROTNONE (__IA64_UL(1) << 63) -/* Valid only for a PTE with the present bit cleared: */ -#define _PAGE_FILE (1 << 1)/* see swap & file pte remarks below */ -#define _PFN_MASK _PAGE_PPN_MASK/* Mask of bits which may be changed by pte_modify(); the odd bits are there for _PAGE_PROTNONE */ #define _PAGE_CHG_MASK (_PAGE_P | _PAGE_PROTNONE | _PAGE_PL_MASK | _PAGE_AR_MASK | _PAGE_ED)
@@ -300,7 +297,6 @@ extern unsigned long VMALLOC_END;#define pte_exec (pte) ((pte_val(pte) & _PAGE_AR_RX) != 0)#define pte_dirty (pte) ((pte_val(pte) & _PAGE_D) != 0)#define pte_young (pte) ((pte_val(pte) & _PAGE_A) != 0) -#define pte_file (pte) ((pte_val(pte) & _PAGE_FILE) != 0)#define pte_special (pte) 0/*
@@ -472,27 +468,16 @@ extern void paging_init (void);* * Format of swap pte: * bit 0 : present bit (must be zero) -* bit 1 : _PAGE_FILE (must be zero) -* bits 2- 8: swap-type -* bits 9-62: swap offset -* bit 63 : _PAGE_PROTNONE bit -* -* Format of file pte: -* bit 0 : present bit (must be zero) -* bit 1 : _PAGE_FILE (must be one) -* bits 2-62: file_offset/PAGE_SIZE +* bits 1- 7: swap-type +* bits 8-62: swap offset * bit 63 : _PAGE_PROTNONE bit */ -#define __swp_type (entry) (((entry).val >> 2) & 0x7f) -#define __swp_offset (entry) (((entry).val << 1) >> 10) -#define __swp_entry (type,offset) ((swp_entry_t) { ((type) << 2) | ((long) (offset) << 9) }) +#define __swp_type (entry) (((entry).val >> 1) & 0x7f) +#define __swp_offset (entry) (((entry).val << 1) >> 9) +#define __swp_entry (type,offset) ((swp_entry_t) { ((type) << 1) | ((long) (offset) << 8) })#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -#define PTE_FILE_MAX_BITS 61 -#define pte_to_pgoff (pte) ((pte_val(pte) << 1) >> 3) -#define pgoff_to_pte (off) ((pte_t) { ((off) << 2) | _PAGE_FILE }) -/* * ZERO_PAGE is a global shared page that is always zero: used * for zero-mapped memory areas etc..
Signature · 1 line
2.1.3
PATCH 20/38 m32r: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/m32r/include/asm/pgtable-2level.h | 4 ---- arch/m32r/include/asm/pgtable.h | 11 ----------- 2 files changed, 15 deletions(-)
arch/m32r/include/asm/pgtable-2level.h +0 -4
@@ -70,9 +70,5 @@ static inline pmd_t *pmd_offset(pgd_t * dir, unsigned long address)#define pfn_pte (pfn, prot) __pte(((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_to_pgoff (pte) (((pte_val(pte) >> 2) & 0x7f) | (((pte_val(pte) >> 10)) << 7)) -#define pgoff_to_pte (off) ((pte_t) { (((off) & 0x7f) << 2) | (((off) >> 7) << 10) | _PAGE_FILE }) -#endif /* __KERNEL__ */ #endif /* _ASM_M32R_PGTABLE_2LEVEL_H */
arch/m32r/include/asm/pgtable.h +0 -11
@@ -80,8 +80,6 @@ extern unsigned long empty_zero_page[1024];*/ #define _PAGE_BIT_DIRTY 0/* software: page changed */ -#define _PAGE_BIT_FILE 0/* when !present: nonlinear file -mapping */ #define _PAGE_BIT_PRESENT 1/* Valid: page is valid */ #define _PAGE_BIT_GLOBAL 2/* Global */ #define _PAGE_BIT_LARGE 3/* Large */
@@ -93,7 +91,6 @@ extern unsigned long empty_zero_page[1024];#define _PAGE_BIT_PROTNONE 9/* software: if not present */ #define _PAGE_DIRTY (1UL << _PAGE_BIT_DIRTY) -#define _PAGE_FILE (1UL << _PAGE_BIT_FILE)#define _PAGE_PRESENT (1UL << _PAGE_BIT_PRESENT)#define _PAGE_GLOBAL (1UL << _PAGE_BIT_GLOBAL)#define _PAGE_LARGE (1UL << _PAGE_BIT_LARGE)
@@ -206,14 +203,6 @@ static inline int pte_write(pte_t pte)return pte_val (pte) & _PAGE_WRITE; } -/* -* The following only works if pte_present() is not true. -*/ -static inline int pte_file (pte_t pte) -{ -return pte_val (pte) & _PAGE_FILE; -} -static inline int pte_special (pte_t pte) {return 0 ;
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 21/38 m68k: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/m68k/include/asm/mcf_pgtable.h | 17 ----------------- arch/m68k/include/asm/motorola_pgtable.h | 15 --------------- arch/m68k/include/asm/pgtable_no.h | 2 -- arch/m68k/include/asm/sun3_pgtable.h | 15 --------------- 4 files changed, 49 deletions(-)
arch/m68k/include/asm/mcf_pgtable.h +0 -17
@@ -35,7 +35,6 @@* hitting hardware. */ #define CF_PAGE_DIRTY 0x00000001 -#define CF_PAGE_FILE 0x00000200#define CF_PAGE_ACCESSED 0x00001000#define _PAGE_CACHE040 0x020/* 68040 cache mode, cachable, copyback */
@@ -243,11 +242,6 @@ static inline int pte_young(pte_t pte)return pte_val (pte) &CF_PAGE_ACCESSED ; } -static inline int pte_file (pte_t pte) -{ -return pte_val (pte) &CF_PAGE_FILE ; -} -static inline int pte_special (pte_t pte) {return 0 ;
@@ -391,19 +385,8 @@ static inline void cache_page(void *vaddr) *ptep =pte_mkcache (*ptep); } -#define PTE_FILE_MAX_BITS 21#define PTE_FILE_SHIFT 11 -static inline unsigned long pte_to_pgoff (pte_t pte) -{ -return pte_val (pte) >>PTE_FILE_SHIFT ; -} - -static inline pte_t pgoff_to_pte (unsigned pgoff) -{ -return __pte ((pgoff <<PTE_FILE_SHIFT ) +CF_PAGE_FILE ); -} -/* * Encode and de-code a swap entry (must be !pte_none(e) && !pte_present(e)) */
arch/m68k/include/asm/motorola_pgtable.h +0 -15
@@ -28,7 +28,6 @@#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__
@@ -168,7 +167,6 @@ static inline void pgd_set(pgd_t *pgdp, pmd_t *pmdp)static inline int pte_write (pte_t pte) {return !(pte_val (pte) & _PAGE_RONLY); }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_file (pte_t pte) {return pte_val (pte) & _PAGE_FILE; }static inline int pte_special (pte_t pte) {return 0 ; }static inline pte_t pte_wrprotect (pte_t pte) {pte_val (pte) |= _PAGE_RONLY;return pte; }
@@ -266,19 +264,6 @@ static inline void cache_page(void *vaddr) } } -#define PTE_FILE_MAX_BITS 28 - -static inline unsigned long pte_to_pgoff (pte_t pte) -{ -return pte.pte >>4 ; -} - -static inline pte_t pgoff_to_pte (unsigned off) -{ -pte_t pte = { (off <<4 ) + _PAGE_FILE }; -return pte; -} -/* Encode and de-code a swap entry (must be !pte_none(e) && !pte_present(e)) */ #define __swp_type (x) (((x).val >> 4) & 0xff)#define __swp_offset (x) ((x).val >> 12)
arch/m68k/include/asm/pgtable_no.h +0 -2
@@ -37,8 +37,6 @@ extern void paging_init(void);#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -static inline int pte_file (pte_t pte) {return 0 ; } -/* * ZERO_PAGE is a global shared page that is always zero: used * for zero-mapped memory areas etc..
arch/m68k/include/asm/sun3_pgtable.h +0 -15
@@ -38,8 +38,6 @@#define _PAGE_PRESENT (SUN3_PAGE_VALID)#define _PAGE_ACCESSED (SUN3_PAGE_ACCESSED) -#define PTE_FILE_MAX_BITS 28 -/* Compound page protection values. */ //todo: work out which ones *should* have SUN3_PAGE_NOCACHE and fix... // is it just PAGE_KERNEL and PAGE_SHARED?
@@ -168,7 +166,6 @@ static inline void pgd_clear (pgd_t *pgdp) {}static inline int pte_write (pte_t pte) {return pte_val (pte) &SUN3_PAGE_WRITEABLE ; }static inline int pte_dirty (pte_t pte) {return pte_val (pte) &SUN3_PAGE_MODIFIED ; }static inline int pte_young (pte_t pte) {return pte_val (pte) &SUN3_PAGE_ACCESSED ; } -static inline int pte_file (pte_t pte) {return pte_val (pte) &SUN3_PAGE_ACCESSED ; }static inline int pte_special (pte_t pte) {return 0 ; }static inline pte_t pte_wrprotect (pte_t pte) {pte_val (pte) &= ~SUN3_PAGE_WRITEABLE ;return pte; }
@@ -202,18 +199,6 @@ static inline pmd_t *pmd_offset (pgd_t *pgd, unsigned long address)return (pmd_t *) pgd; } -static inline unsigned long pte_to_pgoff (pte_t pte) -{ -return pte.pte &SUN3_PAGE_PGNUM_MASK ; -} - -static inline pte_t pgoff_to_pte (unsigned off) -{ -pte_t pte = { off +SUN3_PAGE_ACCESSED }; -return pte; -} - -/* Find an entry in the third-level pagetable. */ #define pte_index (address) ((address >> PAGE_SHIFT) & (PTRS_PER_PTE-1))#define pte_offset_kernel (pmd, address) ((pte_t *) __pmd_page(*pmd) + pte_index(address))
Signature · 1 line
2.1.3
PATCH v2 21/38 m68k: drop _PAGE_FILE and pte_file()-related helpers
We've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
---
v2: fix patch miss-fold -- move m68k changes from mips commit
--- arch/m68k/include/asm/mcf_pgtable.h | 23 ++--------------------- arch/m68k/include/asm/motorola_pgtable.h | 15 --------------- arch/m68k/include/asm/pgtable_no.h | 2 -- arch/m68k/include/asm/sun3_pgtable.h | 15 --------------- 4 files changed, 2 insertions(+), 53 deletions(-)
arch/m68k/include/asm/mcf_pgtable.h +2 -21
@@ -35,7 +35,6 @@* hitting hardware. */ #define CF_PAGE_DIRTY 0x00000001 -#define CF_PAGE_FILE 0x00000200#define CF_PAGE_ACCESSED 0x00001000#define _PAGE_CACHE040 0x020/* 68040 cache mode, cachable, copyback */
@@ -243,11 +242,6 @@ static inline int pte_young(pte_t pte)return pte_val (pte) &CF_PAGE_ACCESSED ; } -static inline int pte_file (pte_t pte) -{ -return pte_val (pte) &CF_PAGE_FILE ; -} -static inline int pte_special (pte_t pte) {return 0 ;
@@ -391,26 +385,13 @@ static inline void cache_page(void *vaddr) *ptep =pte_mkcache (*ptep); } -#define PTE_FILE_MAX_BITS 21 -#define PTE_FILE_SHIFT 11 - -static inline unsigned long pte_to_pgoff (pte_t pte) -{ -return pte_val (pte) >>PTE_FILE_SHIFT ; -} - -static inline pte_t pgoff_to_pte (unsigned pgoff) -{ -return __pte ((pgoff <<PTE_FILE_SHIFT ) +CF_PAGE_FILE ); -} -/* * Encode and de-code a swap entry (must be !pte_none(e) && !pte_present(e)) */ #define __swp_type (x) ((x).val & 0xFF) -#define __swp_offset (x) ((x).val >> PTE_FILE_SHIFT) +#define __swp_offset (x) ((x).val >> 11)#define __swp_entry (typ, off) ((swp_entry_t) { (typ) | \ - (off << PTE_FILE_SHIFT) }) + (off << 11) })#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) (__pte((x).val))
arch/m68k/include/asm/motorola_pgtable.h +0 -15
@@ -28,7 +28,6 @@#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__
@@ -168,7 +167,6 @@ static inline void pgd_set(pgd_t *pgdp, pmd_t *pmdp)static inline int pte_write (pte_t pte) {return !(pte_val (pte) & _PAGE_RONLY); }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_file (pte_t pte) {return pte_val (pte) & _PAGE_FILE; }static inline int pte_special (pte_t pte) {return 0 ; }static inline pte_t pte_wrprotect (pte_t pte) {pte_val (pte) |= _PAGE_RONLY;return pte; }
@@ -266,19 +264,6 @@ static inline void cache_page(void *vaddr) } } -#define PTE_FILE_MAX_BITS 28 - -static inline unsigned long pte_to_pgoff (pte_t pte) -{ -return pte.pte >>4 ; -} - -static inline pte_t pgoff_to_pte (unsigned off) -{ -pte_t pte = { (off <<4 ) + _PAGE_FILE }; -return pte; -} -/* Encode and de-code a swap entry (must be !pte_none(e) && !pte_present(e)) */ #define __swp_type (x) (((x).val >> 4) & 0xff)#define __swp_offset (x) ((x).val >> 12)
arch/m68k/include/asm/pgtable_no.h +0 -2
@@ -37,8 +37,6 @@ extern void paging_init(void);#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -static inline int pte_file (pte_t pte) {return 0 ; } -/* * ZERO_PAGE is a global shared page that is always zero: used * for zero-mapped memory areas etc..
arch/m68k/include/asm/sun3_pgtable.h +0 -15
@@ -38,8 +38,6 @@#define _PAGE_PRESENT (SUN3_PAGE_VALID)#define _PAGE_ACCESSED (SUN3_PAGE_ACCESSED) -#define PTE_FILE_MAX_BITS 28 -/* Compound page protection values. */ //todo: work out which ones *should* have SUN3_PAGE_NOCACHE and fix... // is it just PAGE_KERNEL and PAGE_SHARED?
@@ -168,7 +166,6 @@ static inline void pgd_clear (pgd_t *pgdp) {}static inline int pte_write (pte_t pte) {return pte_val (pte) &SUN3_PAGE_WRITEABLE ; }static inline int pte_dirty (pte_t pte) {return pte_val (pte) &SUN3_PAGE_MODIFIED ; }static inline int pte_young (pte_t pte) {return pte_val (pte) &SUN3_PAGE_ACCESSED ; } -static inline int pte_file (pte_t pte) {return pte_val (pte) &SUN3_PAGE_ACCESSED ; }static inline int pte_special (pte_t pte) {return 0 ; }static inline pte_t pte_wrprotect (pte_t pte) {pte_val (pte) &= ~SUN3_PAGE_WRITEABLE ;return pte; }
@@ -202,18 +199,6 @@ static inline pmd_t *pmd_offset (pgd_t *pgd, unsigned long address)return (pmd_t *) pgd; } -static inline unsigned long pte_to_pgoff (pte_t pte) -{ -return pte.pte &SUN3_PAGE_PGNUM_MASK ; -} - -static inline pte_t pgoff_to_pte (unsigned off) -{ -pte_t pte = { off +SUN3_PAGE_ACCESSED }; -return pte; -} - -/* Find an entry in the third-level pagetable. */ #define pte_index (address) ((address >> PAGE_SHIFT) & (PTRS_PER_PTE-1))#define pte_offset_kernel (pmd, address) ((pte_t *) __pmd_page(*pmd) + pte_index(address))
Signature · 7 lines
2.1.4 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 22/38 metag: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/metag/include/asm/pgtable.h | 6 ------ 1 file changed, 6 deletions(-)
arch/metag/include/asm/pgtable.h +0 -6
@@ -47,7 +47,6 @@*/ #define _PAGE_ACCESSED _PAGE_ALWAYS_ZERO_1#define _PAGE_DIRTY _PAGE_ALWAYS_ZERO_2 -#define _PAGE_FILE _PAGE_ALWAYS_ZERO_3/* Pages owned, and protected by, the kernel. */ #define _PAGE_KERNEL _PAGE_PRIV
@@ -219,7 +218,6 @@ extern unsigned long empty_zero_page;static inline int pte_write (pte_t pte) {return pte_val (pte) & _PAGE_WRITE; }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_file (pte_t pte) {return pte_val (pte) & _PAGE_FILE; }static inline int pte_special (pte_t pte) {return 0 ; }static inline pte_t pte_wrprotect (pte_t pte) {pte_val (pte) &= (~_PAGE_WRITE);return pte; }
@@ -327,10 +325,6 @@ static inline void update_mmu_cache(struct vm_area_struct *vma,#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -#define PTE_FILE_MAX_BITS 22 -#define pte_to_pgoff (x) (pte_val(x) >> 10) -#define pgoff_to_pte (x) __pte(((x) << 10) | _PAGE_FILE) -#define kern_addr_valid (addr) (1)/*
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Re: [PATCH 22/38] metag: drop _PAGE_FILE and pte_file()-related helpers
Quoted 5 lines · Kirill A. Shutemov
We've replaced
remap_file_pages(2)implementation with emulation. Nobody creates non-linear mapping anymore.Signed-off-by Kirill A. Shutemov <[email protected]>Cc James Hogan <[email protected]>
Cheers
James
Quoted 36 lines
--- arch/metag/include/asm/pgtable.h | 6 ------ 1 file changed, 6 deletions(-)arch/metag/include/asm/pgtable.h +0
-6@@ -47,7 +47,6 @@*/ #define _PAGE_ACCESSED _PAGE_ALWAYS_ZERO_1#define _PAGE_DIRTY _PAGE_ALWAYS_ZERO_2 -#define _PAGE_FILE _PAGE_ALWAYS_ZERO_3/* Pages owned, and protected by, the kernel. */ #define _PAGE_KERNEL _PAGE_PRIV@@ -219,7 +218,6 @@ extern unsigned long empty_zero_page;static inline int pte_write (pte_t pte) {return pte_val (pte) & _PAGE_WRITE; }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_file (pte_t pte) {return pte_val (pte) & _PAGE_FILE; }static inline int pte_special (pte_t pte) {return 0 ; }static inline pte_t pte_wrprotect (pte_t pte) {pte_val (pte) &= (~_PAGE_WRITE);return pte; }@@ -327,10 +325,6 @@ static inline void update_mmu_cache(struct vm_area_struct *vma,#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -#define PTE_FILE_MAX_BITS 22 -#define pte_to_pgoff (x) (pte_val(x) >> 10) -#define pgoff_to_pte (x) __pte(((x) << 10) | _PAGE_FILE) -#define kern_addr_valid (addr) (1)/*
PATCH 23/38 microblaze: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/microblaze/include/asm/pgtable.h | 11 ----------- 1 file changed, 11 deletions(-)
arch/microblaze/include/asm/pgtable.h +0 -11
@@ -40,10 +40,6 @@ extern int mem_init_done;#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -#ifndef __ASSEMBLY__ -static inline int pte_file (pte_t pte) {return 0 ; } -#endif /* __ASSEMBLY__ */ -#define ZERO_PAGE (vaddr) ({ BUG(); NULL; })#define swapper_pg_dir ((pgd_t *) NULL)
@@ -207,7 +203,6 @@ static inline pte_t pte_mkspecial(pte_t pte) { return pte; }/* Definitions for MicroBlaze. */ #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_NO_CACHE 0x004/* I: caching is inhibited */ #define _PAGE_WRITETHRU 0x008/* W: caching is write-through */
@@ -337,7 +332,6 @@ static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW; }static inline int pte_exec (pte_t pte) {return pte_val (pte) & _PAGE_EXEC; }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_file (pte_t pte) {return pte_val (pte) & _PAGE_FILE; }static inline void pte_uncache (pte_t pte) {pte_val (pte) |= _PAGE_NO_CACHE; }static inline void pte_cache (pte_t pte) {pte_val (pte) &= ~_PAGE_NO_CACHE; }
@@ -499,11 +493,6 @@ static inline pmd_t *pmd_offset(pgd_t *dir, unsigned long address)#define pte_unmap (pte) kunmap_atomic(pte) -/* 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 }) -extern pgd_t swapper_pg_dir[PTRS_PER_PGD ];/*
Signature · 1 line
2.1.3
PATCH 24/38 mips: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/m68k/include/asm/mcf_pgtable.h | 6 ++---- arch/mips/include/asm/pgtable-32.h | 36 ------------------------------------ arch/mips/include/asm/pgtable-64.h | 9 --------- arch/mips/include/asm/pgtable-bits.h | 9 --------- arch/mips/include/asm/pgtable.h | 2 -- 5 files changed, 2 insertions(+), 60 deletions(-)
arch/m68k/include/asm/mcf_pgtable.h +2 -4
@@ -385,15 +385,13 @@ static inline void cache_page(void *vaddr) *ptep =pte_mkcache (*ptep); } -#define PTE_FILE_SHIFT 11 -/* * Encode and de-code a swap entry (must be !pte_none(e) && !pte_present(e)) */ #define __swp_type (x) ((x).val & 0xFF) -#define __swp_offset (x) ((x).val >> PTE_FILE_SHIFT) +#define __swp_offset (x) ((x).val >> 11)#define __swp_entry (typ, off) ((swp_entry_t) { (typ) | \ - (off << PTE_FILE_SHIFT) }) + (off << 11) })#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) (__pte((x).val))
arch/mips/include/asm/pgtable-32.h +0 -36
@@ -161,22 +161,6 @@ pfn_pte(unsigned long pfn, pgprot_t prot)#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -/* -* Encode and decode a nonlinear file mapping entry -*/ -#define pte_to_pgoff (_pte) ((((_pte).pte >> 1 ) & 0x07) | \ - (((_pte).pte >> 2 ) & 0x38) | \ - (((_pte).pte >> 10) << 6 )) - -#define pgoff_to_pte (off) ((pte_t) { (((off) & 0x07) << 1 ) | \ - (((off) & 0x38) << 2 ) | \ - (((off) >> 6 ) << 10) | \ - _PAGE_FILE }) - -/* -* Bits 0, 4, 8, and 9 are taken, split up 28 bits of offset into this range: -*/ -#define PTE_FILE_MAX_BITS 28#else #if defined(CONFIG_PHYS_ADDR_T_64BIT ) && defined(CONFIG_CPU_MIPS32 )
@@ -188,13 +172,6 @@ pfn_pte(unsigned long pfn, pgprot_t prot)#define __pte_to_swp_entry (pte) ((swp_entry_t) { (pte).pte_high })#define __swp_entry_to_pte (x) ((pte_t) { 0, (x).val }) -/* -* Bits 0 and 1 of pte_high are taken, use the rest for the page offset... -*/ -#define pte_to_pgoff (_pte) ((_pte).pte_high >> 2) -#define pgoff_to_pte (off) ((pte_t) { _PAGE_FILE, (off) << 2 }) - -#define PTE_FILE_MAX_BITS 30#else /* * Constraints:
@@ -209,19 +186,6 @@ pfn_pte(unsigned long pfn, pgprot_t prot)#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -/* -* Encode and decode a nonlinear file mapping entry -*/ -#define pte_to_pgoff (_pte) ((((_pte).pte >> 1) & 0x7) | \ - (((_pte).pte >> 2) & 0x8) | \ - (((_pte).pte >> 8) << 4)) - -#define pgoff_to_pte (off) ((pte_t) { (((off) & 0x7) << 1) | \ - (((off) & 0x8) << 2) | \ - (((off) >> 4) << 8) | \ - _PAGE_FILE }) - -#define PTE_FILE_MAX_BITS 28#endif /* defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32) */ #endif /* defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX) */
arch/mips/include/asm/pgtable-64.h +0 -9
@@ -291,13 +291,4 @@ static inline pte_t mk_swap_pte(unsigned long type, unsigned long offset)#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -/* -* Bits 0, 4, 6, and 7 are taken. Let's leave bits 1, 2, 3, and 5 alone to -* make things easier, and only use the upper 56 bits for the page offset... -*/ -#define PTE_FILE_MAX_BITS 56 - -#define pte_to_pgoff (_pte) ((_pte).pte >> 8) -#define pgoff_to_pte (off) ((pte_t) { ((off) << 8) | _PAGE_FILE }) -#endif /* _ASM_PGTABLE_64_H */
arch/mips/include/asm/pgtable-bits.h +0 -9
@@ -48,8 +48,6 @@/* * The following bits are implemented in software -* -* _PAGE_FILE semantics: set:pagecache unset:swap */ #define _PAGE_PRESENT_SHIFT (_CACHE_SHIFT + 3)#define _PAGE_PRESENT (1 << _PAGE_PRESENT_SHIFT)
@@ -64,7 +62,6 @@#define _PAGE_SILENT_READ _PAGE_VALID#define _PAGE_SILENT_WRITE _PAGE_DIRTY -#define _PAGE_FILE _PAGE_MODIFIED#define _PFN_SHIFT (PAGE_SHIFT - 12 + _CACHE_SHIFT + 3)
@@ -72,8 +69,6 @@/* * The following are implemented by software -* -* _PAGE_FILE semantics: set:pagecache unset:swap */ #define _PAGE_PRESENT_SHIFT 0#define _PAGE_PRESENT (1 << _PAGE_PRESENT_SHIFT)
@@ -85,8 +80,6 @@#define _PAGE_ACCESSED (1 << _PAGE_ACCESSED_SHIFT)#define _PAGE_MODIFIED_SHIFT 4#define _PAGE_MODIFIED (1 << _PAGE_MODIFIED_SHIFT) -#define _PAGE_FILE_SHIFT 4 -#define _PAGE_FILE (1 << _PAGE_FILE_SHIFT)/* * And these are the hardware TLB bits
@@ -116,7 +109,6 @@* The following bits are implemented in software * * _PAGE_READ / _PAGE_READ_SHIFT should be unused if cpu_has_rixi. -* _PAGE_FILE semantics: set:pagecache unset:swap */ #define _PAGE_PRESENT_SHIFT (0)#define _PAGE_PRESENT (1 << _PAGE_PRESENT_SHIFT)
@@ -128,7 +120,6 @@#define _PAGE_ACCESSED (1 << _PAGE_ACCESSED_SHIFT)#define _PAGE_MODIFIED_SHIFT (_PAGE_ACCESSED_SHIFT + 1)#define _PAGE_MODIFIED (1 << _PAGE_MODIFIED_SHIFT) -#define _PAGE_FILE (_PAGE_MODIFIED)#ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT /* huge tlb page */
arch/mips/include/asm/pgtable.h +0 -2
@@ -231,7 +231,6 @@ extern pgd_t swapper_pg_dir[];static inline int pte_write (pte_t pte) {return pte.pte_low & _PAGE_WRITE; }static inline int pte_dirty (pte_t pte) {return pte.pte_low & _PAGE_MODIFIED; }static inline int pte_young (pte_t pte) {return pte.pte_low & _PAGE_ACCESSED; } -static inline int pte_file (pte_t pte) {return pte.pte_low & _PAGE_FILE; }static inline pte_t pte_wrprotect (pte_t pte) {
@@ -287,7 +286,6 @@ static inline pte_t pte_mkyoung(pte_t pte)static inline int pte_write (pte_t pte) {return pte_val (pte) & _PAGE_WRITE; }static inline int pte_dirty (pte_t pte) {return pte_val (pte) & _PAGE_MODIFIED; }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 pte_t pte_wrprotect (pte_t pte) {
Signature · 1 line
2.1.3
Geert Uytterhoeven
maintainerRe: [PATCH 24/38] mips: drop _PAGE_FILE and pte_file()-related helpers
Quoted 7 lines · Kirill A. Shutemov
We've replaced
remap_file_pages(2)implementation with emulation. Nobody creates non-linear mapping anymore.Signed-off-by Kirill A. Shutemov <[email protected]>Cc Ralf Baechle <[email protected]>--- arch/m68k/include/asm/mcf_pgtable.h | 6 ++----
This contains a change to an m68k header file.
The same file was modified in the m68k part of the series, but this change was not included?
Quoted 9 lines
arch/m68k/include/asm/mcf_pgtable.h +0
-2@@ -385,15 +385,13 @@ static inline void cache_page(void *vaddr) *ptep =pte_mkcache (*ptep); } -#define PTE_FILE_SHIFT 11 -/*
arch/m68k/include/asm/mcf_pgtable.h static inline void cache_page(void *vaddr) · line 396
Quoted 10 lines
arch/m68k/include/asm/mcf_pgtable.h +2
-2* Encode and de-code a swap entry (must be !pte_none(e) && !pte_present(e)) */ #define __swp_type (x) ((x).val & 0xFF) -#define __swp_offset (x) ((x).val >> PTE_FILE_SHIFT) +#define __swp_offset (x) ((x).val >> 11)#define __swp_entry (typ, off) ((swp_entry_t) { (typ) | \ - (off << PTE_FILE_SHIFT) }) + (off << 11) })#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) (__pte((x).val))
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Re: [PATCH 24/38] mips: drop _PAGE_FILE and pte_file()-related helpers
Quoted 5 lines · Geert Uytterhoeven
Quoted 3 lines · Kirill A. Shutemov
We've replaced
remap_file_pages(2)implementation with emulation. Nobody creates non-linear mapping anymore.
Quoted 8 lines
Quoted 4 lines
Signed-off-by Kirill A. Shutemov <[email protected]>Cc Ralf Baechle <[email protected]>--- arch/m68k/include/asm/mcf_pgtable.h | 6 ++----This contains a change to an m68k header file.
The same file was modified in the m68k part of the series, but this change was not included?
Oops. I've folded this into wrong patch. Will fix.
Signature · 7 lines
Kirill A. Shutemov -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH v2 24/38 mips: drop _PAGE_FILE and pte_file()-related helpers
In reply to Geert UytterhoevenWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
---
v2: fix patch miss-fold -- move out m68k changes from mips commit
--- arch/mips/include/asm/pgtable-32.h | 36 ------------------------------------ arch/mips/include/asm/pgtable-64.h | 9 --------- arch/mips/include/asm/pgtable-bits.h | 9 --------- arch/mips/include/asm/pgtable.h | 2 -- 4 files changed, 56 deletions(-)
arch/mips/include/asm/pgtable-32.h +0 -36
@@ -161,22 +161,6 @@ pfn_pte(unsigned long pfn, pgprot_t prot)#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -/* -* Encode and decode a nonlinear file mapping entry -*/ -#define pte_to_pgoff (_pte) ((((_pte).pte >> 1 ) & 0x07) | \ - (((_pte).pte >> 2 ) & 0x38) | \ - (((_pte).pte >> 10) << 6 )) - -#define pgoff_to_pte (off) ((pte_t) { (((off) & 0x07) << 1 ) | \ - (((off) & 0x38) << 2 ) | \ - (((off) >> 6 ) << 10) | \ - _PAGE_FILE }) - -/* -* Bits 0, 4, 8, and 9 are taken, split up 28 bits of offset into this range: -*/ -#define PTE_FILE_MAX_BITS 28#else #if defined(CONFIG_PHYS_ADDR_T_64BIT ) && defined(CONFIG_CPU_MIPS32 )
@@ -188,13 +172,6 @@ pfn_pte(unsigned long pfn, pgprot_t prot)#define __pte_to_swp_entry (pte) ((swp_entry_t) { (pte).pte_high })#define __swp_entry_to_pte (x) ((pte_t) { 0, (x).val }) -/* -* Bits 0 and 1 of pte_high are taken, use the rest for the page offset... -*/ -#define pte_to_pgoff (_pte) ((_pte).pte_high >> 2) -#define pgoff_to_pte (off) ((pte_t) { _PAGE_FILE, (off) << 2 }) - -#define PTE_FILE_MAX_BITS 30#else /* * Constraints:
@@ -209,19 +186,6 @@ pfn_pte(unsigned long pfn, pgprot_t prot)#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -/* -* Encode and decode a nonlinear file mapping entry -*/ -#define pte_to_pgoff (_pte) ((((_pte).pte >> 1) & 0x7) | \ - (((_pte).pte >> 2) & 0x8) | \ - (((_pte).pte >> 8) << 4)) - -#define pgoff_to_pte (off) ((pte_t) { (((off) & 0x7) << 1) | \ - (((off) & 0x8) << 2) | \ - (((off) >> 4) << 8) | \ - _PAGE_FILE }) - -#define PTE_FILE_MAX_BITS 28#endif /* defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32) */ #endif /* defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX) */
arch/mips/include/asm/pgtable-64.h +0 -9
@@ -291,13 +291,4 @@ static inline pte_t mk_swap_pte(unsigned long type, unsigned long offset)#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -/* -* Bits 0, 4, 6, and 7 are taken. Let's leave bits 1, 2, 3, and 5 alone to -* make things easier, and only use the upper 56 bits for the page offset... -*/ -#define PTE_FILE_MAX_BITS 56 - -#define pte_to_pgoff (_pte) ((_pte).pte >> 8) -#define pgoff_to_pte (off) ((pte_t) { ((off) << 8) | _PAGE_FILE }) -#endif /* _ASM_PGTABLE_64_H */
arch/mips/include/asm/pgtable-bits.h +0 -9
@@ -48,8 +48,6 @@/* * The following bits are implemented in software -* -* _PAGE_FILE semantics: set:pagecache unset:swap */ #define _PAGE_PRESENT_SHIFT (_CACHE_SHIFT + 3)#define _PAGE_PRESENT (1 << _PAGE_PRESENT_SHIFT)
@@ -64,7 +62,6 @@#define _PAGE_SILENT_READ _PAGE_VALID#define _PAGE_SILENT_WRITE _PAGE_DIRTY -#define _PAGE_FILE _PAGE_MODIFIED#define _PFN_SHIFT (PAGE_SHIFT - 12 + _CACHE_SHIFT + 3)
@@ -72,8 +69,6 @@/* * The following are implemented by software -* -* _PAGE_FILE semantics: set:pagecache unset:swap */ #define _PAGE_PRESENT_SHIFT 0#define _PAGE_PRESENT (1 << _PAGE_PRESENT_SHIFT)
@@ -85,8 +80,6 @@#define _PAGE_ACCESSED (1 << _PAGE_ACCESSED_SHIFT)#define _PAGE_MODIFIED_SHIFT 4#define _PAGE_MODIFIED (1 << _PAGE_MODIFIED_SHIFT) -#define _PAGE_FILE_SHIFT 4 -#define _PAGE_FILE (1 << _PAGE_FILE_SHIFT)/* * And these are the hardware TLB bits
@@ -116,7 +109,6 @@* The following bits are implemented in software * * _PAGE_READ / _PAGE_READ_SHIFT should be unused if cpu_has_rixi. -* _PAGE_FILE semantics: set:pagecache unset:swap */ #define _PAGE_PRESENT_SHIFT (0)#define _PAGE_PRESENT (1 << _PAGE_PRESENT_SHIFT)
@@ -128,7 +120,6 @@#define _PAGE_ACCESSED (1 << _PAGE_ACCESSED_SHIFT)#define _PAGE_MODIFIED_SHIFT (_PAGE_ACCESSED_SHIFT + 1)#define _PAGE_MODIFIED (1 << _PAGE_MODIFIED_SHIFT) -#define _PAGE_FILE (_PAGE_MODIFIED)#ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT /* huge tlb page */
arch/mips/include/asm/pgtable.h +0 -2
@@ -231,7 +231,6 @@ extern pgd_t swapper_pg_dir[];static inline int pte_write (pte_t pte) {return pte.pte_low & _PAGE_WRITE; }static inline int pte_dirty (pte_t pte) {return pte.pte_low & _PAGE_MODIFIED; }static inline int pte_young (pte_t pte) {return pte.pte_low & _PAGE_ACCESSED; } -static inline int pte_file (pte_t pte) {return pte.pte_low & _PAGE_FILE; }static inline pte_t pte_wrprotect (pte_t pte) {
@@ -287,7 +286,6 @@ static inline pte_t pte_mkyoung(pte_t pte)static inline int pte_write (pte_t pte) {return pte_val (pte) & _PAGE_WRITE; }static inline int pte_dirty (pte_t pte) {return pte_val (pte) & _PAGE_MODIFIED; }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 pte_t pte_wrprotect (pte_t pte) {
Signature · 7 lines
2.1.4 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 25/38 mn10300: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
This patch also increase number of bits availble for swap offset.
--- arch/mn10300/include/asm/pgtable.h | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-)
arch/mn10300/include/asm/pgtable.h +3 -14
@@ -134,7 +134,6 @@ extern pte_t kernel_vmalloc_ptes[(VMALLOC_END - VMALLOC_START) / PAGE_SIZE];#define _PAGE_NX 0/* no-execute bit */ /* If _PAGE_VALID is clear, we use these: */ -#define _PAGE_FILE xPTEL2_C/* set:pagecache unset:swap */ #define _PAGE_PROTNONE 0x000/* If not present */ #define __PAGE_PROT_UWAUX 0x010
@@ -241,11 +240,6 @@ static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; }static inline int pte_write (pte_t pte) {return pte_val (pte) & __PAGE_PROT_WRITE; }static inline int pte_special (pte_t pte){return 0 ; } -/* -* The following only works if pte_present() is not true. -*/ -static inline int pte_file (pte_t pte) {return pte_val (pte) & _PAGE_FILE; } -static inline pte_t pte_rdprotect (pte_t pte) {pte_val (pte) &= ~(__PAGE_PROT_USER|__PAGE_PROT_UWAUX);return pte;
@@ -338,16 +332,11 @@ static inline int pte_exec_kernel(pte_t pte)return 1 ; } -#define PTE_FILE_MAX_BITS 30 - -#define pte_to_pgoff (pte) (pte_val(pte) >> 2) -#define pgoff_to_pte (off) __pte((off) << 2 | _PAGE_FILE) -/* Encode and de-code a swap entry */ -#define __swp_type (x) (((x).val >> 2) & 0x3f) -#define __swp_offset (x) ((x).val >> 8) +#define __swp_type (x) (((x).val >> 1) & 0x3f) +#define __swp_offset (x) ((x).val >> 7)#define __swp_entry (type, offset) \ - ((swp_entry_t) { ((type) << 2) | ((offset) << 8) }) + ((swp_entry_t) { ((type) << 1) | ((offset) << 7) })#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) __pte((x).val)
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 26/38 nios2: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/nios2/include/asm/pgtable-bits.h | 1 - arch/nios2/include/asm/pgtable.h | 10 +--------- 2 files changed, 1 insertion(+), 10 deletions(-)
arch/nios2/include/asm/pgtable-bits.h +0 -1
@@ -30,6 +30,5 @@#define _PAGE_PRESENT (1<<25)/* PTE contains a translation */ #define _PAGE_ACCESSED (1<<26)/* page referenced */ #define _PAGE_DIRTY (1<<27)/* dirty page */ -#define _PAGE_FILE (1<<28)/* PTE used for file mapping or swap */ #endif /* _ASM_NIOS2_PGTABLE_BITS_H */
arch/nios2/include/asm/pgtable.h +1 -9
@@ -112,8 +112,6 @@ 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_file (pte_t pte) \ - {return pte_val (pte) & _PAGE_FILE; }static inline int pte_special (pte_t pte) {return 0 ; }#define pgprot_noncached pgprot_noncached
@@ -272,8 +270,7 @@ static inline void pte_clear(struct mm_struct *mm, __FILE__, __LINE__, pgd_val(e))/* -* Encode and decode a swap entry (must be !pte_none(pte) && !pte_present(pte) -* && !pte_file(pte)): +* Encode and decode a swap entry (must be !pte_none(pte) && !pte_present(pte): * * 31 30 29 28 27 26 25 24 23 22 21 20 19 18 ... 1 0 * 0 0 0 0 type. 0 0 0 0 0 0 offset.........
@@ -290,11 +287,6 @@ static inline void pte_clear(struct mm_struct *mm,#define __swp_entry_to_pte (swp) ((pte_t) { (swp).val })#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) }) -/* Encode and decode a nonlinear file mapping entry */ -#define PTE_FILE_MAX_BITS 25 -#define pte_to_pgoff (pte) (pte_val(pte) & 0x1ffffff) -#define pgoff_to_pte (off) __pte(((off) & 0x1ffffff) | _PAGE_FILE) -#define kern_addr_valid (addr) (1)#include <asm-generic/pgtable.h>
Signature · 1 line
2.1.3
Re: [PATCH 26/38] nios2: drop _PAGE_FILE and pte_file()-related helpers
Quoted 5 lines · Kirill A. Shutemov
We've replaced
remap_file_pages(2)implementation with emulation. Nobody creates non-linear mapping anymore.Signed-off-by Kirill A. Shutemov <[email protected]>Cc Ley Foon Tan <[email protected]>
Ley Foon Tan
Acked-byRe: [PATCH 26/38] nios2: drop _PAGE_FILE and pte_file()-related helpers
Quoted 8 lines · Tobias Klauser
Quoted 5 lines · Kirill A. Shutemov
We've replaced
remap_file_pages(2)implementation with emulation. Nobody creates non-linear mapping anymore.Signed-off-by Kirill A. Shutemov <[email protected]>Cc Ley Foon Tan <[email protected]>Reviewed-by Tobias Klauser <[email protected]>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 27/38 openrisc: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/openrisc/include/asm/pgtable.h | 8 -------- arch/openrisc/kernel/head.S | 5 ----- 2 files changed, 13 deletions(-)
arch/openrisc/include/asm/pgtable.h +0 -8
@@ -125,7 +125,6 @@ extern void paging_init(void);#define _PAGE_CC 0x001/* software: pte contains a translation */ #define _PAGE_CI 0x002/* cache inhibit */ #define _PAGE_WBC 0x004/* write back cache */ -#define _PAGE_FILE 0x004/* set: pagecache, unset: swap (when !PRESENT) */ #define _PAGE_WOM 0x008/* weakly ordered memory */ #define _PAGE_A 0x010/* accessed */
@@ -240,7 +239,6 @@ static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_WRITE; }static inline int pte_exec (pte_t pte) {return pte_val (pte) & _PAGE_EXEC; }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_file (pte_t pte) {return pte_val (pte) & _PAGE_FILE; }static inline int pte_special (pte_t pte) {return 0 ; }static inline pte_t pte_mkspecial (pte_t pte) {return pte; }
@@ -438,12 +436,6 @@ static inline void update_mmu_cache(struct vm_area_struct *vma,#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -/* Encode and decode a nonlinear file mapping entry */ - -#define PTE_FILE_MAX_BITS 26 -#define pte_to_pgoff (x) (pte_val(x) >> 6) -#define pgoff_to_pte (x) __pte(((x) << 6) | _PAGE_FILE) -#define kern_addr_valid (addr) (1)#include <asm-generic/pgtable.h>
arch/openrisc/kernel/head.S +0 -5
@@ -754,11 +754,6 @@ _dc_enable: /* ===============================================[ page table masks ]=== */ -/* bit 4 is used in hardware as write back cache bit. we never use this bit - * explicitly, so we can reuse it as _PAGE_FILE bit and mask it out when - * writing into hardware pte's - */ - #define DTLB_UP_CONVERT_MASK 0x3fa #define ITLB_UP_CONVERT_MASK 0x3a
Signature · 1 line
2.1.3
PATCH 28/38 parisc: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/parisc/include/asm/pgtable.h | 10 ---------- 1 file changed, 10 deletions(-)
arch/parisc/include/asm/pgtable.h +0 -10
@@ -146,7 +146,6 @@ extern void purge_tlb_entries(struct mm_struct *, unsigned long);#define _PAGE_GATEWAY_BIT 28/* (0x008) privilege promotion allowed */ #define _PAGE_DMB_BIT 27/* (0x010) Data Memory Break enable (B bit) */ #define _PAGE_DIRTY_BIT 26/* (0x020) Page Dirty (D bit) */ -#define _PAGE_FILE_BIT _PAGE_DIRTY_BIT/* overload this bit */ #define _PAGE_REFTRAP_BIT 25/* (0x040) Page Ref. Trap enable (T bit) */ #define _PAGE_NO_CACHE_BIT 24/* (0x080) Uncached Page (U bit) */ #define _PAGE_ACCESSED_BIT 23/* (0x100) Software: Page Accessed */
@@ -167,13 +166,6 @@ extern void purge_tlb_entries(struct mm_struct *, unsigned long);/* PFN_PTE_SHIFT defines the shift of a PTE value to access the PFN field */ #define PFN_PTE_SHIFT 12 - -/* this is how many bits may be used by the file functions */ -#define PTE_FILE_MAX_BITS (BITS_PER_LONG - PTE_SHIFT) - -#define pte_to_pgoff (pte) (pte_val(pte) >> PTE_SHIFT) -#define pgoff_to_pte (off) ((pte_t) { ((off) << PTE_SHIFT) | _PAGE_FILE }) -#define _PAGE_READ (1 << xlate_pabit(_PAGE_READ_BIT))#define _PAGE_WRITE (1 << xlate_pabit(_PAGE_WRITE_BIT))#define _PAGE_RW (_PAGE_READ | _PAGE_WRITE)
@@ -186,7 +178,6 @@ extern void purge_tlb_entries(struct mm_struct *, unsigned long);#define _PAGE_ACCESSED (1 << xlate_pabit(_PAGE_ACCESSED_BIT))#define _PAGE_PRESENT (1 << xlate_pabit(_PAGE_PRESENT_BIT))#define _PAGE_USER (1 << xlate_pabit(_PAGE_USER_BIT)) -#define _PAGE_FILE (1 << xlate_pabit(_PAGE_FILE_BIT))#define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | _PAGE_DIRTY | _PAGE_ACCESSED)#define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY)
@@ -344,7 +335,6 @@ static inline void pgd_clear(pgd_t * pgdp) { }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_write (pte_t pte) {return pte_val (pte) & _PAGE_WRITE; } -static inline int pte_file (pte_t pte) {return pte_val (pte) & _PAGE_FILE; }static inline int pte_special (pte_t pte) {return 0 ; }static inline pte_t pte_mkclean (pte_t pte) {pte_val (pte) &= ~_PAGE_DIRTY;return pte; }
Signature · 1 line
2.1.3
PATCH 29/38 powerpc: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/powerpc/include/asm/pgtable-ppc32.h | 9 ++------- arch/powerpc/include/asm/pgtable-ppc64.h | 5 +---- arch/powerpc/include/asm/pgtable.h | 1 - arch/powerpc/include/asm/pte-40x.h | 1 - arch/powerpc/include/asm/pte-44x.h | 5 ----- arch/powerpc/include/asm/pte-8xx.h | 1 - arch/powerpc/include/asm/pte-book3e.h | 1 - arch/powerpc/include/asm/pte-fsl-booke.h | 3 --- arch/powerpc/include/asm/pte-hash32.h | 1 - arch/powerpc/include/asm/pte-hash64.h | 1 - arch/powerpc/mm/pgtable_64.c | 2 +- 11 files changed, 4 insertions(+), 26 deletions(-)
arch/powerpc/include/asm/pgtable-ppc32.h +2 -7
@@ -332,8 +332,8 @@ static inline void __ptep_set_access_flags(pte_t *ptep, pte_t entry)/* * Encode and decode 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 -*_PAGE_HASHPTE bit (if used). -- paulus +* must not include the _PAGE_PRESENT bit or the _PAGE_HASHPTE bit (if used). +* -- paulus */ #define __swp_type (entry) ((entry).val & 0x1f)#define __swp_offset (entry) ((entry).val >> 5)
@@ -341,11 +341,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 __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 }) -/* * No page table caches to initialise */
arch/powerpc/include/asm/pgtable-ppc64.h +1 -4
@@ -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 __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 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_init (void );
@@ -389,7 +386,7 @@ void pgtable_cache_init(void);* 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 * 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) {
arch/powerpc/include/asm/pgtable.h +0 -1
@@ -33,7 +33,6 @@ struct mm_struct;static inline int pte_write (pte_t pte) {return pte_val (pte) & _PAGE_RW; }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_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_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 ); }
arch/powerpc/include/asm/pte-40x.h +0 -1
@@ -38,7 +38,6 @@*/ #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_NO_CACHE 0x004/* I: caching is inhibited */ #define _PAGE_WRITETHRU 0x008/* W: caching is write-through */
arch/powerpc/include/asm/pte-44x.h +0 -5
@@ -44,9 +44,6 @@* - PRESENT *must* be in the bottom three bits because swap cache * 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, * 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
@@ -68,7 +65,6 @@* * There are three protection bits available for SWAP entry: * _PAGE_PRESENT -* _PAGE_FILE * _PAGE_HASHPTE (if HW has) * * 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_RW 0x00000002/* S: Write permission */ -#define _PAGE_FILE 0x00000004/* S: nonlinear file mapping */ #define _PAGE_EXEC 0x00000004/* H: Execute permission */ #define _PAGE_ACCESSED 0x00000008/* S: Page referenced */ #define _PAGE_DIRTY 0x00000010/* S: Page dirty */
arch/powerpc/include/asm/pte-8xx.h +0 -1
@@ -29,7 +29,6 @@/* Definitions for 8xx embedded chips. */ #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_SHARED 0x0004/* No ASID (context) compare */ #define _PAGE_SPECIAL 0x0008/* SW entry, forced to 0 by the TLB miss */
arch/powerpc/include/asm/pte-book3e.h +0 -1
@@ -10,7 +10,6 @@/* Architected bits */ #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_BAP_SR 0x000004#define _PAGE_BAP_UR 0x000008
arch/powerpc/include/asm/pte-fsl-booke.h +0 -3
@@ -13,14 +13,11 @@- PRESENT *must* be in the bottom three bits because swap cache 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 */ #define _PAGE_PRESENT 0x00001/* S: PTE contains a translation */ #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_DIRTY 0x00008/* S: Page dirty */ #define _PAGE_EXEC 0x00010/* H: SX permission */
arch/powerpc/include/asm/pte-hash32.h +0 -1
@@ -18,7 +18,6 @@#define _PAGE_PRESENT 0x001/* software: pte contains a translation */ #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_GUARDED 0x008/* G: prohibit speculative access */ #define _PAGE_COHERENT 0x010/* M: enforce memory coherence (SMP systems) */
arch/powerpc/include/asm/pte-hash64.h +0 -1
@@ -16,7 +16,6 @@*/ #define _PAGE_PRESENT 0x0001/* software: pte contains a translation */ #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_GUARDED 0x0008/* We can derive Memory coherence from _PAGE_NO_CACHE */
arch/powerpc/mm/pgtable_64.c +1 -1
@@ -781,7 +781,7 @@ pmd_t pfn_pmd(unsigned long pfn, pgprot_t pgprot) {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. * leaf pte for huge page, bottom two bits != 00 */
Signature · 1 line
2.1.3
Re: [PATCH 29/38] powerpc: drop _PAGE_FILE and pte_file()-related helpers
Quoted 7 lines · Kirill A. Shutemov
We've replaced
remap_file_pages(2)implementation with emulation. Nobody creates non-linear mapping anymore.Signed-off-by Kirill A. Shutemov <[email protected]>Cc Benjamin Herrenschmidt <[email protected]>Cc Paul Mackerras <[email protected]>Cc Michael Ellerman <[email protected]>
Quoted 13 lines
--- arch/powerpc/include/asm/pgtable-ppc32.h | 9 ++------- arch/powerpc/include/asm/pgtable-ppc64.h | 5 +---- arch/powerpc/include/asm/pgtable.h | 1 - arch/powerpc/include/asm/pte-40x.h | 1 - arch/powerpc/include/asm/pte-44x.h | 5 ----- arch/powerpc/include/asm/pte-8xx.h | 1 - arch/powerpc/include/asm/pte-book3e.h | 1 - arch/powerpc/include/asm/pte-fsl-booke.h | 3 --- arch/powerpc/include/asm/pte-hash32.h | 1 - arch/powerpc/include/asm/pte-hash64.h | 1 - arch/powerpc/mm/pgtable_64.c | 2 +- 11 files changed, 4 insertions(+), 26 deletions(-)
These bits look fine to me.
cheers
PATCH 30/38 s390: drop pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/s390/include/asm/pgtable.h | 29 ++++------------------------- 1 file changed, 4 insertions(+), 25 deletions(-)
arch/s390/include/asm/pgtable.h +4 -25
@@ -249,10 +249,10 @@ static inline int is_module_addr(void *addr) _PAGE_YOUNG)/* -* handle_pte_fault uses pte_present, pte_none and pte_file to find out the -* pte type WITHOUT holding the page table lock. The _PAGE_PRESENT bit -* is used to distinguish present from not-present ptes. It is changed only -* with the page table lock held. +* handle_pte_fault uses pte_present and pte_none to find out the pte type +* WITHOUT holding the page table lock. The _PAGE_PRESENT bit is used to +* distinguish present from not-present ptes. It is changed only with the page +* table lock held. * * The following table gives the different possible bit combinations for * the pte hardware and software bits in the last 12 bits of a pte:
@@ -279,7 +279,6 @@ static inline int is_module_addr(void *addr)* * pte_present is true for the bit pattern .xx...xxxxx1, (pte & 0x001) == 0x001 * pte_none is true for the bit pattern .10...xxxx00, (pte & 0x603) == 0x400 -* pte_file is true for the bit pattern .11...xxxxx0, (pte & 0x601) == 0x600 * pte_swap is true for the bit pattern .10...xxxx10, (pte & 0x603) == 0x402 */
@@ -671,13 +670,6 @@ static inline int pte_swap(pte_t pte) == (_PAGE_INVALID | _PAGE_TYPE); } -static inline int pte_file (pte_t pte) -{ -/* Bit pattern: (pte & 0x601) == 0x600 */ -return (pte_val (pte) & (_PAGE_INVALID | _PAGE_PROTECT | _PAGE_PRESENT)) - == (_PAGE_INVALID | _PAGE_PROTECT); -} -static inline int pte_special (pte_t pte) {return (pte_val (pte) & _PAGE_SPECIAL);
@@ -1756,19 +1748,6 @@ static inline pte_t mk_swap_pte(unsigned long type, unsigned long offset)#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -#ifndef CONFIG_64BIT -# define PTE_FILE_MAX_BITS 26 -#else /* CONFIG_64BIT */ -# define PTE_FILE_MAX_BITS 59 -#endif /* CONFIG_64BIT */ - -#define pte_to_pgoff (__pte) \ - ((((__pte).pte >> 12) << 7) + (((__pte).pte >> 1) & 0x7f)) - -#define pgoff_to_pte (__off) \ - ((pte_t) { ((((__off) & 0x7f) << 1) + (((__off) >> 7) << 12)) \ - | _PAGE_INVALID | _PAGE_PROTECT }) -#endif /* !__ASSEMBLY__ */ #define kern_addr_valid (addr) (1)
Signature · 1 line
2.1.3
Re: [PATCH 30/38] s390: drop pte_file()-related helpers
Quoted 8 lines · On Wed, 24 Dec 2014 14:22:38 +0200 "Kirill A. Shutemov"…
We've replaced
remap_file_pages(2)implementation with emulation. Nobody creates non-linear mapping anymore.Signed-off-by Kirill A. Shutemov <[email protected]>Cc Martin Schwidefsky <[email protected]>Cc Heiko Carstens <[email protected]>---
arch/s390/include/asm/pgtable.h static inline int is_module_addr(void *addr) · line 283
Quoted 6 lines
arch/s390/include/asm/pgtable.h +0
-1@@ -279,7 +279,6 @@ static inline int is_module_addr(void *addr)* * pte_present is true for the bit pattern .xx...xxxxx1, (pte & 0x001) == 0x001 * pte_none is true for the bit pattern .10...xxxx00, (pte & 0x603) == 0x400 -* pte_file is true for the bit pattern .11...xxxxx0, (pte & 0x601) == 0x600 * pte_swap is true for the bit pattern .10...xxxx10, (pte & 0x603) == 0x402 */
Nice, once this is upstream I can free up one of the software bits in the pte by redefining the type bits. Right now all of them are used up. Is the removal of non-linear mappings a done deal ?
Signature · 4 lines
blue skies, Martin. "Reality continues to ruin my life." - Calvin.
Re: [PATCH 30/38] s390: drop pte_file()-related helpers
Quoted 6 lines · Martin Schwidefsky
Quoted 3 lines · On Wed, 24 Dec 2014 14:22:38 +0200 "Kirill A. Shutemov"…
We've replaced
remap_file_pages(2)implementation with emulation. Nobody creates non-linear mapping anymore.
Quoted 15 lines
arch/s390/include/asm/pgtable.h static inline int is_module_addr(void *addr) · line 283
Quoted 11 lines
Signed-off-by Kirill A. Shutemov <[email protected]>Cc Martin Schwidefsky <[email protected]>Cc Heiko Carstens <[email protected]>---
arch/s390/include/asm/pgtable.h +0
-1@@ -279,7 +279,6 @@ static inline int is_module_addr(void *addr)* * pte_present is true for the bit pattern .xx...xxxxx1, (pte & 0x001) == 0x001 * pte_none is true for the bit pattern .10...xxxx00, (pte & 0x603) == 0x400 -* pte_file is true for the bit pattern .11...xxxxx0, (pte & 0x601) == 0x600 * pte_swap is true for the bit pattern .10...xxxx10, (pte & 0x603) == 0x402 */ Nice, once this is upstream I can free up one of the software bits in the pte by redefining the type bits. Right now all of them are used up. Is the removal of non-linear mappings a done deal ?
Yes, if no horrible regression will be reported. We don't create non-linear mapping in -mm (and -next) tree for a few release cycles. Nobody complained so far.
Ack?
Signature · 7 lines
Kirill A. Shutemov -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Re: [PATCH 30/38] s390: drop pte_file()-related helpers
Quoted 23 lines · On Mon, 29 Dec 2014 12:37:57 +0200 "Kirill A. Shutemov" <[email protected]>…
Quoted 6 lines · Martin Schwidefsky
Quoted 3 lines · On Wed, 24 Dec 2014 14:22:38 +0200 "Kirill A. Shutemov"…
We've replaced
remap_file_pages(2)implementation with emulation. Nobody creates non-linear mapping anymore.Quoted 15 lines
arch/s390/include/asm/pgtable.h static inline int is_module_addr(void *addr) · line 283
Quoted 11 lines
Signed-off-by Kirill A. Shutemov <[email protected]>Cc Martin Schwidefsky <[email protected]>Cc Heiko Carstens <[email protected]>---
arch/s390/include/asm/pgtable.h +0
-1@@ -279,7 +279,6 @@ static inline int is_module_addr(void *addr)* * pte_present is true for the bit pattern .xx...xxxxx1, (pte & 0x001) == 0x001 * pte_none is true for the bit pattern .10...xxxx00, (pte & 0x603) == 0x400 -* pte_file is true for the bit pattern .11...xxxxx0, (pte & 0x601) == 0x600 * pte_swap is true for the bit pattern .10...xxxx10, (pte & 0x603) == 0x402 */ Nice, once this is upstream I can free up one of the software bits in the pte by redefining the type bits. Right now all of them are used up. Is the removal of non-linear mappings a done deal ?
Quoted 5 lines
Yes, if no horrible regression will be reported. We don't create non-linear mapping in -mm (and -next) tree for a few release cycles. Nobody complained so far.
Ack?
Yes, ack!
Signature · 10 lines
blue skies, Martin. "Reality continues to ruin my life." - Calvin. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 31/38 score: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
This patch also increase number of bits availble for swap offset.
--- arch/score/include/asm/pgtable-bits.h | 1 - arch/score/include/asm/pgtable.h | 18 ++---------------- 2 files changed, 2 insertions(+), 17 deletions(-)
arch/score/include/asm/pgtable-bits.h +0 -1
@@ -6,7 +6,6 @@#define _PAGE_WRITE (1<<7)/* implemented in software */ #define _PAGE_PRESENT (1<<9)/* implemented in software */ #define _PAGE_MODIFIED (1<<10)/* implemented in software */ -#define _PAGE_FILE (1<<10)#define _PAGE_GLOBAL (1<<0)#define _PAGE_VALID (1<<1)
arch/score/include/asm/pgtable.h +2 -16
@@ -90,15 +90,6 @@ static inline void pmd_clear(pmd_t *pmdp) ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address))#define pte_unmap (pte) ((void)(pte)) -/* -* Bits 9(_PAGE_PRESENT) and 10(_PAGE_FILE)are taken, -* split up 30 bits of offset into this range: -*/ -#define PTE_FILE_MAX_BITS 30 -#define pte_to_pgoff (_pte) \ - (((_pte).pte & 0x1ff) | (((_pte).pte >> 11) << 9)) -#define pgoff_to_pte (off) \ - ((pte_t) {((off) & 0x1ff) | (((off) >> 9) << 11) | _PAGE_FILE})#define __pte_to_swp_entry (pte) \ ((swp_entry_t) { pte_val(pte)})#define __swp_entry_to_pte (x) ((pte_t) {(x).val})
@@ -169,8 +160,8 @@ static inline pgprot_t pgprot_noncached(pgprot_t _prot) }#define __swp_type (x) ((x).val & 0x1f) -#define __swp_offset (x) ((x).val >> 11) -#define __swp_entry (type, offset) ((swp_entry_t){(type) | ((offset) << 11)}) +#define __swp_offset (x) ((x).val >> 10) +#define __swp_entry (type, offset) ((swp_entry_t){(type) | ((offset) << 10)})extern unsigned long empty_zero_page;extern unsigned long zero_page_mask;
@@ -198,11 +189,6 @@ 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; -} -#define pte_special (pte) (0)static inline pte_t pte_wrprotect (pte_t pte)
Signature · 1 line
2.1.3
PATCH 32/38 sh: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/sh/include/asm/pgtable_32.h | 31 ++++--------------------------- arch/sh/include/asm/pgtable_64.h | 9 +-------- 2 files changed, 5 insertions(+), 35 deletions(-)
arch/sh/include/asm/pgtable_32.h +4 -27
@@ -26,8 +26,6 @@* and timing control which (together with bit 0) are moved into the * old-style PTEA on the parts that support it. * -* XXX: Leave the _PAGE_FILE and _PAGE_WT overhaul for a rainy day. -* * SH-X2 MMUs and extended PTEs * * SH-X2 supports an extended mode TLB with split data arrays due to the
@@ -51,7 +49,6 @@#define _PAGE_PRESENT 0x100/* V-bit : page is valid */ #define _PAGE_PROTNONE 0x200/* software: if not present */ #define _PAGE_ACCESSED 0x400/* software: page referenced */ -#define _PAGE_FILE _PAGE_WT/* software: pagecache or swap? */ #define _PAGE_SPECIAL 0x800/* software: special page */ #define _PAGE_SZ_MASK (_PAGE_SZ0 | _PAGE_SZ1)
@@ -105,14 +102,13 @@ static inline unsigned long copy_ptea_attributes(unsigned long x)/* Mask which drops unused bits from the PTEL value */ #if defined(CONFIG_CPU_SH3 )#define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED| \ - _PAGE_FILE | _PAGE_SZ1 | \ - _PAGE_HW_SHARED) + _PAGE_SZ1 | _PAGE_HW_SHARED)#elif defined(CONFIG_X2TLB )/* Get rid of the legacy PR/SZ bits when using extended mode */ #define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED | \ - _PAGE_FILE | _PAGE_PR_MASK | _PAGE_SZ_MASK) + _PAGE_PR_MASK | _PAGE_SZ_MASK)#else -#define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED | _PAGE_FILE) +#define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED)#endif #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)#define pte_not_present (pte) (!((pte).pte_low & _PAGE_PRESENT))#define pte_dirty (pte) ((pte).pte_low & _PAGE_DIRTY)#define pte_young (pte) ((pte).pte_low & _PAGE_ACCESSED) -#define pte_file (pte) ((pte).pte_low & _PAGE_FILE)#define pte_special (pte) ((pte).pte_low & _PAGE_SPECIAL)#ifdef CONFIG_X2TLB
@@ -445,7 +440,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)* Encode and de-code a swap entry * * Constraints: -* _PAGE_FILE at bit 0 * _PAGE_PRESENT at bit 8 * _PAGE_PROTNONE at bit 9 *
@@ -453,9 +447,7 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)* swap offset into bits 10:30. For the 64-bit PTE case, we keep the * preserved bits in the low 32-bits and use the upper 32 as the swap * offset (along with a 5-bit type), following the same approach as x86 -* PAE. This keeps the logic quite simple, and allows for a full 32 -* PTE_FILE_MAX_BITS, as opposed to the 29-bits we're constrained with -* in the pte_low case. +* PAE. This keeps the logic quite simple. * * As is evident by the Alpha code, if we ever get a 64-bit unsigned * 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)#define __pte_to_swp_entry (pte) ((swp_entry_t){ (pte).pte_high })#define __swp_entry_to_pte (x) ((pte_t){ 0, (x).val }) -/* -* Encode and decode a nonlinear file mapping entry -*/ -#define pte_to_pgoff (pte) ((pte).pte_high) -#define pgoff_to_pte (off) ((pte_t) { _PAGE_FILE, (off) }) - -#define PTE_FILE_MAX_BITS 32#else #define __swp_type (x) ((x).val & 0xff)#define __swp_offset (x) ((x).val >> 10)
@@ -486,13 +471,5 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) >> 1 })#define __swp_entry_to_pte (x) ((pte_t) { (x).val << 1 }) -/* -* Encode and decode a nonlinear file mapping entry -*/ -#define PTE_FILE_MAX_BITS 29 -#define pte_to_pgoff (pte) (pte_val(pte) >> 1) -#define pgoff_to_pte (off) ((pte_t) { ((off) << 1) | _PAGE_FILE }) -#endif -#endif /* __ASSEMBLY__ */ #endif /* __ASM_SH_PGTABLE_32_H */
arch/sh/include/asm/pgtable_64.h +1 -8
@@ -107,7 +107,6 @@ static __inline__ void set_pte(pte_t *pteptr, pte_t pteval)#define _PAGE_DEVICE 0x001/* CB0: if uncacheable, 1->device (i.e. no write-combining or reordering at bus level) */ #define _PAGE_CACHABLE 0x002/* CB1: uncachable/cachable */ #define _PAGE_PRESENT 0x004/* software: page referenced */ -#define _PAGE_FILE 0x004/* software: only when !present */ #define _PAGE_SIZE0 0x008/* SZ0-bit : size of page */ #define _PAGE_SIZE1 0x010/* SZ1-bit : size of page */ #define _PAGE_SHARED 0x020/* software: reflects PTEH's SH */
@@ -129,7 +128,7 @@ static __inline__ void set_pte(pte_t *pteptr, pte_t pteval)#define _PAGE_WIRED _PAGE_EXT(0x001)/* software: wire the tlb entry */ #define _PAGE_SPECIAL _PAGE_EXT(0x002) -#define _PAGE_CLEAR_FLAGS (_PAGE_PRESENT | _PAGE_FILE | _PAGE_SHARED | \ +#define _PAGE_CLEAR_FLAGS (_PAGE_PRESENT | _PAGE_SHARED | \ _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_WIRED)/* Mask which drops software flags */
@@ -260,7 +259,6 @@ static __inline__ void set_pte(pte_t *pteptr, pte_t pteval)*/ 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_file (pte_t pte) {return pte_val (pte) & _PAGE_FILE; }static inline int pte_write (pte_t pte) {return pte_val (pte) & _PAGE_WRITE; }static inline int pte_special (pte_t pte){return pte_val (pte) & _PAGE_SPECIAL; }
@@ -304,11 +302,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -/* Encode and decode a nonlinear file mapping entry */ -#define PTE_FILE_MAX_BITS 29 -#define pte_to_pgoff (pte) (pte_val(pte)) -#define pgoff_to_pte (off) ((pte_t) { (off) | _PAGE_FILE }) -#endif /* !__ASSEMBLY__ */ #define pfn_pte (pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 1/1 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.
---
v2: build fix: #endif is removed by mistake
--- arch/sh/include/asm/pgtable_32.h | 30 ++++-------------------------- arch/sh/include/asm/pgtable_64.h | 9 +-------- 2 files changed, 5 insertions(+), 34 deletions(-)
arch/sh/include/asm/pgtable_32.h +4 -26
@@ -26,8 +26,6 @@* and timing control which (together with bit 0) are moved into the * old-style PTEA on the parts that support it. * -* XXX: Leave the _PAGE_FILE and _PAGE_WT overhaul for a rainy day. -* * SH-X2 MMUs and extended PTEs * * SH-X2 supports an extended mode TLB with split data arrays due to the
@@ -51,7 +49,6 @@#define _PAGE_PRESENT 0x100/* V-bit : page is valid */ #define _PAGE_PROTNONE 0x200/* software: if not present */ #define _PAGE_ACCESSED 0x400/* software: page referenced */ -#define _PAGE_FILE _PAGE_WT/* software: pagecache or swap? */ #define _PAGE_SPECIAL 0x800/* software: special page */ #define _PAGE_SZ_MASK (_PAGE_SZ0 | _PAGE_SZ1)
@@ -105,14 +102,13 @@ static inline unsigned long copy_ptea_attributes(unsigned long x)/* Mask which drops unused bits from the PTEL value */ #if defined(CONFIG_CPU_SH3 )#define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED| \ - _PAGE_FILE | _PAGE_SZ1 | \ - _PAGE_HW_SHARED) + _PAGE_SZ1 | _PAGE_HW_SHARED)#elif defined(CONFIG_X2TLB )/* Get rid of the legacy PR/SZ bits when using extended mode */ #define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED | \ - _PAGE_FILE | _PAGE_PR_MASK | _PAGE_SZ_MASK) + _PAGE_PR_MASK | _PAGE_SZ_MASK)#else -#define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED | _PAGE_FILE) +#define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED)#endif #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)#define pte_not_present (pte) (!((pte).pte_low & _PAGE_PRESENT))#define pte_dirty (pte) ((pte).pte_low & _PAGE_DIRTY)#define pte_young (pte) ((pte).pte_low & _PAGE_ACCESSED) -#define pte_file (pte) ((pte).pte_low & _PAGE_FILE)#define pte_special (pte) ((pte).pte_low & _PAGE_SPECIAL)#ifdef CONFIG_X2TLB
@@ -445,7 +440,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)* Encode and de-code a swap entry * * Constraints: -* _PAGE_FILE at bit 0 * _PAGE_PRESENT at bit 8 * _PAGE_PROTNONE at bit 9 *
@@ -453,9 +447,7 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)* swap offset into bits 10:30. For the 64-bit PTE case, we keep the * preserved bits in the low 32-bits and use the upper 32 as the swap * offset (along with a 5-bit type), following the same approach as x86 -* PAE. This keeps the logic quite simple, and allows for a full 32 -* PTE_FILE_MAX_BITS, as opposed to the 29-bits we're constrained with -* in the pte_low case. +* PAE. This keeps the logic quite simple. * * As is evident by the Alpha code, if we ever get a 64-bit unsigned * 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)#define __pte_to_swp_entry (pte) ((swp_entry_t){ (pte).pte_high })#define __swp_entry_to_pte (x) ((pte_t){ 0, (x).val }) -/* -* Encode and decode a nonlinear file mapping entry -*/ -#define pte_to_pgoff (pte) ((pte).pte_high) -#define pgoff_to_pte (off) ((pte_t) { _PAGE_FILE, (off) }) - -#define PTE_FILE_MAX_BITS 32#else #define __swp_type (x) ((x).val & 0xff)#define __swp_offset (x) ((x).val >> 10)
@@ -485,13 +470,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) >> 1 })#define __swp_entry_to_pte (x) ((pte_t) { (x).val << 1 }) - -/* -* Encode and decode a nonlinear file mapping entry -*/ -#define PTE_FILE_MAX_BITS 29 -#define pte_to_pgoff (pte) (pte_val(pte) >> 1) -#define pgoff_to_pte (off) ((pte_t) { ((off) << 1) | _PAGE_FILE })#endif #endif /* __ASSEMBLY__ */
arch/sh/include/asm/pgtable_64.h +1 -8
@@ -107,7 +107,6 @@ static __inline__ void set_pte(pte_t *pteptr, pte_t pteval)#define _PAGE_DEVICE 0x001/* CB0: if uncacheable, 1->device (i.e. no write-combining or reordering at bus level) */ #define _PAGE_CACHABLE 0x002/* CB1: uncachable/cachable */ #define _PAGE_PRESENT 0x004/* software: page referenced */ -#define _PAGE_FILE 0x004/* software: only when !present */ #define _PAGE_SIZE0 0x008/* SZ0-bit : size of page */ #define _PAGE_SIZE1 0x010/* SZ1-bit : size of page */ #define _PAGE_SHARED 0x020/* software: reflects PTEH's SH */
@@ -129,7 +128,7 @@ static __inline__ void set_pte(pte_t *pteptr, pte_t pteval)#define _PAGE_WIRED _PAGE_EXT(0x001)/* software: wire the tlb entry */ #define _PAGE_SPECIAL _PAGE_EXT(0x002) -#define _PAGE_CLEAR_FLAGS (_PAGE_PRESENT | _PAGE_FILE | _PAGE_SHARED | \ +#define _PAGE_CLEAR_FLAGS (_PAGE_PRESENT | _PAGE_SHARED | \ _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_WIRED)/* Mask which drops software flags */
@@ -260,7 +259,6 @@ static __inline__ void set_pte(pte_t *pteptr, pte_t pteval)*/ 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_file (pte_t pte) {return pte_val (pte) & _PAGE_FILE; }static inline int pte_write (pte_t pte) {return pte_val (pte) & _PAGE_WRITE; }static inline int pte_special (pte_t pte){return pte_val (pte) & _PAGE_SPECIAL; }
@@ -304,11 +302,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -/* Encode and decode a nonlinear file mapping entry */ -#define PTE_FILE_MAX_BITS 29 -#define pte_to_pgoff (pte) (pte_val(pte)) -#define pgoff_to_pte (off) ((pte_t) { (off) | _PAGE_FILE }) -#endif /* !__ASSEMBLY__ */ #define pfn_pte (pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 33/38 sparc: drop pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
This patch also increase number of bits availble for swap offset.
--- arch/sparc/include/asm/pgtable_32.h | 24 ---------------------- arch/sparc/include/asm/pgtable_64.h | 40 ------------------------------------- arch/sparc/include/asm/pgtsrmmu.h | 14 +++++-------- 3 files changed, 5 insertions(+), 73 deletions(-)
arch/sparc/include/asm/pgtable_32.h +0 -24
@@ -221,14 +221,6 @@ static inline int pte_young(pte_t pte)return pte_val (pte) &SRMMU_REF ; } -/* -* The following only work if pte_present() is not true. -*/ -static inline int pte_file (pte_t pte) -{ -return pte_val (pte) &SRMMU_FILE ; -} -static inline int pte_special (pte_t pte) {return 0 ;
@@ -375,22 +367,6 @@ static inline swp_entry_t __swp_entry(unsigned long type, unsigned long offset)#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -/* file-offset-in-pte helpers */ -static inline unsigned long pte_to_pgoff (pte_t pte) -{ -return pte_val (pte) >>SRMMU_PTE_FILE_SHIFT ; -} - -static inline pte_t pgoff_to_pte (unsigned long pgoff) -{ -return __pte ((pgoff <<SRMMU_PTE_FILE_SHIFT ) |SRMMU_FILE ); -} - -/* -* This is made a constant because mm/fremap.c required a constant. -*/ -#define PTE_FILE_MAX_BITS 24 -static inline unsigned long __get_phys (unsigned long addr) {
arch/sparc/include/asm/pgtable_64.h +0 -40
@@ -137,7 +137,6 @@ bool kern_addr_valid(unsigned long addr);#define _PAGE_SOFT_4U _AC(0x0000000000001F80,UL)/* Software bits: */ #define _PAGE_EXEC_4U _AC(0x0000000000001000,UL)/* Executable SW bit */ #define _PAGE_MODIFIED_4U _AC(0x0000000000000800,UL)/* Modified (dirty) */ -#define _PAGE_FILE_4U _AC(0x0000000000000800,UL)/* Pagecache page */ #define _PAGE_ACCESSED_4U _AC(0x0000000000000400,UL)/* Accessed (ref'd) */ #define _PAGE_READ_4U _AC(0x0000000000000200,UL)/* Readable SW Bit */ #define _PAGE_WRITE_4U _AC(0x0000000000000100,UL)/* Writable SW Bit */
@@ -167,7 +166,6 @@ bool kern_addr_valid(unsigned long addr);#define _PAGE_EXEC_4V _AC(0x0000000000000080,UL)/* Executable Page */ #define _PAGE_W_4V _AC(0x0000000000000040,UL)/* Writable */ #define _PAGE_SOFT_4V _AC(0x0000000000000030,UL)/* Software bits */ -#define _PAGE_FILE_4V _AC(0x0000000000000020,UL)/* Pagecache page */ #define _PAGE_PRESENT_4V _AC(0x0000000000000010,UL)/* Present */ #define _PAGE_RESV_4V _AC(0x0000000000000008,UL)/* Reserved */ #define _PAGE_SZ16GB_4V _AC(0x0000000000000007,UL)/* 16GB Page */
@@ -332,22 +330,6 @@ static inline pmd_t pmd_modify(pmd_t pmd, pgprot_t newprot) }#endif -static inline pte_t pgoff_to_pte (unsigned long off) -{ - off <<=PAGE_SHIFT ; - - __asm__ __volatile__( -"\n661: or %0, %2, %0\n" -" .section .sun4v_1insn_patch, \"ax\"\n" -" .word 661b\n" -" or %0, %3, %0\n" -" .previous\n" - :"=r" (off) - :"0" (off),"i" (_PAGE_FILE_4U),"i" (_PAGE_FILE_4V)); - -return __pte (off); -} -static inline pgprot_t pgprot_noncached (pgprot_t prot) {unsigned long val =pgprot_val (prot);
@@ -609,22 +591,6 @@ static inline unsigned long pte_exec(pte_t pte)return (pte_val (pte) & mask); } -static inline unsigned long pte_file (pte_t pte) -{ -unsigned long val =pte_val (pte); - - __asm__ __volatile__( -"\n661: and %0, %2, %0\n" -" .section .sun4v_1insn_patch, \"ax\"\n" -" .word 661b\n" -" and %0, %3, %0\n" -" .previous\n" - :"=r" (val) - :"0" (val),"i" (_PAGE_FILE_4U),"i" (_PAGE_FILE_4V)); - -return val; -} -static inline unsigned long pte_present (pte_t pte) {unsigned long val =pte_val (pte);
@@ -980,12 +946,6 @@ pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp);#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -/* File offset in PTE support. */ -unsigned long pte_file (pte_t ); -#define pte_to_pgoff (pte) (pte_val(pte) >> PAGE_SHIFT) -pte_t pgoff_to_pte (unsigned long ); -#define PTE_FILE_MAX_BITS (64UL - PAGE_SHIFT - 1UL) -int page_in_phys_avail (unsigned long paddr);/*
arch/sparc/include/asm/pgtsrmmu.h +5 -9
@@ -80,10 +80,6 @@#define SRMMU_PRIV 0x1c#define SRMMU_PRIV_RDONLY 0x18 -#define SRMMU_FILE 0x40/* Implemented in software */ - -#define SRMMU_PTE_FILE_SHIFT 8/* == 32-PTE_FILE_MAX_BITS */ -#define SRMMU_CHG_MASK (0xffffff00 | SRMMU_REF | SRMMU_DIRTY)/* SRMMU swap entry encoding
@@ -94,13 +90,13 @@* oooooooooooooooooootttttRRRRRRRR * fedcba9876543210fedcba9876543210 * -* The bottom 8 bits are reserved for protection and status bits, especially -* FILE and PRESENT. +* The bottom 7 bits are reserved for protection and status bits, especially +* PRESENT. */ #define SRMMU_SWP_TYPE_MASK 0x1f -#define SRMMU_SWP_TYPE_SHIFT SRMMU_PTE_FILE_SHIFT -#define SRMMU_SWP_OFF_MASK 0x7ffff -#define SRMMU_SWP_OFF_SHIFT (SRMMU_PTE_FILE_SHIFT + 5) +#define SRMMU_SWP_TYPE_SHIFT 7 +#define SRMMU_SWP_OFF_MASK 0xfffff +#define SRMMU_SWP_OFF_SHIFT (SRMMU_SWP_TYPE_SHIFT + 5)/* Some day I will implement true fine grained access bits for * user pages because the SRMMU gives us the capabilities to
Signature · 1 line
2.1.3
Re: [PATCH 33/38] sparc: drop pte_file()-related helpers
From: "Kirill A. Shutemov" <[email protected]>
Date: Wed, 24 Dec 2014 14:22:41 +0200
Quoted 7 lines
We've replaced
remap_file_pages(2)implementation with emulation. Nobody creates non-linear mapping anymore.This patch also increase number of bits availble for swap offset.
Signed-off-by Kirill A. Shutemov <[email protected]>Cc "David S. Miller" <[email protected]>
PATCH 34/38 tile: drop pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/tile/include/asm/pgtable.h | 11 ----------- arch/tile/mm/homecache.c | 4 ---- 2 files changed, 15 deletions(-)
arch/tile/include/asm/pgtable.h +0 -11
@@ -285,17 +285,6 @@ extern void start_mm_caching(struct mm_struct *mm);extern void check_mm_caching (struct mm_struct *prev,struct mm_struct *next);/* -* Support non-linear file mappings (see sys_remap_file_pages). -* This is defined by CLIENT1 set but CLIENT0 and _PAGE_PRESENT clear, and the -* file offset in the 32 high bits. -*/ -#define _PAGE_FILE HV_PTE_CLIENT1 -#define PTE_FILE_MAX_BITS 32 -#define pte_file (pte) (hv_pte_get_client1(pte) && !hv_pte_get_client0(pte)) -#define pte_to_pgoff (pte) ((pte).val >> 32) -#define pgoff_to_pte (off) ((pte_t) { (((long long)(off)) << 32) | _PAGE_FILE }) - -/* * Encode and de-code a swap entry (see <linux/swapops.h>). * We put the swap file type+offset in the 32 high bits; * I believe we can just leave the low bits clear.
arch/tile/mm/homecache.c +0 -4
@@ -263,10 +263,6 @@ static int pte_to_home(pte_t pte)/* Update the home of a PTE if necessary (can also be used for a pgprot_t). */ pte_t pte_set_home (pte_t pte,int home) { -/* Check for non-linear file mapping "PTEs" and pass them through. */ -if (pte_file (pte)) -return pte; -#if CHIP_HAS_MMIO ()/* Check for MMIO mappings and pass them through. */ if (hv_pte_get_mode (pte) ==HV_PTE_MODE_MMIO )
Signature · 1 line
2.1.3
Re: [PATCH 34/38] tile: drop pte_file()-related helpers
Quoted 9 lines · Kirill A. Shutemov
We've replaced
remap_file_pages(2)implementation with emulation. Nobody creates non-linear mapping anymore.Signed-off-by Kirill A. Shutemov<[email protected]>Cc Chris Metcalf<[email protected]>--- arch/tile/include/asm/pgtable.h | 11 ----------- arch/tile/mm/homecache.c | 4 ---- 2 files changed, 15 deletions(-)
Signature · 8 lines
Chris Metcalf, EZChip Semiconductor http://www.ezchip.com -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 35/38 um: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/um/include/asm/pgtable-2level.h | 9 --------- arch/um/include/asm/pgtable-3level.h | 20 -------------------- arch/um/include/asm/pgtable.h | 9 --------- 3 files changed, 38 deletions(-)
arch/um/include/asm/pgtable-2level.h +0 -9
@@ -41,13 +41,4 @@ static inline void pgd_mkuptodate(pgd_t pgd) { }#define pfn_pte (pfn, prot) __pte(pfn_to_phys(pfn) | pgprot_val(prot))#define pfn_pmd (pfn, prot) __pmd(pfn_to_phys(pfn) | pgprot_val(prot)) -/* -* Bits 0 through 4 are taken -*/ -#define PTE_FILE_MAX_BITS 27 - -#define pte_to_pgoff (pte) (pte_val(pte) >> 5) - -#define pgoff_to_pte (off) ((pte_t) { ((off) << 5) + _PAGE_FILE }) -#endif
arch/um/include/asm/pgtable-3level.h +0 -20
@@ -112,25 +112,5 @@ static inline pmd_t pfn_pmd(pfn_t page_nr, pgprot_t pgprot) return __pmd((page_nr << PAGE_SHIFT) | pgprot_val(pgprot)); } -/* -* Bits 0 through 3 are taken in the low part of the pte, -* put the 32 bits of offset into the high part. -*/ -#define PTE_FILE_MAX_BITS 32 - -#ifdef CONFIG_64BIT - -#define pte_to_pgoff (p) ((p).pte >> 32) - -#define pgoff_to_pte (off) ((pte_t) { ((off) << 32) | _PAGE_FILE }) - -#else - -#define pte_to_pgoff (pte) ((pte).pte_high) - -#define pgoff_to_pte (off) ((pte_t) { _PAGE_FILE, (off) }) - -#endif -#endif
arch/um/include/asm/pgtable.h +0 -9
@@ -18,7 +18,6 @@#define _PAGE_ACCESSED 0x080#define _PAGE_DIRTY 0x100/* If _PAGE_PRESENT is clear, we use these: */ -#define _PAGE_FILE 0x008/* nonlinear file mapping, saved PTE; unset:swap */ #define _PAGE_PROTNONE 0x010/* if the user mapped it with PROT_NONE; pte_present gives true */
@@ -151,14 +150,6 @@ static inline int pte_write(pte_t pte) !(pte_get_bits(pte, _PAGE_PROTNONE))); } -/* -* The following only works if pte_present() is not true. -*/ -static inline int pte_file (pte_t pte) -{ -return pte_get_bits (pte, _PAGE_FILE); -} -static inline int pte_dirty (pte_t pte) {return pte_get_bits (pte, _PAGE_DIRTY);
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 36/38 unicore32: drop pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/unicore32/include/asm/pgtable-hwdef.h | 1 - arch/unicore32/include/asm/pgtable.h | 14 -------------- 2 files changed, 15 deletions(-)
arch/unicore32/include/asm/pgtable-hwdef.h +0 -1
@@ -44,7 +44,6 @@#define PTE_TYPE_INVALID (3 << 0)#define PTE_PRESENT (1 << 2) -#define PTE_FILE (1 << 3)/* only when !PRESENT */ #define PTE_YOUNG (1 << 3)#define PTE_DIRTY (1 << 4)#define PTE_CACHEABLE (1 << 5)
arch/unicore32/include/asm/pgtable.h +0 -14
@@ -283,20 +283,6 @@ extern pgd_t swapper_pg_dir[PTRS_PER_PGD];#define MAX_SWAPFILES_CHECK () \ BUILD_BUG_ON(MAX_SWAPFILES_SHIFT > __SWP_TYPE_BITS) -/* -* Encode and decode a file entry. File entries are stored in the Linux -* page tables as follows: -* -* 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 -* 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 -* <----------------------- offset ----------------------> 1 0 0 0 -*/ -#define pte_file (pte) (pte_val(pte) & PTE_FILE) -#define pte_to_pgoff (x) (pte_val(x) >> 4) -#define pgoff_to_pte (x) __pte(((x) << 4) | PTE_FILE) - -#define PTE_FILE_MAX_BITS 28 -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ /* FIXME: this is not correct */ #define kern_addr_valid (addr) (1)
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 37/38 x86: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/x86/include/asm/pgtable-2level.h | 38 +---------------------------------- arch/x86/include/asm/pgtable-3level.h | 12 ----------- arch/x86/include/asm/pgtable.h | 20 ------------------ arch/x86/include/asm/pgtable_64.h | 6 +----- arch/x86/include/asm/pgtable_types.h | 3 --- 5 files changed, 2 insertions(+), 77 deletions(-)
arch/x86/include/asm/pgtable-2level.h +1 -37
@@ -62,44 +62,8 @@ static inline unsigned long pte_bitop(unsigned long value, unsigned int rightshireturn ((value >> rightshift) & mask) << leftshift; } -/* -* Bits _PAGE_BIT_PRESENT, _PAGE_BIT_FILE and _PAGE_BIT_PROTNONE are taken, -* split up the 29 bits of offset into this range. -*/ -#define PTE_FILE_MAX_BITS 29 -#define PTE_FILE_SHIFT1 (_PAGE_BIT_PRESENT + 1) -#define PTE_FILE_SHIFT2 (_PAGE_BIT_FILE + 1) -#define PTE_FILE_SHIFT3 (_PAGE_BIT_PROTNONE + 1) -#define PTE_FILE_BITS1 (PTE_FILE_SHIFT2 - PTE_FILE_SHIFT1 - 1) -#define PTE_FILE_BITS2 (PTE_FILE_SHIFT3 - PTE_FILE_SHIFT2 - 1) - -#define PTE_FILE_MASK1 ((1U << PTE_FILE_BITS1) - 1) -#define PTE_FILE_MASK2 ((1U << PTE_FILE_BITS2) - 1) - -#define PTE_FILE_LSHIFT2 (PTE_FILE_BITS1) -#define PTE_FILE_LSHIFT3 (PTE_FILE_BITS1 + PTE_FILE_BITS2) - -static __always_inline pgoff_t pte_to_pgoff(pte_t pte) -{ -return (pgoff_t) - (pte_bitop (pte.pte_low,PTE_FILE_SHIFT1 ,PTE_FILE_MASK1 ,0 ) + -pte_bitop (pte.pte_low,PTE_FILE_SHIFT2 ,PTE_FILE_MASK2 ,PTE_FILE_LSHIFT2 ) + -pte_bitop (pte.pte_low,PTE_FILE_SHIFT3 ,-1UL ,PTE_FILE_LSHIFT3 )); -} - -static __always_inline pte_t pgoff_to_pte(pgoff_t off) -{ -return (pte_t ){ - .pte_low = -pte_bitop (off,0 ,PTE_FILE_MASK1 ,PTE_FILE_SHIFT1 ) + -pte_bitop (off,PTE_FILE_LSHIFT2 ,PTE_FILE_MASK2 ,PTE_FILE_SHIFT2 ) + -pte_bitop (off,PTE_FILE_LSHIFT3 ,-1UL ,PTE_FILE_SHIFT3 ) + - _PAGE_FILE, - }; -} -/* Encode and de-code a swap entry */ -#define SWP_TYPE_BITS (_PAGE_BIT_FILE - _PAGE_BIT_PRESENT - 1) +#define SWP_TYPE_BITS 5#define SWP_OFFSET_SHIFT (_PAGE_BIT_PROTNONE + 1)#define MAX_SWAPFILES_CHECK () BUILD_BUG_ON(MAX_SWAPFILES_SHIFT > SWP_TYPE_BITS)
arch/x86/include/asm/pgtable-3level.h +0 -12
@@ -176,18 +176,6 @@ static inline pmd_t native_pmdp_get_and_clear(pmd_t *pmdp)#define native_pmdp_get_and_clear (xp) native_local_pmdp_get_and_clear(xp)#endif -/* -* Bits 0, 6 and 7 are taken in the low part of the pte, -* put the 32 bits of offset into the high part. -* -* For soft-dirty tracking 11 bit is taken from -* the low part of pte as well. -*/ -#define pte_to_pgoff (pte) ((pte).pte_high) -#define pgoff_to_pte (off) \ - ((pte_t) { { .pte_low = _PAGE_FILE, .pte_high = (off) } }) -#define PTE_FILE_MAX_BITS 32 -/* Encode and de-code a swap entry */ #define MAX_SWAPFILES_CHECK () BUILD_BUG_ON(MAX_SWAPFILES_SHIFT > 5)#define __swp_type (x) (((x).val) & 0x1f)
arch/x86/include/asm/pgtable.h +0 -20
@@ -115,11 +115,6 @@ static inline int pte_write(pte_t pte)return pte_flags (pte) & _PAGE_RW; } -static inline int pte_file (pte_t pte) -{ -return pte_flags (pte) & _PAGE_FILE; -} -static inline int pte_huge (pte_t pte) {return pte_flags (pte) & _PAGE_PSE;
@@ -334,21 +329,6 @@ static inline pmd_t pmd_mksoft_dirty(pmd_t pmd) return pmd_set_flags(pmd, _PAGE_SOFT_DIRTY); } -static inline pte_t pte_file_clear_soft_dirty (pte_t pte) -{ -return pte_clear_flags (pte, _PAGE_SOFT_DIRTY); -} - -static inline pte_t pte_file_mksoft_dirty (pte_t pte) -{ -return pte_set_flags (pte, _PAGE_SOFT_DIRTY); -} - -static inline int pte_file_soft_dirty (pte_t pte) -{ -return pte_flags (pte) & _PAGE_SOFT_DIRTY; -} -#endif /* CONFIG_HAVE_ARCH_SOFT_DIRTY */ /*
arch/x86/include/asm/pgtable_64.h +1 -5
@@ -133,10 +133,6 @@ static inline int pgd_large(pgd_t pgd) { return 0; }/* PUD - Level3 access */ /* PMD - Level 2 access */ -#define pte_to_pgoff (pte) ((pte_val((pte)) & PHYSICAL_PAGE_MASK) >> PAGE_SHIFT) -#define pgoff_to_pte (off) ((pte_t) { .pte = ((off) << PAGE_SHIFT) | \ - _PAGE_FILE }) -#define PTE_FILE_MAX_BITS __PHYSICAL_MASK_SHIFT/* PTE - Level 1 access. */
@@ -145,7 +141,7 @@ static inline int pgd_large(pgd_t pgd) { return 0; }#define pte_unmap (pte) ((void)(pte))/* NOP */ /* Encode and de-code a swap entry */ -#define SWP_TYPE_BITS (_PAGE_BIT_FILE - _PAGE_BIT_PRESENT - 1) +#define SWP_TYPE_BITS 5#ifdef CONFIG_NUMA_BALANCING /* Automatic NUMA balancing needs to be distinguishable from swap entries */ #define SWP_OFFSET_SHIFT (_PAGE_BIT_PROTNONE + 2)
arch/x86/include/asm/pgtable_types.h +0 -3
@@ -38,8 +38,6 @@/* If _PAGE_BIT_PRESENT is clear, we use these: */ /* - if the user mapped it with PROT_NONE; pte_present gives true */ #define _PAGE_BIT_PROTNONE _PAGE_BIT_GLOBAL -/* - set: nonlinear file mapping, saved PTE; unset:swap */ -#define _PAGE_BIT_FILE _PAGE_BIT_DIRTY#define _PAGE_PRESENT (_AT(pteval_t, 1) << _PAGE_BIT_PRESENT)#define _PAGE_RW (_AT(pteval_t, 1) << _PAGE_BIT_RW)
@@ -114,7 +112,6 @@#define _PAGE_NX (_AT(pteval_t, 0))#endif -#define _PAGE_FILE (_AT(pteval_t, 1) << _PAGE_BIT_FILE)#define _PAGE_PROTNONE (_AT(pteval_t, 1) << _PAGE_BIT_PROTNONE)#define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | \
Signature · 7 lines
2.1.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
PATCH 38/38 xtensa: drop _PAGE_FILE and pte_file()-related helpers
In reply to Kirill A. ShutemovWe've replaced remap_file_pages(2) implementation with emulation. Nobody creates non-linear mapping anymore.
--- arch/xtensa/include/asm/pgtable.h | 10 ---------- 1 file changed, 10 deletions(-)
arch/xtensa/include/asm/pgtable.h +0 -10
@@ -89,8 +89,6 @@* (PAGE_NONE)| PPN | 0 | 00 | ADW | 01 | 11 | 11 | * +-----------------------------------------+ * swap | index | type | 01 | 11 | 00 | -* +- - - - - - - - - - - - - - - - - - - - -+ -* file | file offset | 01 | 11 | 10 | * +-----------------------------------------+ * * For T1050 hardware and earlier the layout differs for present and (PAGE_NONE)
@@ -111,7 +109,6 @@* index swap offset / PAGE_SIZE (bit 11-31: 21 bits -> 8 GB) * (note that the index is always non-zero) * type swap type (5 bits -> 32 types) -* file offset 26-bit offset into the file, in increments of PAGE_SIZE * * Notes: * - (PROT_NONE) is a special case of 'present' but causes an exception for
@@ -144,7 +141,6 @@#define _PAGE_HW_VALID 0x00#define _PAGE_NONE 0x0f#endif -#define _PAGE_FILE (1<<1)/* file mapped page, only if !present */ #define _PAGE_USER (1<<4)/* user access (ring=1) */
@@ -260,7 +256,6 @@ static inline void pgtable_cache_init(void) { }static inline int pte_write (pte_t pte) {return pte_val (pte) & _PAGE_WRITABLE; }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_file (pte_t pte) {return pte_val (pte) & _PAGE_FILE; }static inline int pte_special (pte_t pte) {return 0 ; }static inline pte_t pte_wrprotect (pte_t pte)
@@ -390,11 +385,6 @@ ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep)#define __pte_to_swp_entry (pte) ((swp_entry_t) { pte_val(pte) })#define __swp_entry_to_pte (x) ((pte_t) { (x).val }) -#define PTE_FILE_MAX_BITS 26 -#define pte_to_pgoff (pte) (pte_val(pte) >> 6) -#define pgoff_to_pte (off) \ - ((pte_t) { ((off) << 6) | _PAGE_CA_INVALID | _PAGE_FILE | _PAGE_USER }) -#endif /* !defined (__ASSEMBLY__) */
Signature · 1 line
2.1.3
Re: [PATCH 38/38] xtensa: drop _PAGE_FILE and pte_file()-related helpers
Quoted 8 lines · Kirill A. Shutemov
We've replaced
remap_file_pages(2)implementation with emulation. Nobody creates non-linear mapping anymore.Signed-off-by Kirill A. Shutemov <[email protected]>Cc Max Filippov <[email protected]>--- arch/xtensa/include/asm/pgtable.h | 10 ---------- 1 file changed, 10 deletions(-)
Signature · 8 lines
Thanks. -- Max -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Quoted 11 lines · Kirill A. Shutemov
We have
remap_file_pages(2)emulation in -mm tree for few release cycles and we plan to have it mainline in v3.20. This patchset removes rest ofVM_NONLINEARinfrastructure.Patches 1-8 take care about generic code. They are pretty straight-forward and can be applied without other of patches.
Rest patches removes pte_file()-related stuff from architecture-specific code. It usually frees up one bit in non-present pte. I've tried to reuse that bit for swap offset, where I was able to figure out how to do that.
Quoted 7 lines
For obvious reason I cannot test all that arch-specific code and would like to see acks from maintainers.
In total,
remap_file_pages(2)required about 1.4K lines of not-so-trivial kernel code. That's too much for functionality nobody uses.
git://git.kernel.org/pub/scm/linux/kernel/git/kas/linux.gitremap_file_pages
have been running this for a while on a three different ARM boards I have around, haven't noticed anything wrong.
Signature · 1 line
balbi