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

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>

authored by

Vlastimil Babka and committed by
Linus Torvalds
420adbe9 14e0a214

+181 -137
+1 -1
include/linux/gfp.h
··· 11 11 12 12 /* 13 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 17 /* Plain integer GFP bitmasks. Do not use this directly. */
+1 -1
include/trace/events/btrfs.h
··· 6 6 7 7 #include <linux/writeback.h> 8 8 #include <linux/tracepoint.h> 9 - #include <trace/events/gfpflags.h> 9 + #include <trace/events/mmflags.h> 10 10 11 11 struct btrfs_root; 12 12 struct btrfs_fs_info;
+1 -1
include/trace/events/compaction.h
··· 7 7 #include <linux/types.h> 8 8 #include <linux/list.h> 9 9 #include <linux/tracepoint.h> 10 - #include <trace/events/gfpflags.h> 10 + #include <trace/events/mmflags.h> 11 11 12 12 #define COMPACTION_STATUS \ 13 13 EM( COMPACT_DEFERRED, "deferred") \
-52
include/trace/events/gfpflags.h
··· 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 -
-2
include/trace/events/huge_memory.h
··· 6 6 7 7 #include <linux/tracepoint.h> 8 8 9 - #include <trace/events/gfpflags.h> 10 - 11 9 #define SCAN_STATUS \ 12 10 EM( SCAN_FAIL, "failed") \ 13 11 EM( SCAN_SUCCEED, "succeeded") \
+1 -1
include/trace/events/kmem.h
··· 6 6 7 7 #include <linux/types.h> 8 8 #include <linux/tracepoint.h> 9 - #include <trace/events/gfpflags.h> 9 + #include <trace/events/mmflags.h> 10 10 11 11 DECLARE_EVENT_CLASS(kmem_alloc, 12 12
+164
include/trace/events/mmflags.h
··· 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" } \ 102 + IF_HAVE_PG_MLOCK(PG_mlocked, "mlocked" ) \ 103 + IF_HAVE_PG_UNCACHED(PG_uncached, "uncached" ) \ 104 + IF_HAVE_PG_HWPOISON(PG_hwpoison, "hwpoison" ) \ 105 + IF_HAVE_PG_IDLE(PG_young, "young" ) \ 106 + IF_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" }, \ 155 + IF_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"
+1 -1
include/trace/events/vmscan.h
··· 8 8 #include <linux/tracepoint.h> 9 9 #include <linux/mm.h> 10 10 #include <linux/memcontrol.h> 11 - #include <trace/events/gfpflags.h> 11 + #include <trace/events/mmflags.h> 12 12 13 13 #define RECLAIM_WB_ANON 0x0001u 14 14 #define RECLAIM_WB_FILE 0x0002u
+11 -77
mm/debug.c
··· 9 9 #include <linux/mm.h> 10 10 #include <linux/trace_events.h> 11 11 #include <linux/memcontrol.h> 12 + #include <trace/events/mmflags.h> 12 13 13 14 static const struct trace_print_flags pageflag_names[] = { 14 - {1UL << PG_locked, "locked" }, 15 - {1UL << PG_error, "error" }, 16 - {1UL << PG_referenced, "referenced" }, 17 - {1UL << PG_uptodate, "uptodate" }, 18 - {1UL << PG_dirty, "dirty" }, 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 15 + __def_pageflag_names 16 + }; 17 + 18 + static const struct trace_print_flags gfpflag_names[] = { 19 + __def_gfpflag_names 47 20 }; 48 21 49 22 static void dump_flags(unsigned long flags, ··· 81 108 82 109 #ifdef CONFIG_DEBUG_VM 83 110 84 - static const struct trace_print_flags vmaflags_names[] = { 85 - {VM_READ, "read" }, 86 - {VM_WRITE, "write" }, 87 - {VM_EXEC, "exec" }, 88 - {VM_SHARED, "shared" }, 89 - {VM_MAYREAD, "mayread" }, 90 - {VM_MAYWRITE, "maywrite" }, 91 - {VM_MAYEXEC, "mayexec" }, 92 - {VM_MAYSHARE, "mayshare" }, 93 - {VM_GROWSDOWN, "growsdown" }, 94 - {VM_PFNMAP, "pfnmap" }, 95 - {VM_DENYWRITE, "denywrite" }, 96 - {VM_LOCKONFAULT, "lockonfault" }, 97 - {VM_LOCKED, "locked" }, 98 - {VM_IO, "io" }, 99 - {VM_SEQ_READ, "seqread" }, 100 - {VM_RAND_READ, "randread" }, 101 - {VM_DONTCOPY, "dontcopy" }, 102 - {VM_DONTEXPAND, "dontexpand" }, 103 - {VM_ACCOUNT, "account" }, 104 - {VM_NORESERVE, "noreserve" }, 105 - {VM_HUGETLB, "hugetlb" }, 106 - #if defined(CONFIG_X86) 107 - {VM_PAT, "pat" }, 108 - #elif defined(CONFIG_PPC) 109 - {VM_SAO, "sao" }, 110 - #elif defined(CONFIG_PARISC) || defined(CONFIG_METAG) || defined(CONFIG_IA64) 111 - {VM_GROWSUP, "growsup" }, 112 - #elif !defined(CONFIG_MMU) 113 - {VM_MAPPED_COPY, "mappedcopy" }, 114 - #else 115 - {VM_ARCH_1, "arch_1" }, 116 - #endif 117 - {VM_DONTDUMP, "dontdump" }, 118 - #ifdef CONFIG_MEM_SOFT_DIRTY 119 - {VM_SOFTDIRTY, "softdirty" }, 120 - #endif 121 - {VM_MIXEDMAP, "mixedmap" }, 122 - {VM_HUGEPAGE, "hugepage" }, 123 - {VM_NOHUGEPAGE, "nohugepage" }, 124 - {VM_MERGEABLE, "mergeable" }, 111 + static const struct trace_print_flags vmaflag_names[] = { 112 + __def_vmaflag_names 125 113 }; 126 114 127 115 void dump_vma(const struct vm_area_struct *vma) ··· 96 162 (unsigned long)pgprot_val(vma->vm_page_prot), 97 163 vma->anon_vma, vma->vm_ops, vma->vm_pgoff, 98 164 vma->vm_file, vma->vm_private_data); 99 - dump_flags(vma->vm_flags, vmaflags_names, ARRAY_SIZE(vmaflags_names)); 165 + dump_flags(vma->vm_flags, vmaflag_names, ARRAY_SIZE(vmaflag_names)); 100 166 } 101 167 EXPORT_SYMBOL(dump_vma); 102 168 ··· 167 233 "" /* This is here to not have a comma! */ 168 234 ); 169 235 170 - dump_flags(mm->def_flags, vmaflags_names, 171 - ARRAY_SIZE(vmaflags_names)); 236 + dump_flags(mm->def_flags, vmaflag_names, 237 + ARRAY_SIZE(vmaflag_names)); 172 238 } 173 239 174 240 #endif /* CONFIG_DEBUG_VM */
+1 -1
tools/perf/builtin-kmem.c
··· 602 602 return fa->flags - fb->flags; 603 603 } 604 604 605 - /* see include/trace/events/gfpflags.h */ 605 + /* see include/trace/events/mmflags.h */ 606 606 static const struct { 607 607 const char *original; 608 608 const char *compact;