Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #undef TRACE_SYSTEM
0003 #define TRACE_SYSTEM huge_memory
0004 
0005 #if !defined(__HUGE_MEMORY_H) || defined(TRACE_HEADER_MULTI_READ)
0006 #define __HUGE_MEMORY_H
0007 
0008 #include  <linux/tracepoint.h>
0009 
0010 #define SCAN_STATUS                         \
0011     EM( SCAN_FAIL,          "failed")           \
0012     EM( SCAN_SUCCEED,       "succeeded")            \
0013     EM( SCAN_PMD_NULL,      "pmd_null")         \
0014     EM( SCAN_EXCEED_NONE_PTE,   "exceed_none_pte")      \
0015     EM( SCAN_EXCEED_SWAP_PTE,   "exceed_swap_pte")      \
0016     EM( SCAN_EXCEED_SHARED_PTE, "exceed_shared_pte")        \
0017     EM( SCAN_PTE_NON_PRESENT,   "pte_non_present")      \
0018     EM( SCAN_PTE_UFFD_WP,       "pte_uffd_wp")          \
0019     EM( SCAN_PAGE_RO,       "no_writable_page")     \
0020     EM( SCAN_LACK_REFERENCED_PAGE,  "lack_referenced_page")     \
0021     EM( SCAN_PAGE_NULL,     "page_null")            \
0022     EM( SCAN_SCAN_ABORT,        "scan_aborted")         \
0023     EM( SCAN_PAGE_COUNT,        "not_suitable_page_count")  \
0024     EM( SCAN_PAGE_LRU,      "page_not_in_lru")      \
0025     EM( SCAN_PAGE_LOCK,     "page_locked")          \
0026     EM( SCAN_PAGE_ANON,     "page_not_anon")        \
0027     EM( SCAN_PAGE_COMPOUND,     "page_compound")        \
0028     EM( SCAN_ANY_PROCESS,       "no_process_for_page")      \
0029     EM( SCAN_VMA_NULL,      "vma_null")         \
0030     EM( SCAN_VMA_CHECK,     "vma_check_failed")     \
0031     EM( SCAN_ADDRESS_RANGE,     "not_suitable_address_range")   \
0032     EM( SCAN_DEL_PAGE_LRU,      "could_not_delete_page_from_lru")\
0033     EM( SCAN_ALLOC_HUGE_PAGE_FAIL,  "alloc_huge_page_failed")   \
0034     EM( SCAN_CGROUP_CHARGE_FAIL,    "ccgroup_charge_failed")    \
0035     EM( SCAN_TRUNCATED,     "truncated")            \
0036     EMe(SCAN_PAGE_HAS_PRIVATE,  "page_has_private")     \
0037 
0038 #undef EM
0039 #undef EMe
0040 #define EM(a, b)    TRACE_DEFINE_ENUM(a);
0041 #define EMe(a, b)   TRACE_DEFINE_ENUM(a);
0042 
0043 SCAN_STATUS
0044 
0045 #undef EM
0046 #undef EMe
0047 #define EM(a, b)    {a, b},
0048 #define EMe(a, b)   {a, b}
0049 
0050 TRACE_EVENT(mm_khugepaged_scan_pmd,
0051 
0052     TP_PROTO(struct mm_struct *mm, struct page *page, bool writable,
0053          int referenced, int none_or_zero, int status, int unmapped),
0054 
0055     TP_ARGS(mm, page, writable, referenced, none_or_zero, status, unmapped),
0056 
0057     TP_STRUCT__entry(
0058         __field(struct mm_struct *, mm)
0059         __field(unsigned long, pfn)
0060         __field(bool, writable)
0061         __field(int, referenced)
0062         __field(int, none_or_zero)
0063         __field(int, status)
0064         __field(int, unmapped)
0065     ),
0066 
0067     TP_fast_assign(
0068         __entry->mm = mm;
0069         __entry->pfn = page ? page_to_pfn(page) : -1;
0070         __entry->writable = writable;
0071         __entry->referenced = referenced;
0072         __entry->none_or_zero = none_or_zero;
0073         __entry->status = status;
0074         __entry->unmapped = unmapped;
0075     ),
0076 
0077     TP_printk("mm=%p, scan_pfn=0x%lx, writable=%d, referenced=%d, none_or_zero=%d, status=%s, unmapped=%d",
0078         __entry->mm,
0079         __entry->pfn,
0080         __entry->writable,
0081         __entry->referenced,
0082         __entry->none_or_zero,
0083         __print_symbolic(__entry->status, SCAN_STATUS),
0084         __entry->unmapped)
0085 );
0086 
0087 TRACE_EVENT(mm_collapse_huge_page,
0088 
0089     TP_PROTO(struct mm_struct *mm, int isolated, int status),
0090 
0091     TP_ARGS(mm, isolated, status),
0092 
0093     TP_STRUCT__entry(
0094         __field(struct mm_struct *, mm)
0095         __field(int, isolated)
0096         __field(int, status)
0097     ),
0098 
0099     TP_fast_assign(
0100         __entry->mm = mm;
0101         __entry->isolated = isolated;
0102         __entry->status = status;
0103     ),
0104 
0105     TP_printk("mm=%p, isolated=%d, status=%s",
0106         __entry->mm,
0107         __entry->isolated,
0108         __print_symbolic(__entry->status, SCAN_STATUS))
0109 );
0110 
0111 TRACE_EVENT(mm_collapse_huge_page_isolate,
0112 
0113     TP_PROTO(struct page *page, int none_or_zero,
0114          int referenced, bool  writable, int status),
0115 
0116     TP_ARGS(page, none_or_zero, referenced, writable, status),
0117 
0118     TP_STRUCT__entry(
0119         __field(unsigned long, pfn)
0120         __field(int, none_or_zero)
0121         __field(int, referenced)
0122         __field(bool, writable)
0123         __field(int, status)
0124     ),
0125 
0126     TP_fast_assign(
0127         __entry->pfn = page ? page_to_pfn(page) : -1;
0128         __entry->none_or_zero = none_or_zero;
0129         __entry->referenced = referenced;
0130         __entry->writable = writable;
0131         __entry->status = status;
0132     ),
0133 
0134     TP_printk("scan_pfn=0x%lx, none_or_zero=%d, referenced=%d, writable=%d, status=%s",
0135         __entry->pfn,
0136         __entry->none_or_zero,
0137         __entry->referenced,
0138         __entry->writable,
0139         __print_symbolic(__entry->status, SCAN_STATUS))
0140 );
0141 
0142 TRACE_EVENT(mm_collapse_huge_page_swapin,
0143 
0144     TP_PROTO(struct mm_struct *mm, int swapped_in, int referenced, int ret),
0145 
0146     TP_ARGS(mm, swapped_in, referenced, ret),
0147 
0148     TP_STRUCT__entry(
0149         __field(struct mm_struct *, mm)
0150         __field(int, swapped_in)
0151         __field(int, referenced)
0152         __field(int, ret)
0153     ),
0154 
0155     TP_fast_assign(
0156         __entry->mm = mm;
0157         __entry->swapped_in = swapped_in;
0158         __entry->referenced = referenced;
0159         __entry->ret = ret;
0160     ),
0161 
0162     TP_printk("mm=%p, swapped_in=%d, referenced=%d, ret=%d",
0163         __entry->mm,
0164         __entry->swapped_in,
0165         __entry->referenced,
0166         __entry->ret)
0167 );
0168 
0169 #endif /* __HUGE_MEMORY_H */
0170 #include <trace/define_trace.h>