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