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