1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #undef TRACE_SYSTEM 3 #define TRACE_SYSTEM oom 4 5 #if !defined(_TRACE_OOM_H) || defined(TRACE_HEADER_MULTI_READ) 6 #define _TRACE_OOM_H 7 #include <linux/tracepoint.h> 8 #include <trace/events/mmflags.h> 9 10 TRACE_EVENT(oom_score_adj_update, 11 12 TP_PROTO(struct task_struct *task), 13 14 TP_ARGS(task), 15 16 TP_STRUCT__entry( 17 __field( pid_t, pid) 18 __array( char, comm, TASK_COMM_LEN ) 19 __field( short, oom_score_adj) 20 ), 21 22 TP_fast_assign( 23 __entry->pid = task->pid; 24 memcpy(__entry->comm, task->comm, TASK_COMM_LEN); 25 __entry->oom_score_adj = task->signal->oom_score_adj; 26 ), 27 28 TP_printk("pid=%d comm=%s oom_score_adj=%hd", 29 __entry->pid, __entry->comm, __entry->oom_score_adj) 30 ); 31 32 TRACE_EVENT(reclaim_retry_zone, 33 34 TP_PROTO(struct zoneref *zoneref, 35 int order, 36 unsigned long reclaimable, 37 unsigned long available, 38 unsigned long min_wmark, 39 int no_progress_loops, 40 bool wmark_check), 41 42 TP_ARGS(zoneref, order, reclaimable, available, min_wmark, no_progress_loops, wmark_check), 43 44 TP_STRUCT__entry( 45 __field( int, node) 46 __field( int, zone_idx) 47 __field( int, order) 48 __field( unsigned long, reclaimable) 49 __field( unsigned long, available) 50 __field( unsigned long, min_wmark) 51 __field( int, no_progress_loops) 52 __field( bool, wmark_check) 53 ), 54 55 TP_fast_assign( 56 __entry->node = zone_to_nid(zoneref->zone); 57 __entry->zone_idx = zoneref->zone_idx; 58 __entry->order = order; 59 __entry->reclaimable = reclaimable; 60 __entry->available = available; 61 __entry->min_wmark = min_wmark; 62 __entry->no_progress_loops = no_progress_loops; 63 __entry->wmark_check = wmark_check; 64 ), 65 66 TP_printk("node=%d zone=%-8s order=%d reclaimable=%lu available=%lu min_wmark=%lu no_progress_loops=%d wmark_check=%d", 67 __entry->node, __print_symbolic(__entry->zone_idx, ZONE_TYPE), 68 __entry->order, 69 __entry->reclaimable, __entry->available, __entry->min_wmark, 70 __entry->no_progress_loops, 71 __entry->wmark_check) 72 ); 73 74 TRACE_EVENT(mark_victim, 75 TP_PROTO(struct task_struct *task, uid_t uid), 76 77 TP_ARGS(task, uid), 78 79 TP_STRUCT__entry( 80 __field(int, pid) 81 __field(uid_t, uid) 82 __string(comm, task->comm) 83 __field(short, oom_score_adj) 84 ), 85 86 TP_fast_assign( 87 __entry->pid = task->pid; 88 __entry->uid = uid; 89 __assign_str(comm, task->comm); 90 __entry->oom_score_adj = task->signal->oom_score_adj; 91 ), 92 93 TP_printk("pid=%d uid=%u comm=%s oom_score_adj=%hd", 94 __entry->pid, 95 __entry->uid, 96 __get_str(comm), 97 __entry->oom_score_adj 98 ) 99 ); 100 101 TRACE_EVENT(wake_reaper, 102 TP_PROTO(int pid), 103 104 TP_ARGS(pid), 105 106 TP_STRUCT__entry( 107 __field(int, pid) 108 ), 109 110 TP_fast_assign( 111 __entry->pid = pid; 112 ), 113 114 TP_printk("pid=%d", __entry->pid) 115 ); 116 117 TRACE_EVENT(start_task_reaping, 118 TP_PROTO(int pid), 119 120 TP_ARGS(pid), 121 122 TP_STRUCT__entry( 123 __field(int, pid) 124 ), 125 126 TP_fast_assign( 127 __entry->pid = pid; 128 ), 129 130 TP_printk("pid=%d", __entry->pid) 131 ); 132 133 TRACE_EVENT(finish_task_reaping, 134 TP_PROTO(int pid), 135 136 TP_ARGS(pid), 137 138 TP_STRUCT__entry( 139 __field(int, pid) 140 ), 141 142 TP_fast_assign( 143 __entry->pid = pid; 144 ), 145 146 TP_printk("pid=%d", __entry->pid) 147 ); 148 149 TRACE_EVENT(skip_task_reaping, 150 TP_PROTO(int pid), 151 152 TP_ARGS(pid), 153 154 TP_STRUCT__entry( 155 __field(int, pid) 156 ), 157 158 TP_fast_assign( 159 __entry->pid = pid; 160 ), 161 162 TP_printk("pid=%d", __entry->pid) 163 ); 164 165 #ifdef CONFIG_COMPACTION 166 TRACE_EVENT(compact_retry, 167 168 TP_PROTO(int order, 169 enum compact_priority priority, 170 enum compact_result result, 171 int retries, 172 int max_retries, 173 bool ret), 174 175 TP_ARGS(order, priority, result, retries, max_retries, ret), 176 177 TP_STRUCT__entry( 178 __field( int, order) 179 __field( int, priority) 180 __field( int, result) 181 __field( int, retries) 182 __field( int, max_retries) 183 __field( bool, ret) 184 ), 185 186 TP_fast_assign( 187 __entry->order = order; 188 __entry->priority = priority; 189 __entry->result = compact_result_to_feedback(result); 190 __entry->retries = retries; 191 __entry->max_retries = max_retries; 192 __entry->ret = ret; 193 ), 194 195 TP_printk("order=%d priority=%s compaction_result=%s retries=%d max_retries=%d should_retry=%d", 196 __entry->order, 197 __print_symbolic(__entry->priority, COMPACTION_PRIORITY), 198 __print_symbolic(__entry->result, COMPACTION_FEEDBACK), 199 __entry->retries, __entry->max_retries, 200 __entry->ret) 201 ); 202 #endif /* CONFIG_COMPACTION */ 203 #endif 204 205 /* This part must be outside protection */ 206 #include <trace/define_trace.h> 207