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