0001
0002 #undef TRACE_SYSTEM
0003 #define TRACE_SYSTEM page_ref
0004
0005 #if !defined(_TRACE_PAGE_REF_H) || defined(TRACE_HEADER_MULTI_READ)
0006 #define _TRACE_PAGE_REF_H
0007
0008 #include <linux/types.h>
0009 #include <linux/page_ref.h>
0010 #include <linux/tracepoint.h>
0011 #include <trace/events/mmflags.h>
0012
0013 DECLARE_EVENT_CLASS(page_ref_mod_template,
0014
0015 TP_PROTO(struct page *page, int v),
0016
0017 TP_ARGS(page, v),
0018
0019 TP_STRUCT__entry(
0020 __field(unsigned long, pfn)
0021 __field(unsigned long, flags)
0022 __field(int, count)
0023 __field(int, mapcount)
0024 __field(void *, mapping)
0025 __field(int, mt)
0026 __field(int, val)
0027 ),
0028
0029 TP_fast_assign(
0030 __entry->pfn = page_to_pfn(page);
0031 __entry->flags = page->flags;
0032 __entry->count = page_ref_count(page);
0033 __entry->mapcount = page_mapcount(page);
0034 __entry->mapping = page->mapping;
0035 __entry->mt = get_pageblock_migratetype(page);
0036 __entry->val = v;
0037 ),
0038
0039 TP_printk("pfn=0x%lx flags=%s count=%d mapcount=%d mapping=%p mt=%d val=%d",
0040 __entry->pfn,
0041 show_page_flags(__entry->flags & PAGEFLAGS_MASK),
0042 __entry->count,
0043 __entry->mapcount, __entry->mapping, __entry->mt,
0044 __entry->val)
0045 );
0046
0047 DEFINE_EVENT(page_ref_mod_template, page_ref_set,
0048
0049 TP_PROTO(struct page *page, int v),
0050
0051 TP_ARGS(page, v)
0052 );
0053
0054 DEFINE_EVENT(page_ref_mod_template, page_ref_mod,
0055
0056 TP_PROTO(struct page *page, int v),
0057
0058 TP_ARGS(page, v)
0059 );
0060
0061 DECLARE_EVENT_CLASS(page_ref_mod_and_test_template,
0062
0063 TP_PROTO(struct page *page, int v, int ret),
0064
0065 TP_ARGS(page, v, ret),
0066
0067 TP_STRUCT__entry(
0068 __field(unsigned long, pfn)
0069 __field(unsigned long, flags)
0070 __field(int, count)
0071 __field(int, mapcount)
0072 __field(void *, mapping)
0073 __field(int, mt)
0074 __field(int, val)
0075 __field(int, ret)
0076 ),
0077
0078 TP_fast_assign(
0079 __entry->pfn = page_to_pfn(page);
0080 __entry->flags = page->flags;
0081 __entry->count = page_ref_count(page);
0082 __entry->mapcount = page_mapcount(page);
0083 __entry->mapping = page->mapping;
0084 __entry->mt = get_pageblock_migratetype(page);
0085 __entry->val = v;
0086 __entry->ret = ret;
0087 ),
0088
0089 TP_printk("pfn=0x%lx flags=%s count=%d mapcount=%d mapping=%p mt=%d val=%d ret=%d",
0090 __entry->pfn,
0091 show_page_flags(__entry->flags & PAGEFLAGS_MASK),
0092 __entry->count,
0093 __entry->mapcount, __entry->mapping, __entry->mt,
0094 __entry->val, __entry->ret)
0095 );
0096
0097 DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_and_test,
0098
0099 TP_PROTO(struct page *page, int v, int ret),
0100
0101 TP_ARGS(page, v, ret)
0102 );
0103
0104 DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_and_return,
0105
0106 TP_PROTO(struct page *page, int v, int ret),
0107
0108 TP_ARGS(page, v, ret)
0109 );
0110
0111 DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_unless,
0112
0113 TP_PROTO(struct page *page, int v, int ret),
0114
0115 TP_ARGS(page, v, ret)
0116 );
0117
0118 DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_freeze,
0119
0120 TP_PROTO(struct page *page, int v, int ret),
0121
0122 TP_ARGS(page, v, ret)
0123 );
0124
0125 DEFINE_EVENT(page_ref_mod_template, page_ref_unfreeze,
0126
0127 TP_PROTO(struct page *page, int v),
0128
0129 TP_ARGS(page, v)
0130 );
0131
0132 #endif
0133
0134
0135 #include <trace/define_trace.h>