brintos

brintos / linux-shallow public Read only

0
0
Text · 6.5 KiB · 9d5c00b Raw
249 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#undef TRACE_SYSTEM3#define TRACE_SYSTEM huge_memory4 5#if !defined(__HUGE_MEMORY_H) || defined(TRACE_HEADER_MULTI_READ)6#define __HUGE_MEMORY_H7 8#include  <linux/tracepoint.h>9 10#define SCAN_STATUS							\11	EM( SCAN_FAIL,			"failed")			\12	EM( SCAN_SUCCEED,		"succeeded")			\13	EM( SCAN_PMD_NULL,		"pmd_null")			\14	EM( SCAN_PMD_NONE,		"pmd_none")			\15	EM( SCAN_PMD_MAPPED,		"page_pmd_mapped")		\16	EM( SCAN_EXCEED_NONE_PTE,	"exceed_none_pte")		\17	EM( SCAN_EXCEED_SWAP_PTE,	"exceed_swap_pte")		\18	EM( SCAN_EXCEED_SHARED_PTE,	"exceed_shared_pte")		\19	EM( SCAN_PTE_NON_PRESENT,	"pte_non_present")		\20	EM( SCAN_PTE_UFFD_WP,		"pte_uffd_wp")			\21	EM( SCAN_PTE_MAPPED_HUGEPAGE,	"pte_mapped_hugepage")		\22	EM( SCAN_PAGE_RO,		"no_writable_page")		\23	EM( SCAN_LACK_REFERENCED_PAGE,	"lack_referenced_page")		\24	EM( SCAN_PAGE_NULL,		"page_null")			\25	EM( SCAN_SCAN_ABORT,		"scan_aborted")			\26	EM( SCAN_PAGE_COUNT,		"not_suitable_page_count")	\27	EM( SCAN_PAGE_LRU,		"page_not_in_lru")		\28	EM( SCAN_PAGE_LOCK,		"page_locked")			\29	EM( SCAN_PAGE_ANON,		"page_not_anon")		\30	EM( SCAN_PAGE_COMPOUND,		"page_compound")		\31	EM( SCAN_ANY_PROCESS,		"no_process_for_page")		\32	EM( SCAN_VMA_NULL,		"vma_null")			\33	EM( SCAN_VMA_CHECK,		"vma_check_failed")		\34	EM( SCAN_ADDRESS_RANGE,		"not_suitable_address_range")	\35	EM( SCAN_DEL_PAGE_LRU,		"could_not_delete_page_from_lru")\36	EM( SCAN_ALLOC_HUGE_PAGE_FAIL,	"alloc_huge_page_failed")	\37	EM( SCAN_CGROUP_CHARGE_FAIL,	"ccgroup_charge_failed")	\38	EM( SCAN_TRUNCATED,		"truncated")			\39	EM( SCAN_PAGE_HAS_PRIVATE,	"page_has_private")		\40	EM( SCAN_STORE_FAILED,		"store_failed")			\41	EM( SCAN_COPY_MC,		"copy_poisoned_page")		\42	EMe(SCAN_PAGE_FILLED,		"page_filled")43 44#undef EM45#undef EMe46#define EM(a, b)	TRACE_DEFINE_ENUM(a);47#define EMe(a, b)	TRACE_DEFINE_ENUM(a);48 49SCAN_STATUS50 51#undef EM52#undef EMe53#define EM(a, b)	{a, b},54#define EMe(a, b)	{a, b}55 56TRACE_EVENT(mm_khugepaged_scan_pmd,57 58	TP_PROTO(struct mm_struct *mm, struct page *page, bool writable,59		 int referenced, int none_or_zero, int status, int unmapped),60 61	TP_ARGS(mm, page, writable, referenced, none_or_zero, status, unmapped),62 63	TP_STRUCT__entry(64		__field(struct mm_struct *, mm)65		__field(unsigned long, pfn)66		__field(bool, writable)67		__field(int, referenced)68		__field(int, none_or_zero)69		__field(int, status)70		__field(int, unmapped)71	),72 73	TP_fast_assign(74		__entry->mm = mm;75		__entry->pfn = page ? page_to_pfn(page) : -1;76		__entry->writable = writable;77		__entry->referenced = referenced;78		__entry->none_or_zero = none_or_zero;79		__entry->status = status;80		__entry->unmapped = unmapped;81	),82 83	TP_printk("mm=%p, scan_pfn=0x%lx, writable=%d, referenced=%d, none_or_zero=%d, status=%s, unmapped=%d",84		__entry->mm,85		__entry->pfn,86		__entry->writable,87		__entry->referenced,88		__entry->none_or_zero,89		__print_symbolic(__entry->status, SCAN_STATUS),90		__entry->unmapped)91);92 93TRACE_EVENT(mm_collapse_huge_page,94 95	TP_PROTO(struct mm_struct *mm, int isolated, int status),96 97	TP_ARGS(mm, isolated, status),98 99	TP_STRUCT__entry(100		__field(struct mm_struct *, mm)101		__field(int, isolated)102		__field(int, status)103	),104 105	TP_fast_assign(106		__entry->mm = mm;107		__entry->isolated = isolated;108		__entry->status = status;109	),110 111	TP_printk("mm=%p, isolated=%d, status=%s",112		__entry->mm,113		__entry->isolated,114		__print_symbolic(__entry->status, SCAN_STATUS))115);116 117TRACE_EVENT(mm_collapse_huge_page_isolate,118 119	TP_PROTO(struct page *page, int none_or_zero,120		 int referenced, bool  writable, int status),121 122	TP_ARGS(page, none_or_zero, referenced, writable, status),123 124	TP_STRUCT__entry(125		__field(unsigned long, pfn)126		__field(int, none_or_zero)127		__field(int, referenced)128		__field(bool, writable)129		__field(int, status)130	),131 132	TP_fast_assign(133		__entry->pfn = page ? page_to_pfn(page) : -1;134		__entry->none_or_zero = none_or_zero;135		__entry->referenced = referenced;136		__entry->writable = writable;137		__entry->status = status;138	),139 140	TP_printk("scan_pfn=0x%lx, none_or_zero=%d, referenced=%d, writable=%d, status=%s",141		__entry->pfn,142		__entry->none_or_zero,143		__entry->referenced,144		__entry->writable,145		__print_symbolic(__entry->status, SCAN_STATUS))146);147 148TRACE_EVENT(mm_collapse_huge_page_swapin,149 150	TP_PROTO(struct mm_struct *mm, int swapped_in, int referenced, int ret),151 152	TP_ARGS(mm, swapped_in, referenced, ret),153 154	TP_STRUCT__entry(155		__field(struct mm_struct *, mm)156		__field(int, swapped_in)157		__field(int, referenced)158		__field(int, ret)159	),160 161	TP_fast_assign(162		__entry->mm = mm;163		__entry->swapped_in = swapped_in;164		__entry->referenced = referenced;165		__entry->ret = ret;166	),167 168	TP_printk("mm=%p, swapped_in=%d, referenced=%d, ret=%d",169		__entry->mm,170		__entry->swapped_in,171		__entry->referenced,172		__entry->ret)173);174 175TRACE_EVENT(mm_khugepaged_scan_file,176 177	TP_PROTO(struct mm_struct *mm, struct folio *folio, struct file *file,178		 int present, int swap, int result),179 180	TP_ARGS(mm, folio, file, present, swap, result),181 182	TP_STRUCT__entry(183		__field(struct mm_struct *, mm)184		__field(unsigned long, pfn)185		__string(filename, file->f_path.dentry->d_iname)186		__field(int, present)187		__field(int, swap)188		__field(int, result)189	),190 191	TP_fast_assign(192		__entry->mm = mm;193		__entry->pfn = folio ? folio_pfn(folio) : -1;194		__assign_str(filename);195		__entry->present = present;196		__entry->swap = swap;197		__entry->result = result;198	),199 200	TP_printk("mm=%p, scan_pfn=0x%lx, filename=%s, present=%d, swap=%d, result=%s",201		__entry->mm,202		__entry->pfn,203		__get_str(filename),204		__entry->present,205		__entry->swap,206		__print_symbolic(__entry->result, SCAN_STATUS))207);208 209TRACE_EVENT(mm_khugepaged_collapse_file,210	TP_PROTO(struct mm_struct *mm, struct folio *new_folio, pgoff_t index,211			unsigned long addr, bool is_shmem, struct file *file,212			int nr, int result),213	TP_ARGS(mm, new_folio, index, addr, is_shmem, file, nr, result),214	TP_STRUCT__entry(215		__field(struct mm_struct *, mm)216		__field(unsigned long, hpfn)217		__field(pgoff_t, index)218		__field(unsigned long, addr)219		__field(bool, is_shmem)220		__string(filename, file->f_path.dentry->d_iname)221		__field(int, nr)222		__field(int, result)223	),224 225	TP_fast_assign(226		__entry->mm = mm;227		__entry->hpfn = new_folio ? folio_pfn(new_folio) : -1;228		__entry->index = index;229		__entry->addr = addr;230		__entry->is_shmem = is_shmem;231		__assign_str(filename);232		__entry->nr = nr;233		__entry->result = result;234	),235 236	TP_printk("mm=%p, hpage_pfn=0x%lx, index=%ld, addr=%lx, is_shmem=%d, filename=%s, nr=%d, result=%s",237		__entry->mm,238		__entry->hpfn,239		__entry->index,240		__entry->addr,241		__entry->is_shmem,242		__get_str(filename),243		__entry->nr,244		__print_symbolic(__entry->result, SCAN_STATUS))245);246 247#endif /* __HUGE_MEMORY_H */248#include <trace/define_trace.h>249