0001
0002 #undef TRACE_SYSTEM
0003 #define TRACE_SYSTEM migrate
0004
0005 #if !defined(_TRACE_MIGRATE_H) || defined(TRACE_HEADER_MULTI_READ)
0006 #define _TRACE_MIGRATE_H
0007
0008 #include <linux/tracepoint.h>
0009
0010 #define MIGRATE_MODE \
0011 EM( MIGRATE_ASYNC, "MIGRATE_ASYNC") \
0012 EM( MIGRATE_SYNC_LIGHT, "MIGRATE_SYNC_LIGHT") \
0013 EMe(MIGRATE_SYNC, "MIGRATE_SYNC")
0014
0015
0016 #define MIGRATE_REASON \
0017 EM( MR_COMPACTION, "compaction") \
0018 EM( MR_MEMORY_FAILURE, "memory_failure") \
0019 EM( MR_MEMORY_HOTPLUG, "memory_hotplug") \
0020 EM( MR_SYSCALL, "syscall_or_cpuset") \
0021 EM( MR_MEMPOLICY_MBIND, "mempolicy_mbind") \
0022 EM( MR_NUMA_MISPLACED, "numa_misplaced") \
0023 EM( MR_CONTIG_RANGE, "contig_range") \
0024 EM( MR_LONGTERM_PIN, "longterm_pin") \
0025 EMe(MR_DEMOTION, "demotion")
0026
0027
0028
0029
0030
0031 #undef EM
0032 #undef EMe
0033 #define EM(a, b) TRACE_DEFINE_ENUM(a);
0034 #define EMe(a, b) TRACE_DEFINE_ENUM(a);
0035
0036 MIGRATE_MODE
0037 MIGRATE_REASON
0038
0039
0040
0041
0042
0043 #undef EM
0044 #undef EMe
0045 #define EM(a, b) {a, b},
0046 #define EMe(a, b) {a, b}
0047
0048 TRACE_EVENT(mm_migrate_pages,
0049
0050 TP_PROTO(unsigned long succeeded, unsigned long failed,
0051 unsigned long thp_succeeded, unsigned long thp_failed,
0052 unsigned long thp_split, enum migrate_mode mode, int reason),
0053
0054 TP_ARGS(succeeded, failed, thp_succeeded, thp_failed,
0055 thp_split, mode, reason),
0056
0057 TP_STRUCT__entry(
0058 __field( unsigned long, succeeded)
0059 __field( unsigned long, failed)
0060 __field( unsigned long, thp_succeeded)
0061 __field( unsigned long, thp_failed)
0062 __field( unsigned long, thp_split)
0063 __field( enum migrate_mode, mode)
0064 __field( int, reason)
0065 ),
0066
0067 TP_fast_assign(
0068 __entry->succeeded = succeeded;
0069 __entry->failed = failed;
0070 __entry->thp_succeeded = thp_succeeded;
0071 __entry->thp_failed = thp_failed;
0072 __entry->thp_split = thp_split;
0073 __entry->mode = mode;
0074 __entry->reason = reason;
0075 ),
0076
0077 TP_printk("nr_succeeded=%lu nr_failed=%lu nr_thp_succeeded=%lu nr_thp_failed=%lu nr_thp_split=%lu mode=%s reason=%s",
0078 __entry->succeeded,
0079 __entry->failed,
0080 __entry->thp_succeeded,
0081 __entry->thp_failed,
0082 __entry->thp_split,
0083 __print_symbolic(__entry->mode, MIGRATE_MODE),
0084 __print_symbolic(__entry->reason, MIGRATE_REASON))
0085 );
0086
0087 TRACE_EVENT(mm_migrate_pages_start,
0088
0089 TP_PROTO(enum migrate_mode mode, int reason),
0090
0091 TP_ARGS(mode, reason),
0092
0093 TP_STRUCT__entry(
0094 __field(enum migrate_mode, mode)
0095 __field(int, reason)
0096 ),
0097
0098 TP_fast_assign(
0099 __entry->mode = mode;
0100 __entry->reason = reason;
0101 ),
0102
0103 TP_printk("mode=%s reason=%s",
0104 __print_symbolic(__entry->mode, MIGRATE_MODE),
0105 __print_symbolic(__entry->reason, MIGRATE_REASON))
0106 );
0107
0108 DECLARE_EVENT_CLASS(migration_pte,
0109
0110 TP_PROTO(unsigned long addr, unsigned long pte, int order),
0111
0112 TP_ARGS(addr, pte, order),
0113
0114 TP_STRUCT__entry(
0115 __field(unsigned long, addr)
0116 __field(unsigned long, pte)
0117 __field(int, order)
0118 ),
0119
0120 TP_fast_assign(
0121 __entry->addr = addr;
0122 __entry->pte = pte;
0123 __entry->order = order;
0124 ),
0125
0126 TP_printk("addr=%lx, pte=%lx order=%d", __entry->addr, __entry->pte, __entry->order)
0127 );
0128
0129 DEFINE_EVENT(migration_pte, set_migration_pte,
0130 TP_PROTO(unsigned long addr, unsigned long pte, int order),
0131 TP_ARGS(addr, pte, order)
0132 );
0133
0134 DEFINE_EVENT(migration_pte, remove_migration_pte,
0135 TP_PROTO(unsigned long addr, unsigned long pte, int order),
0136 TP_ARGS(addr, pte, order)
0137 );
0138
0139 #endif
0140
0141
0142 #include <trace/define_trace.h>