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 28TRACE_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 64TRACE_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