1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 243d2b113SKAMEZAWA Hiroyuki #undef TRACE_SYSTEM 343d2b113SKAMEZAWA Hiroyuki #define TRACE_SYSTEM oom 443d2b113SKAMEZAWA Hiroyuki 543d2b113SKAMEZAWA Hiroyuki #if !defined(_TRACE_OOM_H) || defined(TRACE_HEADER_MULTI_READ) 643d2b113SKAMEZAWA Hiroyuki #define _TRACE_OOM_H 743d2b113SKAMEZAWA Hiroyuki #include <linux/tracepoint.h> 8d379f01dSMichal Hocko #include <trace/events/mmflags.h> 943d2b113SKAMEZAWA Hiroyuki 1043d2b113SKAMEZAWA Hiroyuki TRACE_EVENT(oom_score_adj_update, 1143d2b113SKAMEZAWA Hiroyuki 1243d2b113SKAMEZAWA Hiroyuki TP_PROTO(struct task_struct *task), 1343d2b113SKAMEZAWA Hiroyuki 1443d2b113SKAMEZAWA Hiroyuki TP_ARGS(task), 1543d2b113SKAMEZAWA Hiroyuki 1643d2b113SKAMEZAWA Hiroyuki TP_STRUCT__entry( 1743d2b113SKAMEZAWA Hiroyuki __field( pid_t, pid) 1843d2b113SKAMEZAWA Hiroyuki __array( char, comm, TASK_COMM_LEN ) 19a9c58b90SDavid Rientjes __field( short, oom_score_adj) 2043d2b113SKAMEZAWA Hiroyuki ), 2143d2b113SKAMEZAWA Hiroyuki 2243d2b113SKAMEZAWA Hiroyuki TP_fast_assign( 2343d2b113SKAMEZAWA Hiroyuki __entry->pid = task->pid; 2443d2b113SKAMEZAWA Hiroyuki memcpy(__entry->comm, task->comm, TASK_COMM_LEN); 2543d2b113SKAMEZAWA Hiroyuki __entry->oom_score_adj = task->signal->oom_score_adj; 2643d2b113SKAMEZAWA Hiroyuki ), 2743d2b113SKAMEZAWA Hiroyuki 28a9c58b90SDavid Rientjes TP_printk("pid=%d comm=%s oom_score_adj=%hd", 2943d2b113SKAMEZAWA Hiroyuki __entry->pid, __entry->comm, __entry->oom_score_adj) 3043d2b113SKAMEZAWA Hiroyuki ); 3143d2b113SKAMEZAWA Hiroyuki 32d379f01dSMichal Hocko TRACE_EVENT(reclaim_retry_zone, 33d379f01dSMichal Hocko 34d379f01dSMichal Hocko TP_PROTO(struct zoneref *zoneref, 35d379f01dSMichal Hocko int order, 36d379f01dSMichal Hocko unsigned long reclaimable, 37d379f01dSMichal Hocko unsigned long available, 38d379f01dSMichal Hocko unsigned long min_wmark, 39d379f01dSMichal Hocko int no_progress_loops, 40d379f01dSMichal Hocko bool wmark_check), 41d379f01dSMichal Hocko 42d379f01dSMichal Hocko TP_ARGS(zoneref, order, reclaimable, available, min_wmark, no_progress_loops, wmark_check), 43d379f01dSMichal Hocko 44d379f01dSMichal Hocko TP_STRUCT__entry( 45d379f01dSMichal Hocko __field( int, node) 46d379f01dSMichal Hocko __field( int, zone_idx) 47d379f01dSMichal Hocko __field( int, order) 48d379f01dSMichal Hocko __field( unsigned long, reclaimable) 49d379f01dSMichal Hocko __field( unsigned long, available) 50d379f01dSMichal Hocko __field( unsigned long, min_wmark) 51d379f01dSMichal Hocko __field( int, no_progress_loops) 52d379f01dSMichal Hocko __field( bool, wmark_check) 53d379f01dSMichal Hocko ), 54d379f01dSMichal Hocko 55d379f01dSMichal Hocko TP_fast_assign( 56d379f01dSMichal Hocko __entry->node = zone_to_nid(zoneref->zone); 57d379f01dSMichal Hocko __entry->zone_idx = zoneref->zone_idx; 58d379f01dSMichal Hocko __entry->order = order; 59d379f01dSMichal Hocko __entry->reclaimable = reclaimable; 60d379f01dSMichal Hocko __entry->available = available; 61d379f01dSMichal Hocko __entry->min_wmark = min_wmark; 62d379f01dSMichal Hocko __entry->no_progress_loops = no_progress_loops; 63d379f01dSMichal Hocko __entry->wmark_check = wmark_check; 64d379f01dSMichal Hocko ), 65d379f01dSMichal Hocko 66d379f01dSMichal Hocko TP_printk("node=%d zone=%-8s order=%d reclaimable=%lu available=%lu min_wmark=%lu no_progress_loops=%d wmark_check=%d", 67d379f01dSMichal Hocko __entry->node, __print_symbolic(__entry->zone_idx, ZONE_TYPE), 68d379f01dSMichal Hocko __entry->order, 69d379f01dSMichal Hocko __entry->reclaimable, __entry->available, __entry->min_wmark, 70d379f01dSMichal Hocko __entry->no_progress_loops, 71d379f01dSMichal Hocko __entry->wmark_check) 72d379f01dSMichal Hocko ); 7365190cffSMichal Hocko 74422580c3SRoman Gushchin TRACE_EVENT(mark_victim, 75422580c3SRoman Gushchin TP_PROTO(int pid), 76422580c3SRoman Gushchin 77422580c3SRoman Gushchin TP_ARGS(pid), 78422580c3SRoman Gushchin 79422580c3SRoman Gushchin TP_STRUCT__entry( 80422580c3SRoman Gushchin __field(int, pid) 81422580c3SRoman Gushchin ), 82422580c3SRoman Gushchin 83422580c3SRoman Gushchin TP_fast_assign( 84422580c3SRoman Gushchin __entry->pid = pid; 85422580c3SRoman Gushchin ), 86422580c3SRoman Gushchin 87422580c3SRoman Gushchin TP_printk("pid=%d", __entry->pid) 88422580c3SRoman Gushchin ); 89422580c3SRoman Gushchin 90422580c3SRoman Gushchin TRACE_EVENT(wake_reaper, 91422580c3SRoman Gushchin TP_PROTO(int pid), 92422580c3SRoman Gushchin 93422580c3SRoman Gushchin TP_ARGS(pid), 94422580c3SRoman Gushchin 95422580c3SRoman Gushchin TP_STRUCT__entry( 96422580c3SRoman Gushchin __field(int, pid) 97422580c3SRoman Gushchin ), 98422580c3SRoman Gushchin 99422580c3SRoman Gushchin TP_fast_assign( 100422580c3SRoman Gushchin __entry->pid = pid; 101422580c3SRoman Gushchin ), 102422580c3SRoman Gushchin 103422580c3SRoman Gushchin TP_printk("pid=%d", __entry->pid) 104422580c3SRoman Gushchin ); 105422580c3SRoman Gushchin 106422580c3SRoman Gushchin TRACE_EVENT(start_task_reaping, 107422580c3SRoman Gushchin TP_PROTO(int pid), 108422580c3SRoman Gushchin 109422580c3SRoman Gushchin TP_ARGS(pid), 110422580c3SRoman Gushchin 111422580c3SRoman Gushchin TP_STRUCT__entry( 112422580c3SRoman Gushchin __field(int, pid) 113422580c3SRoman Gushchin ), 114422580c3SRoman Gushchin 115422580c3SRoman Gushchin TP_fast_assign( 116422580c3SRoman Gushchin __entry->pid = pid; 117422580c3SRoman Gushchin ), 118422580c3SRoman Gushchin 119422580c3SRoman Gushchin TP_printk("pid=%d", __entry->pid) 120422580c3SRoman Gushchin ); 121422580c3SRoman Gushchin 122422580c3SRoman Gushchin TRACE_EVENT(finish_task_reaping, 123422580c3SRoman Gushchin TP_PROTO(int pid), 124422580c3SRoman Gushchin 125422580c3SRoman Gushchin TP_ARGS(pid), 126422580c3SRoman Gushchin 127422580c3SRoman Gushchin TP_STRUCT__entry( 128422580c3SRoman Gushchin __field(int, pid) 129422580c3SRoman Gushchin ), 130422580c3SRoman Gushchin 131422580c3SRoman Gushchin TP_fast_assign( 132422580c3SRoman Gushchin __entry->pid = pid; 133422580c3SRoman Gushchin ), 134422580c3SRoman Gushchin 135422580c3SRoman Gushchin TP_printk("pid=%d", __entry->pid) 136422580c3SRoman Gushchin ); 137422580c3SRoman Gushchin 138422580c3SRoman Gushchin TRACE_EVENT(skip_task_reaping, 139422580c3SRoman Gushchin TP_PROTO(int pid), 140422580c3SRoman Gushchin 141422580c3SRoman Gushchin TP_ARGS(pid), 142422580c3SRoman Gushchin 143422580c3SRoman Gushchin TP_STRUCT__entry( 144422580c3SRoman Gushchin __field(int, pid) 145422580c3SRoman Gushchin ), 146422580c3SRoman Gushchin 147422580c3SRoman Gushchin TP_fast_assign( 148422580c3SRoman Gushchin __entry->pid = pid; 149422580c3SRoman Gushchin ), 150422580c3SRoman Gushchin 151422580c3SRoman Gushchin TP_printk("pid=%d", __entry->pid) 152422580c3SRoman Gushchin ); 153422580c3SRoman Gushchin 15465190cffSMichal Hocko #ifdef CONFIG_COMPACTION 15565190cffSMichal Hocko TRACE_EVENT(compact_retry, 15665190cffSMichal Hocko 15765190cffSMichal Hocko TP_PROTO(int order, 15865190cffSMichal Hocko enum compact_priority priority, 15965190cffSMichal Hocko enum compact_result result, 16065190cffSMichal Hocko int retries, 16165190cffSMichal Hocko int max_retries, 16265190cffSMichal Hocko bool ret), 16365190cffSMichal Hocko 16465190cffSMichal Hocko TP_ARGS(order, priority, result, retries, max_retries, ret), 16565190cffSMichal Hocko 16665190cffSMichal Hocko TP_STRUCT__entry( 16765190cffSMichal Hocko __field( int, order) 16865190cffSMichal Hocko __field( int, priority) 16965190cffSMichal Hocko __field( int, result) 17065190cffSMichal Hocko __field( int, retries) 17165190cffSMichal Hocko __field( int, max_retries) 17265190cffSMichal Hocko __field( bool, ret) 17365190cffSMichal Hocko ), 17465190cffSMichal Hocko 17565190cffSMichal Hocko TP_fast_assign( 17665190cffSMichal Hocko __entry->order = order; 17765190cffSMichal Hocko __entry->priority = priority; 17865190cffSMichal Hocko __entry->result = compact_result_to_feedback(result); 17965190cffSMichal Hocko __entry->retries = retries; 18065190cffSMichal Hocko __entry->max_retries = max_retries; 18165190cffSMichal Hocko __entry->ret = ret; 18265190cffSMichal Hocko ), 18365190cffSMichal Hocko 18465190cffSMichal Hocko TP_printk("order=%d priority=%s compaction_result=%s retries=%d max_retries=%d should_retry=%d", 18565190cffSMichal Hocko __entry->order, 18665190cffSMichal Hocko __print_symbolic(__entry->priority, COMPACTION_PRIORITY), 18765190cffSMichal Hocko __print_symbolic(__entry->result, COMPACTION_FEEDBACK), 18865190cffSMichal Hocko __entry->retries, __entry->max_retries, 18965190cffSMichal Hocko __entry->ret) 19065190cffSMichal Hocko ); 19165190cffSMichal Hocko #endif /* CONFIG_COMPACTION */ 19243d2b113SKAMEZAWA Hiroyuki #endif 19343d2b113SKAMEZAWA Hiroyuki 19443d2b113SKAMEZAWA Hiroyuki /* This part must be outside protection */ 19543d2b113SKAMEZAWA Hiroyuki #include <trace/define_trace.h> 196