Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
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  * First define the enums in the above macros to be exported to userspace
0029  * via TRACE_DEFINE_ENUM().
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  * Now redefine the EM() and EMe() macros to map the enums to the strings
0041  * that will be printed in the output.
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 /* _TRACE_MIGRATE_H */
0140 
0141 /* This part must be outside protection */
0142 #include <trace/define_trace.h>