xref: /linux/include/trace/events/pagemap.h (revision 132db93572821ec2fdf81e354cc40f558faf7e4f)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #undef TRACE_SYSTEM
3 #define TRACE_SYSTEM pagemap
4 
5 #if !defined(_TRACE_PAGEMAP_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define _TRACE_PAGEMAP_H
7 
8 #include <linux/tracepoint.h>
9 #include <linux/mm.h>
10 
11 #define	PAGEMAP_MAPPED		0x0001u
12 #define PAGEMAP_ANONYMOUS	0x0002u
13 #define PAGEMAP_FILE		0x0004u
14 #define PAGEMAP_SWAPCACHE	0x0008u
15 #define PAGEMAP_SWAPBACKED	0x0010u
16 #define PAGEMAP_MAPPEDDISK	0x0020u
17 #define PAGEMAP_BUFFERS		0x0040u
18 
19 #define trace_pagemap_flags(page) ( \
20 	(PageAnon(page)		? PAGEMAP_ANONYMOUS  : PAGEMAP_FILE) | \
21 	(page_mapped(page)	? PAGEMAP_MAPPED     : 0) | \
22 	(PageSwapCache(page)	? PAGEMAP_SWAPCACHE  : 0) | \
23 	(PageSwapBacked(page)	? PAGEMAP_SWAPBACKED : 0) | \
24 	(PageMappedToDisk(page)	? PAGEMAP_MAPPEDDISK : 0) | \
25 	(page_has_private(page) ? PAGEMAP_BUFFERS    : 0) \
26 	)
27 
28 TRACE_EVENT(mm_lru_insertion,
29 
30 	TP_PROTO(
31 		struct page *page,
32 		int lru
33 	),
34 
35 	TP_ARGS(page, lru),
36 
37 	TP_STRUCT__entry(
38 		__field(struct page *,	page	)
39 		__field(unsigned long,	pfn	)
40 		__field(int,		lru	)
41 		__field(unsigned long,	flags	)
42 	),
43 
44 	TP_fast_assign(
45 		__entry->page	= page;
46 		__entry->pfn	= page_to_pfn(page);
47 		__entry->lru	= lru;
48 		__entry->flags	= trace_pagemap_flags(page);
49 	),
50 
51 	/* Flag format is based on page-types.c formatting for pagemap */
52 	TP_printk("page=%p pfn=%lu lru=%d flags=%s%s%s%s%s%s",
53 			__entry->page,
54 			__entry->pfn,
55 			__entry->lru,
56 			__entry->flags & PAGEMAP_MAPPED		? "M" : " ",
57 			__entry->flags & PAGEMAP_ANONYMOUS	? "a" : "f",
58 			__entry->flags & PAGEMAP_SWAPCACHE	? "s" : " ",
59 			__entry->flags & PAGEMAP_SWAPBACKED	? "b" : " ",
60 			__entry->flags & PAGEMAP_MAPPEDDISK	? "d" : " ",
61 			__entry->flags & PAGEMAP_BUFFERS	? "B" : " ")
62 );
63 
64 TRACE_EVENT(mm_lru_activate,
65 
66 	TP_PROTO(struct page *page),
67 
68 	TP_ARGS(page),
69 
70 	TP_STRUCT__entry(
71 		__field(struct page *,	page	)
72 		__field(unsigned long,	pfn	)
73 	),
74 
75 	TP_fast_assign(
76 		__entry->page	= page;
77 		__entry->pfn	= page_to_pfn(page);
78 	),
79 
80 	/* Flag format is based on page-types.c formatting for pagemap */
81 	TP_printk("page=%p pfn=%lu", __entry->page, __entry->pfn)
82 
83 );
84 
85 #endif /* _TRACE_PAGEMAP_H */
86 
87 /* This part must be outside protection */
88 #include <trace/define_trace.h>
89