#undef TRACE_SYSTEM
#define TRACE_SYSTEM page_ref

#if !defined(_TRACE_PAGE_REF_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_PAGE_REF_H

#include <linux/types.h>
#include <linux/page_ref.h>
#include <linux/tracepoint.h>
#include <trace/events/mmflags.h>

DECLARE_EVENT_CLASS(page_ref_mod_template,

	TP_PROTO(struct page *page, int v),

	TP_ARGS(page, v),

	TP_STRUCT__entry(
		__field(unsigned long, pfn)
		__field(unsigned long, flags)
		__field(int, count)
		__field(int, mapcount)
		__field(void *, mapping)
		__field(int, mt)
		__field(int, val)
	),

	TP_fast_assign(
		__entry->pfn = page_to_pfn(page);
		__entry->flags = page->flags;
		__entry->count = page_ref_count(page);
		__entry->mapcount = page_mapcount(page);
		__entry->mapping = page->mapping;
		__entry->mt = get_pageblock_migratetype(page);
		__entry->val = v;
	),

	TP_printk("pfn=0x%lx flags=%s count=%d mapcount=%d mapping=%p mt=%d val=%d",
		__entry->pfn,
		show_page_flags(__entry->flags & ((1UL << NR_PAGEFLAGS) - 1)),
		__entry->count,
		__entry->mapcount, __entry->mapping, __entry->mt,
		__entry->val)
);

DEFINE_EVENT(page_ref_mod_template, page_ref_set,

	TP_PROTO(struct page *page, int v),

	TP_ARGS(page, v)
);

DEFINE_EVENT(page_ref_mod_template, page_ref_mod,

	TP_PROTO(struct page *page, int v),

	TP_ARGS(page, v)
);

DECLARE_EVENT_CLASS(page_ref_mod_and_test_template,

	TP_PROTO(struct page *page, int v, int ret),

	TP_ARGS(page, v, ret),

	TP_STRUCT__entry(
		__field(unsigned long, pfn)
		__field(unsigned long, flags)
		__field(int, count)
		__field(int, mapcount)
		__field(void *, mapping)
		__field(int, mt)
		__field(int, val)
		__field(int, ret)
	),

	TP_fast_assign(
		__entry->pfn = page_to_pfn(page);
		__entry->flags = page->flags;
		__entry->count = page_ref_count(page);
		__entry->mapcount = page_mapcount(page);
		__entry->mapping = page->mapping;
		__entry->mt = get_pageblock_migratetype(page);
		__entry->val = v;
		__entry->ret = ret;
	),

	TP_printk("pfn=0x%lx flags=%s count=%d mapcount=%d mapping=%p mt=%d val=%d ret=%d",
		__entry->pfn,
		show_page_flags(__entry->flags & ((1UL << NR_PAGEFLAGS) - 1)),
		__entry->count,
		__entry->mapcount, __entry->mapping, __entry->mt,
		__entry->val, __entry->ret)
);

DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_and_test,

	TP_PROTO(struct page *page, int v, int ret),

	TP_ARGS(page, v, ret)
);

DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_and_return,

	TP_PROTO(struct page *page, int v, int ret),

	TP_ARGS(page, v, ret)
);

DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_unless,

	TP_PROTO(struct page *page, int v, int ret),

	TP_ARGS(page, v, ret)
);

DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_freeze,

	TP_PROTO(struct page *page, int v, int ret),

	TP_ARGS(page, v, ret)
);

DEFINE_EVENT(page_ref_mod_template, page_ref_unfreeze,

	TP_PROTO(struct page *page, int v),

	TP_ARGS(page, v)
);

#endif /* _TRACE_PAGE_COUNT_H */

/* This part must be outside protection */
#include <trace/define_trace.h>
