0001
0002 #undef TRACE_SYSTEM
0003 #define TRACE_SYSTEM pagemap
0004
0005 #if !defined(_TRACE_PAGEMAP_H) || defined(TRACE_HEADER_MULTI_READ)
0006 #define _TRACE_PAGEMAP_H
0007
0008 #include <linux/tracepoint.h>
0009 #include <linux/mm.h>
0010
0011 #define PAGEMAP_MAPPED 0x0001u
0012 #define PAGEMAP_ANONYMOUS 0x0002u
0013 #define PAGEMAP_FILE 0x0004u
0014 #define PAGEMAP_SWAPCACHE 0x0008u
0015 #define PAGEMAP_SWAPBACKED 0x0010u
0016 #define PAGEMAP_MAPPEDDISK 0x0020u
0017 #define PAGEMAP_BUFFERS 0x0040u
0018
0019 #define trace_pagemap_flags(folio) ( \
0020 (folio_test_anon(folio) ? PAGEMAP_ANONYMOUS : PAGEMAP_FILE) | \
0021 (folio_mapped(folio) ? PAGEMAP_MAPPED : 0) | \
0022 (folio_test_swapcache(folio) ? PAGEMAP_SWAPCACHE : 0) | \
0023 (folio_test_swapbacked(folio) ? PAGEMAP_SWAPBACKED : 0) | \
0024 (folio_test_mappedtodisk(folio) ? PAGEMAP_MAPPEDDISK : 0) | \
0025 (folio_test_private(folio) ? PAGEMAP_BUFFERS : 0) \
0026 )
0027
0028 TRACE_EVENT(mm_lru_insertion,
0029
0030 TP_PROTO(struct folio *folio),
0031
0032 TP_ARGS(folio),
0033
0034 TP_STRUCT__entry(
0035 __field(struct folio *, folio )
0036 __field(unsigned long, pfn )
0037 __field(enum lru_list, lru )
0038 __field(unsigned long, flags )
0039 ),
0040
0041 TP_fast_assign(
0042 __entry->folio = folio;
0043 __entry->pfn = folio_pfn(folio);
0044 __entry->lru = folio_lru_list(folio);
0045 __entry->flags = trace_pagemap_flags(folio);
0046 ),
0047
0048
0049 TP_printk("folio=%p pfn=0x%lx lru=%d flags=%s%s%s%s%s%s",
0050 __entry->folio,
0051 __entry->pfn,
0052 __entry->lru,
0053 __entry->flags & PAGEMAP_MAPPED ? "M" : " ",
0054 __entry->flags & PAGEMAP_ANONYMOUS ? "a" : "f",
0055 __entry->flags & PAGEMAP_SWAPCACHE ? "s" : " ",
0056 __entry->flags & PAGEMAP_SWAPBACKED ? "b" : " ",
0057 __entry->flags & PAGEMAP_MAPPEDDISK ? "d" : " ",
0058 __entry->flags & PAGEMAP_BUFFERS ? "B" : " ")
0059 );
0060
0061 TRACE_EVENT(mm_lru_activate,
0062
0063 TP_PROTO(struct folio *folio),
0064
0065 TP_ARGS(folio),
0066
0067 TP_STRUCT__entry(
0068 __field(struct folio *, folio )
0069 __field(unsigned long, pfn )
0070 ),
0071
0072 TP_fast_assign(
0073 __entry->folio = folio;
0074 __entry->pfn = folio_pfn(folio);
0075 ),
0076
0077 TP_printk("folio=%p pfn=0x%lx", __entry->folio, __entry->pfn)
0078 );
0079
0080 #endif
0081
0082
0083 #include <trace/define_trace.h>