1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 295813b8fSJoonsoo Kim #undef TRACE_SYSTEM 395813b8fSJoonsoo Kim #define TRACE_SYSTEM page_ref 495813b8fSJoonsoo Kim 595813b8fSJoonsoo Kim #if !defined(_TRACE_PAGE_REF_H) || defined(TRACE_HEADER_MULTI_READ) 695813b8fSJoonsoo Kim #define _TRACE_PAGE_REF_H 795813b8fSJoonsoo Kim 895813b8fSJoonsoo Kim #include <linux/types.h> 995813b8fSJoonsoo Kim #include <linux/page_ref.h> 1095813b8fSJoonsoo Kim #include <linux/tracepoint.h> 1195813b8fSJoonsoo Kim #include <trace/events/mmflags.h> 1295813b8fSJoonsoo Kim 1395813b8fSJoonsoo Kim DECLARE_EVENT_CLASS(page_ref_mod_template, 1495813b8fSJoonsoo Kim 1595813b8fSJoonsoo Kim TP_PROTO(struct page *page, int v), 1695813b8fSJoonsoo Kim 1795813b8fSJoonsoo Kim TP_ARGS(page, v), 1895813b8fSJoonsoo Kim 1995813b8fSJoonsoo Kim TP_STRUCT__entry( 2095813b8fSJoonsoo Kim __field(unsigned long, pfn) 2195813b8fSJoonsoo Kim __field(unsigned long, flags) 2295813b8fSJoonsoo Kim __field(int, count) 2395813b8fSJoonsoo Kim __field(int, mapcount) 2495813b8fSJoonsoo Kim __field(void *, mapping) 2595813b8fSJoonsoo Kim __field(int, mt) 2695813b8fSJoonsoo Kim __field(int, val) 2795813b8fSJoonsoo Kim ), 2895813b8fSJoonsoo Kim 2995813b8fSJoonsoo Kim TP_fast_assign( 3095813b8fSJoonsoo Kim __entry->pfn = page_to_pfn(page); 3195813b8fSJoonsoo Kim __entry->flags = page->flags; 3295813b8fSJoonsoo Kim __entry->count = page_ref_count(page); 3395813b8fSJoonsoo Kim __entry->mapcount = page_mapcount(page); 3495813b8fSJoonsoo Kim __entry->mapping = page->mapping; 3595813b8fSJoonsoo Kim __entry->mt = get_pageblock_migratetype(page); 3695813b8fSJoonsoo Kim __entry->val = v; 3795813b8fSJoonsoo Kim ), 3895813b8fSJoonsoo Kim 3995813b8fSJoonsoo Kim TP_printk("pfn=0x%lx flags=%s count=%d mapcount=%d mapping=%p mt=%d val=%d", 4095813b8fSJoonsoo Kim __entry->pfn, 41*41c961b9SMuchun Song show_page_flags(__entry->flags & PAGEFLAGS_MASK), 4295813b8fSJoonsoo Kim __entry->count, 4395813b8fSJoonsoo Kim __entry->mapcount, __entry->mapping, __entry->mt, 4495813b8fSJoonsoo Kim __entry->val) 4595813b8fSJoonsoo Kim ); 4695813b8fSJoonsoo Kim 4795813b8fSJoonsoo Kim DEFINE_EVENT(page_ref_mod_template, page_ref_set, 4895813b8fSJoonsoo Kim 4995813b8fSJoonsoo Kim TP_PROTO(struct page *page, int v), 5095813b8fSJoonsoo Kim 5195813b8fSJoonsoo Kim TP_ARGS(page, v) 5295813b8fSJoonsoo Kim ); 5395813b8fSJoonsoo Kim 5495813b8fSJoonsoo Kim DEFINE_EVENT(page_ref_mod_template, page_ref_mod, 5595813b8fSJoonsoo Kim 5695813b8fSJoonsoo Kim TP_PROTO(struct page *page, int v), 5795813b8fSJoonsoo Kim 5895813b8fSJoonsoo Kim TP_ARGS(page, v) 5995813b8fSJoonsoo Kim ); 6095813b8fSJoonsoo Kim 6195813b8fSJoonsoo Kim DECLARE_EVENT_CLASS(page_ref_mod_and_test_template, 6295813b8fSJoonsoo Kim 6395813b8fSJoonsoo Kim TP_PROTO(struct page *page, int v, int ret), 6495813b8fSJoonsoo Kim 6595813b8fSJoonsoo Kim TP_ARGS(page, v, ret), 6695813b8fSJoonsoo Kim 6795813b8fSJoonsoo Kim TP_STRUCT__entry( 6895813b8fSJoonsoo Kim __field(unsigned long, pfn) 6995813b8fSJoonsoo Kim __field(unsigned long, flags) 7095813b8fSJoonsoo Kim __field(int, count) 7195813b8fSJoonsoo Kim __field(int, mapcount) 7295813b8fSJoonsoo Kim __field(void *, mapping) 7395813b8fSJoonsoo Kim __field(int, mt) 7495813b8fSJoonsoo Kim __field(int, val) 7595813b8fSJoonsoo Kim __field(int, ret) 7695813b8fSJoonsoo Kim ), 7795813b8fSJoonsoo Kim 7895813b8fSJoonsoo Kim TP_fast_assign( 7995813b8fSJoonsoo Kim __entry->pfn = page_to_pfn(page); 8095813b8fSJoonsoo Kim __entry->flags = page->flags; 8195813b8fSJoonsoo Kim __entry->count = page_ref_count(page); 8295813b8fSJoonsoo Kim __entry->mapcount = page_mapcount(page); 8395813b8fSJoonsoo Kim __entry->mapping = page->mapping; 8495813b8fSJoonsoo Kim __entry->mt = get_pageblock_migratetype(page); 8595813b8fSJoonsoo Kim __entry->val = v; 8695813b8fSJoonsoo Kim __entry->ret = ret; 8795813b8fSJoonsoo Kim ), 8895813b8fSJoonsoo Kim 8995813b8fSJoonsoo Kim TP_printk("pfn=0x%lx flags=%s count=%d mapcount=%d mapping=%p mt=%d val=%d ret=%d", 9095813b8fSJoonsoo Kim __entry->pfn, 91*41c961b9SMuchun Song show_page_flags(__entry->flags & PAGEFLAGS_MASK), 9295813b8fSJoonsoo Kim __entry->count, 9395813b8fSJoonsoo Kim __entry->mapcount, __entry->mapping, __entry->mt, 9495813b8fSJoonsoo Kim __entry->val, __entry->ret) 9595813b8fSJoonsoo Kim ); 9695813b8fSJoonsoo Kim 9795813b8fSJoonsoo Kim DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_and_test, 9895813b8fSJoonsoo Kim 9995813b8fSJoonsoo Kim TP_PROTO(struct page *page, int v, int ret), 10095813b8fSJoonsoo Kim 10195813b8fSJoonsoo Kim TP_ARGS(page, v, ret) 10295813b8fSJoonsoo Kim ); 10395813b8fSJoonsoo Kim 10495813b8fSJoonsoo Kim DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_and_return, 10595813b8fSJoonsoo Kim 10695813b8fSJoonsoo Kim TP_PROTO(struct page *page, int v, int ret), 10795813b8fSJoonsoo Kim 10895813b8fSJoonsoo Kim TP_ARGS(page, v, ret) 10995813b8fSJoonsoo Kim ); 11095813b8fSJoonsoo Kim 11195813b8fSJoonsoo Kim DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_unless, 11295813b8fSJoonsoo Kim 11395813b8fSJoonsoo Kim TP_PROTO(struct page *page, int v, int ret), 11495813b8fSJoonsoo Kim 11595813b8fSJoonsoo Kim TP_ARGS(page, v, ret) 11695813b8fSJoonsoo Kim ); 11795813b8fSJoonsoo Kim 11895813b8fSJoonsoo Kim DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_freeze, 11995813b8fSJoonsoo Kim 12095813b8fSJoonsoo Kim TP_PROTO(struct page *page, int v, int ret), 12195813b8fSJoonsoo Kim 12295813b8fSJoonsoo Kim TP_ARGS(page, v, ret) 12395813b8fSJoonsoo Kim ); 12495813b8fSJoonsoo Kim 12595813b8fSJoonsoo Kim DEFINE_EVENT(page_ref_mod_template, page_ref_unfreeze, 12695813b8fSJoonsoo Kim 12795813b8fSJoonsoo Kim TP_PROTO(struct page *page, int v), 12895813b8fSJoonsoo Kim 12995813b8fSJoonsoo Kim TP_ARGS(page, v) 13095813b8fSJoonsoo Kim ); 13195813b8fSJoonsoo Kim 13295813b8fSJoonsoo Kim #endif /* _TRACE_PAGE_COUNT_H */ 13395813b8fSJoonsoo Kim 13495813b8fSJoonsoo Kim /* This part must be outside protection */ 13595813b8fSJoonsoo Kim #include <trace/define_trace.h> 136