Commit cc2383ec06be093789469852e1fe96e1148e9a2c

Authored by Konstantin Khlebnikov
Committed by Linus Torvalds
1 parent b3b9c2932c

mm: introduce arch-specific vma flag VM_ARCH_1

Combine several arch-specific vma flags into one.

before patch:

        0x00000200      0x01000000      0x20000000      0x40000000
x86     VM_NOHUGEPAGE   VM_HUGEPAGE     -               VM_PAT
powerpc -               -               VM_SAO          -
parisc  VM_GROWSUP      -               -               -
ia64    VM_GROWSUP      -               -               -
nommu   -               VM_MAPPED_COPY  -               -
others  -               -               -               -

after patch:

        0x00000200      0x01000000      0x20000000      0x40000000
x86     -               VM_PAT          VM_HUGEPAGE     VM_NOHUGEPAGE
powerpc -               VM_SAO          -               -
parisc  -               VM_GROWSUP      -               -
ia64    -               VM_GROWSUP      -               -
nommu   -               VM_MAPPED_COPY  -               -
others  -               VM_ARCH_1       -               -

And voila! One completely free bit.

Signed-off-by: Konstantin Khlebnikov <khlebnikov@openvz.org>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Carsten Otte <cotte@de.ibm.com>
Cc: Chris Metcalf <cmetcalf@tilera.com>
Cc: Cyrill Gorcunov <gorcunov@openvz.org>
Cc: Eric Paris <eparis@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Morris <james.l.morris@oracle.com>
Cc: Jason Baron <jbaron@redhat.com>
Cc: Kentaro Takeda <takedakn@nttdata.co.jp>
Cc: Matt Helsley <matthltc@us.ibm.com>
Cc: Nick Piggin <npiggin@kernel.dk>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Robert Richter <robert.richter@amd.com>
Cc: Suresh Siddha <suresh.b.siddha@intel.com>
Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Cc: Venkatesh Pallipadi <venki@google.com>
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 3 changed files with 28 additions and 15 deletions Side-by-side Diff

... ... @@ -70,6 +70,8 @@
70 70 /*
71 71 * vm_flags in vm_area_struct, see mm_types.h.
72 72 */
  73 +#define VM_NONE 0x00000000
  74 +
73 75 #define VM_READ 0x00000001 /* currently active flags */
74 76 #define VM_WRITE 0x00000002
75 77 #define VM_EXEC 0x00000004
... ... @@ -82,12 +84,6 @@
82 84 #define VM_MAYSHARE 0x00000080
83 85  
84 86 #define VM_GROWSDOWN 0x00000100 /* general info on the segment */
85   -#if defined(CONFIG_STACK_GROWSUP) || defined(CONFIG_IA64)
86   -#define VM_GROWSUP 0x00000200
87   -#else
88   -#define VM_GROWSUP 0x00000000
89   -#define VM_NOHUGEPAGE 0x00000200 /* MADV_NOHUGEPAGE marked this vma */
90   -#endif
91 87 #define VM_PFNMAP 0x00000400 /* Page-ranges managed without "struct page", just pure PFN */
92 88 #define VM_DENYWRITE 0x00000800 /* ETXTBSY on write attempts.. */
93 89  
94 90  
95 91  
... ... @@ -106,19 +102,31 @@
106 102 #define VM_NORESERVE 0x00200000 /* should the VM suppress accounting */
107 103 #define VM_HUGETLB 0x00400000 /* Huge TLB Page VM */
108 104 #define VM_NONLINEAR 0x00800000 /* Is non-linear (remap_file_pages) */
109   -#ifndef CONFIG_TRANSPARENT_HUGEPAGE
110   -#define VM_MAPPED_COPY 0x01000000 /* T if mapped copy of data (nommu mmap) */
111   -#else
112   -#define VM_HUGEPAGE 0x01000000 /* MADV_HUGEPAGE marked this vma */
113   -#endif
  105 +#define VM_ARCH_1 0x01000000 /* Architecture-specific flag */
114 106 #define VM_INSERTPAGE 0x02000000 /* The vma has had "vm_insert_page()" done on it */
115 107 #define VM_NODUMP 0x04000000 /* Do not include in the core dump */
116 108  
117 109 #define VM_CAN_NONLINEAR 0x08000000 /* Has ->fault & does nonlinear pages */
118 110 #define VM_MIXEDMAP 0x10000000 /* Can contain "struct page" and pure PFN pages */
119   -#define VM_SAO 0x20000000 /* Strong Access Ordering (powerpc) */
120   -#define VM_PAT 0x40000000 /* PAT reserves whole VMA at once (x86) */
  111 +#define VM_HUGEPAGE 0x20000000 /* MADV_HUGEPAGE marked this vma */
  112 +#define VM_NOHUGEPAGE 0x40000000 /* MADV_NOHUGEPAGE marked this vma */
121 113 #define VM_MERGEABLE 0x80000000 /* KSM may merge identical pages */
  114 +
  115 +#if defined(CONFIG_X86)
  116 +# define VM_PAT VM_ARCH_1 /* PAT reserves whole VMA at once (x86) */
  117 +#elif defined(CONFIG_PPC)
  118 +# define VM_SAO VM_ARCH_1 /* Strong Access Ordering (powerpc) */
  119 +#elif defined(CONFIG_PARISC)
  120 +# define VM_GROWSUP VM_ARCH_1
  121 +#elif defined(CONFIG_IA64)
  122 +# define VM_GROWSUP VM_ARCH_1
  123 +#elif !defined(CONFIG_MMU)
  124 +# define VM_MAPPED_COPY VM_ARCH_1 /* T if mapped copy of data (nommu mmap) */
  125 +#endif
  126 +
  127 +#ifndef VM_GROWSUP
  128 +# define VM_GROWSUP VM_NONE
  129 +#endif
122 130  
123 131 /* Bits set in the VMA until the stack is in its final location */
124 132 #define VM_STACK_INCOMPLETE_SETUP (VM_RAND_READ | VM_SEQ_READ)
... ... @@ -1491,7 +1491,7 @@
1491 1491 return ret;
1492 1492 }
1493 1493  
1494   -#define VM_NO_THP (VM_SPECIAL|VM_INSERTPAGE|VM_MIXEDMAP|VM_SAO| \
  1494 +#define VM_NO_THP (VM_SPECIAL|VM_INSERTPAGE|VM_MIXEDMAP| \
1495 1495 VM_HUGETLB|VM_SHARED|VM_MAYSHARE)
1496 1496  
1497 1497 int hugepage_madvise(struct vm_area_struct *vma,
... ... @@ -1470,8 +1470,13 @@
1470 1470 if (*vm_flags & (VM_MERGEABLE | VM_SHARED | VM_MAYSHARE |
1471 1471 VM_PFNMAP | VM_IO | VM_DONTEXPAND |
1472 1472 VM_RESERVED | VM_HUGETLB | VM_INSERTPAGE |
1473   - VM_NONLINEAR | VM_MIXEDMAP | VM_SAO))
  1473 + VM_NONLINEAR | VM_MIXEDMAP))
1474 1474 return 0; /* just ignore the advice */
  1475 +
  1476 +#ifdef VM_SAO
  1477 + if (*vm_flags & VM_SAO)
  1478 + return 0;
  1479 +#endif
1475 1480  
1476 1481 if (!test_bit(MMF_VM_MERGEABLE, &mm->flags)) {
1477 1482 err = __ksm_enter(mm);