aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVlastimil Babka <vbabka@suse.cz>2016-03-15 17:55:52 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2016-03-15 19:55:16 -0400
commit420adbe9fc1a45187cfa74df9dbfd72272c4e2fa (patch)
tree5d8907a9a6b87441c65252da969575cd5cb21b8d
parent14e0a214d62d284ff40b1fd7d687cb66fca9fc67 (diff)
mm, tracing: unify mm flags handling in tracepoints and printk
In tracepoints, it's possible to print gfp flags in a human-friendly format through a macro show_gfp_flags(), which defines a translation array and passes is to __print_flags(). Since the following patch will introduce support for gfp flags printing in printk(), it would be nice to reuse the array. This is not straightforward, since __print_flags() can't simply reference an array defined in a .c file such as mm/debug.c - it has to be a macro to allow the macro magic to communicate the format to userspace tools such as trace-cmd. The solution is to create a macro __def_gfpflag_names which is used both in show_gfp_flags(), and to define the gfpflag_names[] array in mm/debug.c. On the other hand, mm/debug.c also defines translation tables for page flags and vma flags, and desire was expressed (but not implemented in this series) to use these also from tracepoints. Thus, this patch also renames the events/gfpflags.h file to events/mmflags.h and moves the table definitions there, using the same macro approach as for gfpflags. This allows translating all three kinds of mm-specific flags both in tracepoints and printk. Signed-off-by: Vlastimil Babka <vbabka@suse.cz> Reviewed-by: Michal Hocko <mhocko@suse.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Arnaldo Carvalho de Melo <acme@kernel.org> Cc: Ingo Molnar <mingo@redhat.com> Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Cc: Minchan Kim <minchan@kernel.org> Cc: Sasha Levin <sasha.levin@oracle.com> Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com> Cc: Mel Gorman <mgorman@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--include/linux/gfp.h2
-rw-r--r--include/trace/events/btrfs.h2
-rw-r--r--include/trace/events/compaction.h2
-rw-r--r--include/trace/events/gfpflags.h52
-rw-r--r--include/trace/events/huge_memory.h2
-rw-r--r--include/trace/events/kmem.h2
-rw-r--r--include/trace/events/mmflags.h164
-rw-r--r--include/trace/events/vmscan.h2
-rw-r--r--mm/debug.c88
-rw-r--r--tools/perf/builtin-kmem.c2
10 files changed, 181 insertions, 137 deletions
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 3d6d878c00f5..06546b36eb6a 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -11,7 +11,7 @@ struct vm_area_struct;
11 11
12/* 12/*
13 * In case of changes, please don't forget to update 13 * In case of changes, please don't forget to update
14 * include/trace/events/gfpflags.h and tools/perf/builtin-kmem.c 14 * include/trace/events/mmflags.h and tools/perf/builtin-kmem.c
15 */ 15 */
16 16
17/* Plain integer GFP bitmasks. Do not use this directly. */ 17/* Plain integer GFP bitmasks. Do not use this directly. */
diff --git a/include/trace/events/btrfs.h b/include/trace/events/btrfs.h
index d866f21efbbf..677807f29a1c 100644
--- a/include/trace/events/btrfs.h
+++ b/include/trace/events/btrfs.h
@@ -6,7 +6,7 @@
6 6
7#include <linux/writeback.h> 7#include <linux/writeback.h>
8#include <linux/tracepoint.h> 8#include <linux/tracepoint.h>
9#include <trace/events/gfpflags.h> 9#include <trace/events/mmflags.h>
10 10
11struct btrfs_root; 11struct btrfs_root;
12struct btrfs_fs_info; 12struct btrfs_fs_info;
diff --git a/include/trace/events/compaction.h b/include/trace/events/compaction.h
index c92d1e1cbad9..111e5666e5eb 100644
--- a/include/trace/events/compaction.h
+++ b/include/trace/events/compaction.h
@@ -7,7 +7,7 @@
7#include <linux/types.h> 7#include <linux/types.h>
8#include <linux/list.h> 8#include <linux/list.h>
9#include <linux/tracepoint.h> 9#include <linux/tracepoint.h>
10#include <trace/events/gfpflags.h> 10#include <trace/events/mmflags.h>
11 11
12#define COMPACTION_STATUS \ 12#define COMPACTION_STATUS \
13 EM( COMPACT_DEFERRED, "deferred") \ 13 EM( COMPACT_DEFERRED, "deferred") \
diff --git a/include/trace/events/gfpflags.h b/include/trace/events/gfpflags.h
deleted file mode 100644
index f53b216c9311..000000000000
--- a/include/trace/events/gfpflags.h
+++ /dev/null
@@ -1,52 +0,0 @@
1/*
2 * The order of these masks is important. Matching masks will be seen
3 * first and the left over flags will end up showing by themselves.
4 *
5 * For example, if we have GFP_KERNEL before GFP_USER we wil get:
6 *
7 * GFP_KERNEL|GFP_HARDWALL
8 *
9 * Thus most bits set go first.
10 */
11#define show_gfp_flags(flags) \
12 (flags) ? __print_flags(flags, "|", \
13 {(unsigned long)GFP_TRANSHUGE, "GFP_TRANSHUGE"}, \
14 {(unsigned long)GFP_HIGHUSER_MOVABLE, "GFP_HIGHUSER_MOVABLE"},\
15 {(unsigned long)GFP_HIGHUSER, "GFP_HIGHUSER"}, \
16 {(unsigned long)GFP_USER, "GFP_USER"}, \
17 {(unsigned long)GFP_TEMPORARY, "GFP_TEMPORARY"}, \
18 {(unsigned long)GFP_KERNEL_ACCOUNT, "GFP_KERNEL_ACCOUNT"}, \
19 {(unsigned long)GFP_KERNEL, "GFP_KERNEL"}, \
20 {(unsigned long)GFP_NOFS, "GFP_NOFS"}, \
21 {(unsigned long)GFP_ATOMIC, "GFP_ATOMIC"}, \
22 {(unsigned long)GFP_NOIO, "GFP_NOIO"}, \
23 {(unsigned long)GFP_NOWAIT, "GFP_NOWAIT"}, \
24 {(unsigned long)GFP_DMA, "GFP_DMA"}, \
25 {(unsigned long)__GFP_HIGHMEM, "__GFP_HIGHMEM"}, \
26 {(unsigned long)GFP_DMA32, "GFP_DMA32"}, \
27 {(unsigned long)__GFP_HIGH, "__GFP_HIGH"}, \
28 {(unsigned long)__GFP_ATOMIC, "__GFP_ATOMIC"}, \
29 {(unsigned long)__GFP_IO, "__GFP_IO"}, \
30 {(unsigned long)__GFP_FS, "__GFP_FS"}, \
31 {(unsigned long)__GFP_COLD, "__GFP_COLD"}, \
32 {(unsigned long)__GFP_NOWARN, "__GFP_NOWARN"}, \
33 {(unsigned long)__GFP_REPEAT, "__GFP_REPEAT"}, \
34 {(unsigned long)__GFP_NOFAIL, "__GFP_NOFAIL"}, \
35 {(unsigned long)__GFP_NORETRY, "__GFP_NORETRY"}, \
36 {(unsigned long)__GFP_COMP, "__GFP_COMP"}, \
37 {(unsigned long)__GFP_ZERO, "__GFP_ZERO"}, \
38 {(unsigned long)__GFP_NOMEMALLOC, "__GFP_NOMEMALLOC"}, \
39 {(unsigned long)__GFP_MEMALLOC, "__GFP_MEMALLOC"}, \
40 {(unsigned long)__GFP_HARDWALL, "__GFP_HARDWALL"}, \
41 {(unsigned long)__GFP_THISNODE, "__GFP_THISNODE"}, \
42 {(unsigned long)__GFP_RECLAIMABLE, "__GFP_RECLAIMABLE"}, \
43 {(unsigned long)__GFP_MOVABLE, "__GFP_MOVABLE"}, \
44 {(unsigned long)__GFP_ACCOUNT, "__GFP_ACCOUNT"}, \
45 {(unsigned long)__GFP_NOTRACK, "__GFP_NOTRACK"}, \
46 {(unsigned long)__GFP_WRITE, "__GFP_WRITE"}, \
47 {(unsigned long)__GFP_RECLAIM, "__GFP_RECLAIM"}, \
48 {(unsigned long)__GFP_DIRECT_RECLAIM, "__GFP_DIRECT_RECLAIM"},\
49 {(unsigned long)__GFP_KSWAPD_RECLAIM, "__GFP_KSWAPD_RECLAIM"},\
50 {(unsigned long)__GFP_OTHER_NODE, "__GFP_OTHER_NODE"} \
51 ) : "none"
52
diff --git a/include/trace/events/huge_memory.h b/include/trace/events/huge_memory.h
index 47c6212d8f3c..551ba4acde4d 100644
--- a/include/trace/events/huge_memory.h
+++ b/include/trace/events/huge_memory.h
@@ -6,8 +6,6 @@
6 6
7#include <linux/tracepoint.h> 7#include <linux/tracepoint.h>
8 8
9#include <trace/events/gfpflags.h>
10
11#define SCAN_STATUS \ 9#define SCAN_STATUS \
12 EM( SCAN_FAIL, "failed") \ 10 EM( SCAN_FAIL, "failed") \
13 EM( SCAN_SUCCEED, "succeeded") \ 11 EM( SCAN_SUCCEED, "succeeded") \
diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h
index f7554fd7fc62..ca7217389067 100644
--- a/include/trace/events/kmem.h
+++ b/include/trace/events/kmem.h
@@ -6,7 +6,7 @@
6 6
7#include <linux/types.h> 7#include <linux/types.h>
8#include <linux/tracepoint.h> 8#include <linux/tracepoint.h>
9#include <trace/events/gfpflags.h> 9#include <trace/events/mmflags.h>
10 10
11DECLARE_EVENT_CLASS(kmem_alloc, 11DECLARE_EVENT_CLASS(kmem_alloc,
12 12
diff --git a/include/trace/events/mmflags.h b/include/trace/events/mmflags.h
new file mode 100644
index 000000000000..a849185c82f0
--- /dev/null
+++ b/include/trace/events/mmflags.h
@@ -0,0 +1,164 @@
1/*
2 * The order of these masks is important. Matching masks will be seen
3 * first and the left over flags will end up showing by themselves.
4 *
5 * For example, if we have GFP_KERNEL before GFP_USER we wil get:
6 *
7 * GFP_KERNEL|GFP_HARDWALL
8 *
9 * Thus most bits set go first.
10 */
11
12#define __def_gfpflag_names \
13 {(unsigned long)GFP_TRANSHUGE, "GFP_TRANSHUGE"}, \
14 {(unsigned long)GFP_HIGHUSER_MOVABLE, "GFP_HIGHUSER_MOVABLE"},\
15 {(unsigned long)GFP_HIGHUSER, "GFP_HIGHUSER"}, \
16 {(unsigned long)GFP_USER, "GFP_USER"}, \
17 {(unsigned long)GFP_TEMPORARY, "GFP_TEMPORARY"}, \
18 {(unsigned long)GFP_KERNEL_ACCOUNT, "GFP_KERNEL_ACCOUNT"}, \
19 {(unsigned long)GFP_KERNEL, "GFP_KERNEL"}, \
20 {(unsigned long)GFP_NOFS, "GFP_NOFS"}, \
21 {(unsigned long)GFP_ATOMIC, "GFP_ATOMIC"}, \
22 {(unsigned long)GFP_NOIO, "GFP_NOIO"}, \
23 {(unsigned long)GFP_NOWAIT, "GFP_NOWAIT"}, \
24 {(unsigned long)GFP_DMA, "GFP_DMA"}, \
25 {(unsigned long)__GFP_HIGHMEM, "__GFP_HIGHMEM"}, \
26 {(unsigned long)GFP_DMA32, "GFP_DMA32"}, \
27 {(unsigned long)__GFP_HIGH, "__GFP_HIGH"}, \
28 {(unsigned long)__GFP_ATOMIC, "__GFP_ATOMIC"}, \
29 {(unsigned long)__GFP_IO, "__GFP_IO"}, \
30 {(unsigned long)__GFP_FS, "__GFP_FS"}, \
31 {(unsigned long)__GFP_COLD, "__GFP_COLD"}, \
32 {(unsigned long)__GFP_NOWARN, "__GFP_NOWARN"}, \
33 {(unsigned long)__GFP_REPEAT, "__GFP_REPEAT"}, \
34 {(unsigned long)__GFP_NOFAIL, "__GFP_NOFAIL"}, \
35 {(unsigned long)__GFP_NORETRY, "__GFP_NORETRY"}, \
36 {(unsigned long)__GFP_COMP, "__GFP_COMP"}, \
37 {(unsigned long)__GFP_ZERO, "__GFP_ZERO"}, \
38 {(unsigned long)__GFP_NOMEMALLOC, "__GFP_NOMEMALLOC"}, \
39 {(unsigned long)__GFP_MEMALLOC, "__GFP_MEMALLOC"}, \
40 {(unsigned long)__GFP_HARDWALL, "__GFP_HARDWALL"}, \
41 {(unsigned long)__GFP_THISNODE, "__GFP_THISNODE"}, \
42 {(unsigned long)__GFP_RECLAIMABLE, "__GFP_RECLAIMABLE"}, \
43 {(unsigned long)__GFP_MOVABLE, "__GFP_MOVABLE"}, \
44 {(unsigned long)__GFP_ACCOUNT, "__GFP_ACCOUNT"}, \
45 {(unsigned long)__GFP_NOTRACK, "__GFP_NOTRACK"}, \
46 {(unsigned long)__GFP_WRITE, "__GFP_WRITE"}, \
47 {(unsigned long)__GFP_RECLAIM, "__GFP_RECLAIM"}, \
48 {(unsigned long)__GFP_DIRECT_RECLAIM, "__GFP_DIRECT_RECLAIM"},\
49 {(unsigned long)__GFP_KSWAPD_RECLAIM, "__GFP_KSWAPD_RECLAIM"},\
50 {(unsigned long)__GFP_OTHER_NODE, "__GFP_OTHER_NODE"} \
51
52#define show_gfp_flags(flags) \
53 (flags) ? __print_flags(flags, "|", \
54 __def_gfpflag_names \
55 ) : "none"
56
57#ifdef CONFIG_MMU
58#define IF_HAVE_PG_MLOCK(flag,string) ,{1UL << flag, string}
59#else
60#define IF_HAVE_PG_MLOCK(flag,string)
61#endif
62
63#ifdef CONFIG_ARCH_USES_PG_UNCACHED
64#define IF_HAVE_PG_UNCACHED(flag,string) ,{1UL << flag, string}
65#else
66#define IF_HAVE_PG_UNCACHED(flag,string)
67#endif
68
69#ifdef CONFIG_MEMORY_FAILURE
70#define IF_HAVE_PG_HWPOISON(flag,string) ,{1UL << flag, string}
71#else
72#define IF_HAVE_PG_HWPOISON(flag,string)
73#endif
74
75#if defined(CONFIG_IDLE_PAGE_TRACKING) && defined(CONFIG_64BIT)
76#define IF_HAVE_PG_IDLE(flag,string) ,{1UL << flag, string}
77#else
78#define IF_HAVE_PG_IDLE(flag,string)
79#endif
80
81#define __def_pageflag_names \
82 {1UL << PG_locked, "locked" }, \
83 {1UL << PG_error, "error" }, \
84 {1UL << PG_referenced, "referenced" }, \
85 {1UL << PG_uptodate, "uptodate" }, \
86 {1UL << PG_dirty, "dirty" }, \
87 {1UL << PG_lru, "lru" }, \
88 {1UL << PG_active, "active" }, \
89 {1UL << PG_slab, "slab" }, \
90 {1UL << PG_owner_priv_1, "owner_priv_1" }, \
91 {1UL << PG_arch_1, "arch_1" }, \
92 {1UL << PG_reserved, "reserved" }, \
93 {1UL << PG_private, "private" }, \
94 {1UL << PG_private_2, "private_2" }, \
95 {1UL << PG_writeback, "writeback" }, \
96 {1UL << PG_head, "head" }, \
97 {1UL << PG_swapcache, "swapcache" }, \
98 {1UL << PG_mappedtodisk, "mappedtodisk" }, \
99 {1UL << PG_reclaim, "reclaim" }, \
100 {1UL << PG_swapbacked, "swapbacked" }, \
101 {1UL << PG_unevictable, "unevictable" } \
102IF_HAVE_PG_MLOCK(PG_mlocked, "mlocked" ) \
103IF_HAVE_PG_UNCACHED(PG_uncached, "uncached" ) \
104IF_HAVE_PG_HWPOISON(PG_hwpoison, "hwpoison" ) \
105IF_HAVE_PG_IDLE(PG_young, "young" ) \
106IF_HAVE_PG_IDLE(PG_idle, "idle" )
107
108#define show_page_flags(flags) \
109 (flags) ? __print_flags(flags, "|", \
110 __def_pageflag_names \
111 ) : "none"
112
113#if defined(CONFIG_X86)
114#define __VM_ARCH_SPECIFIC {VM_PAT, "pat" }
115#elif defined(CONFIG_PPC)
116#define __VM_ARCH_SPECIFIC {VM_SAO, "sao" }
117#elif defined(CONFIG_PARISC) || defined(CONFIG_METAG) || defined(CONFIG_IA64)
118#define __VM_ARCH_SPECIFIC {VM_GROWSUP, "growsup" }
119#elif !defined(CONFIG_MMU)
120#define __VM_ARCH_SPECIFIC {VM_MAPPED_COPY,"mappedcopy" }
121#else
122#define __VM_ARCH_SPECIFIC {VM_ARCH_1, "arch_1" }
123#endif
124
125#ifdef CONFIG_MEM_SOFT_DIRTY
126#define IF_HAVE_VM_SOFTDIRTY(flag,name) {flag, name },
127#else
128#define IF_HAVE_VM_SOFTDIRTY(flag,name)
129#endif
130
131#define __def_vmaflag_names \
132 {VM_READ, "read" }, \
133 {VM_WRITE, "write" }, \
134 {VM_EXEC, "exec" }, \
135 {VM_SHARED, "shared" }, \
136 {VM_MAYREAD, "mayread" }, \
137 {VM_MAYWRITE, "maywrite" }, \
138 {VM_MAYEXEC, "mayexec" }, \
139 {VM_MAYSHARE, "mayshare" }, \
140 {VM_GROWSDOWN, "growsdown" }, \
141 {VM_PFNMAP, "pfnmap" }, \
142 {VM_DENYWRITE, "denywrite" }, \
143 {VM_LOCKONFAULT, "lockonfault" }, \
144 {VM_LOCKED, "locked" }, \
145 {VM_IO, "io" }, \
146 {VM_SEQ_READ, "seqread" }, \
147 {VM_RAND_READ, "randread" }, \
148 {VM_DONTCOPY, "dontcopy" }, \
149 {VM_DONTEXPAND, "dontexpand" }, \
150 {VM_ACCOUNT, "account" }, \
151 {VM_NORESERVE, "noreserve" }, \
152 {VM_HUGETLB, "hugetlb" }, \
153 __VM_ARCH_SPECIFIC , \
154 {VM_DONTDUMP, "dontdump" }, \
155IF_HAVE_VM_SOFTDIRTY(VM_SOFTDIRTY, "softdirty" ) \
156 {VM_MIXEDMAP, "mixedmap" }, \
157 {VM_HUGEPAGE, "hugepage" }, \
158 {VM_NOHUGEPAGE, "nohugepage" }, \
159 {VM_MERGEABLE, "mergeable" } \
160
161#define show_vma_flags(flags) \
162 (flags) ? __print_flags(flags, "|", \
163 __def_vmaflag_names \
164 ) : "none"
diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.h
index 31763dd8db1c..0101ef37f1ee 100644
--- a/include/trace/events/vmscan.h
+++ b/include/trace/events/vmscan.h
@@ -8,7 +8,7 @@
8#include <linux/tracepoint.h> 8#include <linux/tracepoint.h>
9#include <linux/mm.h> 9#include <linux/mm.h>
10#include <linux/memcontrol.h> 10#include <linux/memcontrol.h>
11#include <trace/events/gfpflags.h> 11#include <trace/events/mmflags.h>
12 12
13#define RECLAIM_WB_ANON 0x0001u 13#define RECLAIM_WB_ANON 0x0001u
14#define RECLAIM_WB_FILE 0x0002u 14#define RECLAIM_WB_FILE 0x0002u
diff --git a/mm/debug.c b/mm/debug.c
index f05b2d5d6481..410af904a7d5 100644
--- a/mm/debug.c
+++ b/mm/debug.c
@@ -9,41 +9,14 @@
9#include <linux/mm.h> 9#include <linux/mm.h>
10#include <linux/trace_events.h> 10#include <linux/trace_events.h>
11#include <linux/memcontrol.h> 11#include <linux/memcontrol.h>
12#include <trace/events/mmflags.h>
12 13
13static const struct trace_print_flags pageflag_names[] = { 14static const struct trace_print_flags pageflag_names[] = {
14 {1UL << PG_locked, "locked" }, 15 __def_pageflag_names
15 {1UL << PG_error, "error" }, 16};
16 {1UL << PG_referenced, "referenced" }, 17
17 {1UL << PG_uptodate, "uptodate" }, 18static const struct trace_print_flags gfpflag_names[] = {
18 {1UL << PG_dirty, "dirty" }, 19 __def_gfpflag_names
19 {1UL << PG_lru, "lru" },
20 {1UL << PG_active, "active" },
21 {1UL << PG_slab, "slab" },
22 {1UL << PG_owner_priv_1, "owner_priv_1" },
23 {1UL << PG_arch_1, "arch_1" },
24 {1UL << PG_reserved, "reserved" },
25 {1UL << PG_private, "private" },
26 {1UL << PG_private_2, "private_2" },
27 {1UL << PG_writeback, "writeback" },
28 {1UL << PG_head, "head" },
29 {1UL << PG_swapcache, "swapcache" },
30 {1UL << PG_mappedtodisk, "mappedtodisk" },
31 {1UL << PG_reclaim, "reclaim" },
32 {1UL << PG_swapbacked, "swapbacked" },
33 {1UL << PG_unevictable, "unevictable" },
34#ifdef CONFIG_MMU
35 {1UL << PG_mlocked, "mlocked" },
36#endif
37#ifdef CONFIG_ARCH_USES_PG_UNCACHED
38 {1UL << PG_uncached, "uncached" },
39#endif
40#ifdef CONFIG_MEMORY_FAILURE
41 {1UL << PG_hwpoison, "hwpoison" },
42#endif
43#if defined(CONFIG_IDLE_PAGE_TRACKING) && defined(CONFIG_64BIT)
44 {1UL << PG_young, "young" },
45 {1UL << PG_idle, "idle" },
46#endif
47}; 20};
48 21
49static void dump_flags(unsigned long flags, 22static void dump_flags(unsigned long flags,
@@ -108,47 +81,8 @@ EXPORT_SYMBOL(dump_page);
108 81
109#ifdef CONFIG_DEBUG_VM 82#ifdef CONFIG_DEBUG_VM
110 83
111static const struct trace_print_flags vmaflags_names[] = { 84static const struct trace_print_flags vmaflag_names[] = {
112 {VM_READ, "read" }, 85 __def_vmaflag_names
113 {VM_WRITE, "write" },
114 {VM_EXEC, "exec" },
115 {VM_SHARED, "shared" },
116 {VM_MAYREAD, "mayread" },
117 {VM_MAYWRITE, "maywrite" },
118 {VM_MAYEXEC, "mayexec" },
119 {VM_MAYSHARE, "mayshare" },
120 {VM_GROWSDOWN, "growsdown" },
121 {VM_PFNMAP, "pfnmap" },
122 {VM_DENYWRITE, "denywrite" },
123 {VM_LOCKONFAULT, "lockonfault" },
124 {VM_LOCKED, "locked" },
125 {VM_IO, "io" },
126 {VM_SEQ_READ, "seqread" },
127 {VM_RAND_READ, "randread" },
128 {VM_DONTCOPY, "dontcopy" },
129 {VM_DONTEXPAND, "dontexpand" },
130 {VM_ACCOUNT, "account" },
131 {VM_NORESERVE, "noreserve" },
132 {VM_HUGETLB, "hugetlb" },
133#if defined(CONFIG_X86)
134 {VM_PAT, "pat" },
135#elif defined(CONFIG_PPC)
136 {VM_SAO, "sao" },
137#elif defined(CONFIG_PARISC) || defined(CONFIG_METAG) || defined(CONFIG_IA64)
138 {VM_GROWSUP, "growsup" },
139#elif !defined(CONFIG_MMU)
140 {VM_MAPPED_COPY, "mappedcopy" },
141#else
142 {VM_ARCH_1, "arch_1" },
143#endif
144 {VM_DONTDUMP, "dontdump" },
145#ifdef CONFIG_MEM_SOFT_DIRTY
146 {VM_SOFTDIRTY, "softdirty" },
147#endif
148 {VM_MIXEDMAP, "mixedmap" },
149 {VM_HUGEPAGE, "hugepage" },
150 {VM_NOHUGEPAGE, "nohugepage" },
151 {VM_MERGEABLE, "mergeable" },
152}; 86};
153 87
154void dump_vma(const struct vm_area_struct *vma) 88void dump_vma(const struct vm_area_struct *vma)
@@ -162,7 +96,7 @@ void dump_vma(const struct vm_area_struct *vma)
162 (unsigned long)pgprot_val(vma->vm_page_prot), 96 (unsigned long)pgprot_val(vma->vm_page_prot),
163 vma->anon_vma, vma->vm_ops, vma->vm_pgoff, 97 vma->anon_vma, vma->vm_ops, vma->vm_pgoff,
164 vma->vm_file, vma->vm_private_data); 98 vma->vm_file, vma->vm_private_data);
165 dump_flags(vma->vm_flags, vmaflags_names, ARRAY_SIZE(vmaflags_names)); 99 dump_flags(vma->vm_flags, vmaflag_names, ARRAY_SIZE(vmaflag_names));
166} 100}
167EXPORT_SYMBOL(dump_vma); 101EXPORT_SYMBOL(dump_vma);
168 102
@@ -233,8 +167,8 @@ void dump_mm(const struct mm_struct *mm)
233 "" /* This is here to not have a comma! */ 167 "" /* This is here to not have a comma! */
234 ); 168 );
235 169
236 dump_flags(mm->def_flags, vmaflags_names, 170 dump_flags(mm->def_flags, vmaflag_names,
237 ARRAY_SIZE(vmaflags_names)); 171 ARRAY_SIZE(vmaflag_names));
238} 172}
239 173
240#endif /* CONFIG_DEBUG_VM */ 174#endif /* CONFIG_DEBUG_VM */
diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c
index 83343ed30e8f..c9cb3be47cff 100644
--- a/tools/perf/builtin-kmem.c
+++ b/tools/perf/builtin-kmem.c
@@ -602,7 +602,7 @@ static int gfpcmp(const void *a, const void *b)
602 return fa->flags - fb->flags; 602 return fa->flags - fb->flags;
603} 603}
604 604
605/* see include/trace/events/gfpflags.h */ 605/* see include/trace/events/mmflags.h */
606static const struct { 606static const struct {
607 const char *original; 607 const char *original;
608 const char *compact; 608 const char *compact;