162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#undef TRACE_SYSTEM
362306a36Sopenharmony_ci#define TRACE_SYSTEM page_ref
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#if !defined(_TRACE_PAGE_REF_H) || defined(TRACE_HEADER_MULTI_READ)
662306a36Sopenharmony_ci#define _TRACE_PAGE_REF_H
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#include <linux/types.h>
962306a36Sopenharmony_ci#include <linux/page_ref.h>
1062306a36Sopenharmony_ci#include <linux/tracepoint.h>
1162306a36Sopenharmony_ci#include <trace/events/mmflags.h>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ciDECLARE_EVENT_CLASS(page_ref_mod_template,
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci	TP_PROTO(struct page *page, int v),
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci	TP_ARGS(page, v),
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci	TP_STRUCT__entry(
2062306a36Sopenharmony_ci		__field(unsigned long, pfn)
2162306a36Sopenharmony_ci		__field(unsigned long, flags)
2262306a36Sopenharmony_ci		__field(int, count)
2362306a36Sopenharmony_ci		__field(int, mapcount)
2462306a36Sopenharmony_ci		__field(void *, mapping)
2562306a36Sopenharmony_ci		__field(int, mt)
2662306a36Sopenharmony_ci		__field(int, val)
2762306a36Sopenharmony_ci	),
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci	TP_fast_assign(
3062306a36Sopenharmony_ci		__entry->pfn = page_to_pfn(page);
3162306a36Sopenharmony_ci		__entry->flags = page->flags;
3262306a36Sopenharmony_ci		__entry->count = page_ref_count(page);
3362306a36Sopenharmony_ci		__entry->mapcount = page_mapcount(page);
3462306a36Sopenharmony_ci		__entry->mapping = page->mapping;
3562306a36Sopenharmony_ci		__entry->mt = get_pageblock_migratetype(page);
3662306a36Sopenharmony_ci		__entry->val = v;
3762306a36Sopenharmony_ci	),
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci	TP_printk("pfn=0x%lx flags=%s count=%d mapcount=%d mapping=%p mt=%d val=%d",
4062306a36Sopenharmony_ci		__entry->pfn,
4162306a36Sopenharmony_ci		show_page_flags(__entry->flags & PAGEFLAGS_MASK),
4262306a36Sopenharmony_ci		__entry->count,
4362306a36Sopenharmony_ci		__entry->mapcount, __entry->mapping, __entry->mt,
4462306a36Sopenharmony_ci		__entry->val)
4562306a36Sopenharmony_ci);
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciDEFINE_EVENT(page_ref_mod_template, page_ref_set,
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci	TP_PROTO(struct page *page, int v),
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci	TP_ARGS(page, v)
5262306a36Sopenharmony_ci);
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ciDEFINE_EVENT(page_ref_mod_template, page_ref_mod,
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci	TP_PROTO(struct page *page, int v),
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci	TP_ARGS(page, v)
5962306a36Sopenharmony_ci);
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ciDECLARE_EVENT_CLASS(page_ref_mod_and_test_template,
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci	TP_PROTO(struct page *page, int v, int ret),
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci	TP_ARGS(page, v, ret),
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci	TP_STRUCT__entry(
6862306a36Sopenharmony_ci		__field(unsigned long, pfn)
6962306a36Sopenharmony_ci		__field(unsigned long, flags)
7062306a36Sopenharmony_ci		__field(int, count)
7162306a36Sopenharmony_ci		__field(int, mapcount)
7262306a36Sopenharmony_ci		__field(void *, mapping)
7362306a36Sopenharmony_ci		__field(int, mt)
7462306a36Sopenharmony_ci		__field(int, val)
7562306a36Sopenharmony_ci		__field(int, ret)
7662306a36Sopenharmony_ci	),
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ci	TP_fast_assign(
7962306a36Sopenharmony_ci		__entry->pfn = page_to_pfn(page);
8062306a36Sopenharmony_ci		__entry->flags = page->flags;
8162306a36Sopenharmony_ci		__entry->count = page_ref_count(page);
8262306a36Sopenharmony_ci		__entry->mapcount = page_mapcount(page);
8362306a36Sopenharmony_ci		__entry->mapping = page->mapping;
8462306a36Sopenharmony_ci		__entry->mt = get_pageblock_migratetype(page);
8562306a36Sopenharmony_ci		__entry->val = v;
8662306a36Sopenharmony_ci		__entry->ret = ret;
8762306a36Sopenharmony_ci	),
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci	TP_printk("pfn=0x%lx flags=%s count=%d mapcount=%d mapping=%p mt=%d val=%d ret=%d",
9062306a36Sopenharmony_ci		__entry->pfn,
9162306a36Sopenharmony_ci		show_page_flags(__entry->flags & PAGEFLAGS_MASK),
9262306a36Sopenharmony_ci		__entry->count,
9362306a36Sopenharmony_ci		__entry->mapcount, __entry->mapping, __entry->mt,
9462306a36Sopenharmony_ci		__entry->val, __entry->ret)
9562306a36Sopenharmony_ci);
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ciDEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_and_test,
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ci	TP_PROTO(struct page *page, int v, int ret),
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci	TP_ARGS(page, v, ret)
10262306a36Sopenharmony_ci);
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ciDEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_and_return,
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci	TP_PROTO(struct page *page, int v, int ret),
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci	TP_ARGS(page, v, ret)
10962306a36Sopenharmony_ci);
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_ciDEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_unless,
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ci	TP_PROTO(struct page *page, int v, int ret),
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_ci	TP_ARGS(page, v, ret)
11662306a36Sopenharmony_ci);
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_ciDEFINE_EVENT(page_ref_mod_and_test_template, page_ref_freeze,
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ci	TP_PROTO(struct page *page, int v, int ret),
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_ci	TP_ARGS(page, v, ret)
12362306a36Sopenharmony_ci);
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_ciDEFINE_EVENT(page_ref_mod_template, page_ref_unfreeze,
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ci	TP_PROTO(struct page *page, int v),
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ci	TP_ARGS(page, v)
13062306a36Sopenharmony_ci);
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci#endif /* _TRACE_PAGE_COUNT_H */
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci/* This part must be outside protection */
13562306a36Sopenharmony_ci#include <trace/define_trace.h>
136