136 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#undef TRACE_SYSTEM3#define TRACE_SYSTEM page_ref4 5#if !defined(_TRACE_PAGE_REF_H) || defined(TRACE_HEADER_MULTI_READ)6#define _TRACE_PAGE_REF_H7 8#include <linux/types.h>9#include <linux/page_ref.h>10#include <linux/tracepoint.h>11#include <trace/events/mmflags.h>12 13DECLARE_EVENT_CLASS(page_ref_mod_template,14 15 TP_PROTO(struct page *page, int v),16 17 TP_ARGS(page, v),18 19 TP_STRUCT__entry(20 __field(unsigned long, pfn)21 __field(unsigned long, flags)22 __field(int, count)23 __field(int, mapcount)24 __field(void *, mapping)25 __field(int, mt)26 __field(int, val)27 ),28 29 TP_fast_assign(30 __entry->pfn = page_to_pfn(page);31 __entry->flags = page->flags;32 __entry->count = page_ref_count(page);33 __entry->mapcount = atomic_read(&page->_mapcount);34 __entry->mapping = page->mapping;35 __entry->mt = get_pageblock_migratetype(page);36 __entry->val = v;37 ),38 39 TP_printk("pfn=0x%lx flags=%s count=%d mapcount=%d mapping=%p mt=%d val=%d",40 __entry->pfn,41 show_page_flags(__entry->flags & PAGEFLAGS_MASK),42 __entry->count,43 __entry->mapcount, __entry->mapping, __entry->mt,44 __entry->val)45);46 47DEFINE_EVENT(page_ref_mod_template, page_ref_set,48 49 TP_PROTO(struct page *page, int v),50 51 TP_ARGS(page, v)52);53 54DEFINE_EVENT(page_ref_mod_template, page_ref_mod,55 56 TP_PROTO(struct page *page, int v),57 58 TP_ARGS(page, v)59);60 61DECLARE_EVENT_CLASS(page_ref_mod_and_test_template,62 63 TP_PROTO(struct page *page, int v, int ret),64 65 TP_ARGS(page, v, ret),66 67 TP_STRUCT__entry(68 __field(unsigned long, pfn)69 __field(unsigned long, flags)70 __field(int, count)71 __field(int, mapcount)72 __field(void *, mapping)73 __field(int, mt)74 __field(int, val)75 __field(int, ret)76 ),77 78 TP_fast_assign(79 __entry->pfn = page_to_pfn(page);80 __entry->flags = page->flags;81 __entry->count = page_ref_count(page);82 __entry->mapcount = atomic_read(&page->_mapcount);83 __entry->mapping = page->mapping;84 __entry->mt = get_pageblock_migratetype(page);85 __entry->val = v;86 __entry->ret = ret;87 ),88 89 TP_printk("pfn=0x%lx flags=%s count=%d mapcount=%d mapping=%p mt=%d val=%d ret=%d",90 __entry->pfn,91 show_page_flags(__entry->flags & PAGEFLAGS_MASK),92 __entry->count,93 __entry->mapcount, __entry->mapping, __entry->mt,94 __entry->val, __entry->ret)95);96 97DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_and_test,98 99 TP_PROTO(struct page *page, int v, int ret),100 101 TP_ARGS(page, v, ret)102);103 104DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_and_return,105 106 TP_PROTO(struct page *page, int v, int ret),107 108 TP_ARGS(page, v, ret)109);110 111DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_unless,112 113 TP_PROTO(struct page *page, int v, int ret),114 115 TP_ARGS(page, v, ret)116);117 118DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_freeze,119 120 TP_PROTO(struct page *page, int v, int ret),121 122 TP_ARGS(page, v, ret)123);124 125DEFINE_EVENT(page_ref_mod_template, page_ref_unfreeze,126 127 TP_PROTO(struct page *page, int v),128 129 TP_ARGS(page, v)130);131 132#endif /* _TRACE_PAGE_COUNT_H */133 134/* This part must be outside protection */135#include <trace/define_trace.h>136