Line data Source code
1 : /* SPDX-License-Identifier: GPL-2.0 */
2 : #undef TRACE_SYSTEM
3 : #define TRACE_SYSTEM migrate
4 :
5 : #if !defined(_TRACE_MIGRATE_H) || defined(TRACE_HEADER_MULTI_READ)
6 : #define _TRACE_MIGRATE_H
7 :
8 : #include <linux/tracepoint.h>
9 :
10 : #define MIGRATE_MODE \
11 : EM( MIGRATE_ASYNC, "MIGRATE_ASYNC") \
12 : EM( MIGRATE_SYNC_LIGHT, "MIGRATE_SYNC_LIGHT") \
13 : EMe(MIGRATE_SYNC, "MIGRATE_SYNC")
14 :
15 :
16 : #define MIGRATE_REASON \
17 : EM( MR_COMPACTION, "compaction") \
18 : EM( MR_MEMORY_FAILURE, "memory_failure") \
19 : EM( MR_MEMORY_HOTPLUG, "memory_hotplug") \
20 : EM( MR_SYSCALL, "syscall_or_cpuset") \
21 : EM( MR_MEMPOLICY_MBIND, "mempolicy_mbind") \
22 : EM( MR_NUMA_MISPLACED, "numa_misplaced") \
23 : EMe(MR_CONTIG_RANGE, "contig_range")
24 :
25 : /*
26 : * First define the enums in the above macros to be exported to userspace
27 : * via TRACE_DEFINE_ENUM().
28 : */
29 : #undef EM
30 : #undef EMe
31 : #define EM(a, b) TRACE_DEFINE_ENUM(a);
32 : #define EMe(a, b) TRACE_DEFINE_ENUM(a);
33 :
34 : MIGRATE_MODE
35 : MIGRATE_REASON
36 :
37 : /*
38 : * Now redefine the EM() and EMe() macros to map the enums to the strings
39 : * that will be printed in the output.
40 : */
41 : #undef EM
42 : #undef EMe
43 : #define EM(a, b) {a, b},
44 : #define EMe(a, b) {a, b}
45 :
46 0 : TRACE_EVENT(mm_migrate_pages,
47 :
48 : TP_PROTO(unsigned long succeeded, unsigned long failed,
49 : unsigned long thp_succeeded, unsigned long thp_failed,
50 : unsigned long thp_split, enum migrate_mode mode, int reason),
51 :
52 : TP_ARGS(succeeded, failed, thp_succeeded, thp_failed,
53 : thp_split, mode, reason),
54 :
55 : TP_STRUCT__entry(
56 : __field( unsigned long, succeeded)
57 : __field( unsigned long, failed)
58 : __field( unsigned long, thp_succeeded)
59 : __field( unsigned long, thp_failed)
60 : __field( unsigned long, thp_split)
61 : __field( enum migrate_mode, mode)
62 : __field( int, reason)
63 : ),
64 :
65 : TP_fast_assign(
66 : __entry->succeeded = succeeded;
67 : __entry->failed = failed;
68 : __entry->thp_succeeded = thp_succeeded;
69 : __entry->thp_failed = thp_failed;
70 : __entry->thp_split = thp_split;
71 : __entry->mode = mode;
72 : __entry->reason = reason;
73 : ),
74 :
75 : TP_printk("nr_succeeded=%lu nr_failed=%lu nr_thp_succeeded=%lu nr_thp_failed=%lu nr_thp_split=%lu mode=%s reason=%s",
76 : __entry->succeeded,
77 : __entry->failed,
78 : __entry->thp_succeeded,
79 : __entry->thp_failed,
80 : __entry->thp_split,
81 : __print_symbolic(__entry->mode, MIGRATE_MODE),
82 : __print_symbolic(__entry->reason, MIGRATE_REASON))
83 : );
84 : #endif /* _TRACE_MIGRATE_H */
85 :
86 : /* This part must be outside protection */
87 : #include <trace/define_trace.h>
|