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(folio) ( \ 20 (folio_test_anon(folio) ? PAGEMAP_ANONYMOUS : PAGEMAP_FILE) | \ 21 (folio_mapped(folio) ? PAGEMAP_MAPPED : 0) | \ 22 (folio_test_swapcache(folio) ? PAGEMAP_SWAPCACHE : 0) | \ 23 (folio_test_swapbacked(folio) ? PAGEMAP_SWAPBACKED : 0) | \ 24 (folio_test_mappedtodisk(folio) ? PAGEMAP_MAPPEDDISK : 0) | \ 25 (folio_test_private(folio) ? PAGEMAP_BUFFERS : 0) \ 26 ) 27 28 TRACE_EVENT(mm_lru_insertion, 29 30 TP_PROTO(struct folio *folio), 31 32 TP_ARGS(folio), 33 34 TP_STRUCT__entry( 35 __field(struct folio *, folio ) 36 __field(unsigned long, pfn ) 37 __field(enum lru_list, lru ) 38 __field(unsigned long, flags ) 39 ), 40 41 TP_fast_assign( 42 __entry->folio = folio; 43 __entry->pfn = folio_pfn(folio); 44 __entry->lru = folio_lru_list(folio); 45 __entry->flags = trace_pagemap_flags(folio); 46 ), 47 48 /* Flag format is based on page-types.c formatting for pagemap */ 49 TP_printk("folio=%p pfn=0x%lx lru=%d flags=%s%s%s%s%s%s", 50 __entry->folio, 51 __entry->pfn, 52 __entry->lru, 53 __entry->flags & PAGEMAP_MAPPED ? "M" : " ", 54 __entry->flags & PAGEMAP_ANONYMOUS ? "a" : "f", 55 __entry->flags & PAGEMAP_SWAPCACHE ? "s" : " ", 56 __entry->flags & PAGEMAP_SWAPBACKED ? "b" : " ", 57 __entry->flags & PAGEMAP_MAPPEDDISK ? "d" : " ", 58 __entry->flags & PAGEMAP_BUFFERS ? "B" : " ") 59 ); 60 61 TRACE_EVENT(mm_lru_activate, 62 63 TP_PROTO(struct folio *folio), 64 65 TP_ARGS(folio), 66 67 TP_STRUCT__entry( 68 __field(struct folio *, folio ) 69 __field(unsigned long, pfn ) 70 ), 71 72 TP_fast_assign( 73 __entry->folio = folio; 74 __entry->pfn = folio_pfn(folio); 75 ), 76 77 TP_printk("folio=%p pfn=0x%lx", __entry->folio, __entry->pfn) 78 ); 79 80 #endif /* _TRACE_PAGEMAP_H */ 81 82 /* This part must be outside protection */ 83 #include <trace/define_trace.h> 84