162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#undef TRACE_SYSTEM
362306a36Sopenharmony_ci#define TRACE_SYSTEM vmscan
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#if !defined(_TRACE_VMSCAN_H) || defined(TRACE_HEADER_MULTI_READ)
662306a36Sopenharmony_ci#define _TRACE_VMSCAN_H
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#include <linux/types.h>
962306a36Sopenharmony_ci#include <linux/tracepoint.h>
1062306a36Sopenharmony_ci#include <linux/mm.h>
1162306a36Sopenharmony_ci#include <linux/memcontrol.h>
1262306a36Sopenharmony_ci#include <trace/events/mmflags.h>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#define RECLAIM_WB_ANON		0x0001u
1562306a36Sopenharmony_ci#define RECLAIM_WB_FILE		0x0002u
1662306a36Sopenharmony_ci#define RECLAIM_WB_MIXED	0x0010u
1762306a36Sopenharmony_ci#define RECLAIM_WB_SYNC		0x0004u /* Unused, all reclaim async */
1862306a36Sopenharmony_ci#define RECLAIM_WB_ASYNC	0x0008u
1962306a36Sopenharmony_ci#define RECLAIM_WB_LRU		(RECLAIM_WB_ANON|RECLAIM_WB_FILE)
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#define show_reclaim_flags(flags)				\
2262306a36Sopenharmony_ci	(flags) ? __print_flags(flags, "|",			\
2362306a36Sopenharmony_ci		{RECLAIM_WB_ANON,	"RECLAIM_WB_ANON"},	\
2462306a36Sopenharmony_ci		{RECLAIM_WB_FILE,	"RECLAIM_WB_FILE"},	\
2562306a36Sopenharmony_ci		{RECLAIM_WB_MIXED,	"RECLAIM_WB_MIXED"},	\
2662306a36Sopenharmony_ci		{RECLAIM_WB_SYNC,	"RECLAIM_WB_SYNC"},	\
2762306a36Sopenharmony_ci		{RECLAIM_WB_ASYNC,	"RECLAIM_WB_ASYNC"}	\
2862306a36Sopenharmony_ci		) : "RECLAIM_WB_NONE"
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci#define _VMSCAN_THROTTLE_WRITEBACK	(1 << VMSCAN_THROTTLE_WRITEBACK)
3162306a36Sopenharmony_ci#define _VMSCAN_THROTTLE_ISOLATED	(1 << VMSCAN_THROTTLE_ISOLATED)
3262306a36Sopenharmony_ci#define _VMSCAN_THROTTLE_NOPROGRESS	(1 << VMSCAN_THROTTLE_NOPROGRESS)
3362306a36Sopenharmony_ci#define _VMSCAN_THROTTLE_CONGESTED	(1 << VMSCAN_THROTTLE_CONGESTED)
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci#define show_throttle_flags(flags)						\
3662306a36Sopenharmony_ci	(flags) ? __print_flags(flags, "|",					\
3762306a36Sopenharmony_ci		{_VMSCAN_THROTTLE_WRITEBACK,	"VMSCAN_THROTTLE_WRITEBACK"},	\
3862306a36Sopenharmony_ci		{_VMSCAN_THROTTLE_ISOLATED,	"VMSCAN_THROTTLE_ISOLATED"},	\
3962306a36Sopenharmony_ci		{_VMSCAN_THROTTLE_NOPROGRESS,	"VMSCAN_THROTTLE_NOPROGRESS"},	\
4062306a36Sopenharmony_ci		{_VMSCAN_THROTTLE_CONGESTED,	"VMSCAN_THROTTLE_CONGESTED"}	\
4162306a36Sopenharmony_ci		) : "VMSCAN_THROTTLE_NONE"
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci#define trace_reclaim_flags(file) ( \
4562306a36Sopenharmony_ci	(file ? RECLAIM_WB_FILE : RECLAIM_WB_ANON) | \
4662306a36Sopenharmony_ci	(RECLAIM_WB_ASYNC) \
4762306a36Sopenharmony_ci	)
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_kswapd_sleep,
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci	TP_PROTO(int nid),
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci	TP_ARGS(nid),
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci	TP_STRUCT__entry(
5662306a36Sopenharmony_ci		__field(	int,	nid	)
5762306a36Sopenharmony_ci	),
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci	TP_fast_assign(
6062306a36Sopenharmony_ci		__entry->nid	= nid;
6162306a36Sopenharmony_ci	),
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci	TP_printk("nid=%d", __entry->nid)
6462306a36Sopenharmony_ci);
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_kswapd_wake,
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci	TP_PROTO(int nid, int zid, int order),
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci	TP_ARGS(nid, zid, order),
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci	TP_STRUCT__entry(
7362306a36Sopenharmony_ci		__field(	int,	nid	)
7462306a36Sopenharmony_ci		__field(	int,	zid	)
7562306a36Sopenharmony_ci		__field(	int,	order	)
7662306a36Sopenharmony_ci	),
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ci	TP_fast_assign(
7962306a36Sopenharmony_ci		__entry->nid	= nid;
8062306a36Sopenharmony_ci		__entry->zid    = zid;
8162306a36Sopenharmony_ci		__entry->order	= order;
8262306a36Sopenharmony_ci	),
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ci	TP_printk("nid=%d order=%d",
8562306a36Sopenharmony_ci		__entry->nid,
8662306a36Sopenharmony_ci		__entry->order)
8762306a36Sopenharmony_ci);
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_wakeup_kswapd,
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci	TP_PROTO(int nid, int zid, int order, gfp_t gfp_flags),
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ci	TP_ARGS(nid, zid, order, gfp_flags),
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci	TP_STRUCT__entry(
9662306a36Sopenharmony_ci		__field(	int,	nid		)
9762306a36Sopenharmony_ci		__field(	int,	zid		)
9862306a36Sopenharmony_ci		__field(	int,	order		)
9962306a36Sopenharmony_ci		__field(	unsigned long,	gfp_flags	)
10062306a36Sopenharmony_ci	),
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci	TP_fast_assign(
10362306a36Sopenharmony_ci		__entry->nid		= nid;
10462306a36Sopenharmony_ci		__entry->zid		= zid;
10562306a36Sopenharmony_ci		__entry->order		= order;
10662306a36Sopenharmony_ci		__entry->gfp_flags	= (__force unsigned long)gfp_flags;
10762306a36Sopenharmony_ci	),
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci	TP_printk("nid=%d order=%d gfp_flags=%s",
11062306a36Sopenharmony_ci		__entry->nid,
11162306a36Sopenharmony_ci		__entry->order,
11262306a36Sopenharmony_ci		show_gfp_flags(__entry->gfp_flags))
11362306a36Sopenharmony_ci);
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_ciDECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_begin_template,
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci	TP_PROTO(int order, gfp_t gfp_flags),
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ci	TP_ARGS(order, gfp_flags),
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci	TP_STRUCT__entry(
12262306a36Sopenharmony_ci		__field(	int,	order		)
12362306a36Sopenharmony_ci		__field(	unsigned long,	gfp_flags	)
12462306a36Sopenharmony_ci	),
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci	TP_fast_assign(
12762306a36Sopenharmony_ci		__entry->order		= order;
12862306a36Sopenharmony_ci		__entry->gfp_flags	= (__force unsigned long)gfp_flags;
12962306a36Sopenharmony_ci	),
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ci	TP_printk("order=%d gfp_flags=%s",
13262306a36Sopenharmony_ci		__entry->order,
13362306a36Sopenharmony_ci		show_gfp_flags(__entry->gfp_flags))
13462306a36Sopenharmony_ci);
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_ciDEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_direct_reclaim_begin,
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ci	TP_PROTO(int order, gfp_t gfp_flags),
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_ci	TP_ARGS(order, gfp_flags)
14162306a36Sopenharmony_ci);
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ci#ifdef CONFIG_MEMCG
14462306a36Sopenharmony_ciDEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_reclaim_begin,
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ci	TP_PROTO(int order, gfp_t gfp_flags),
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ci	TP_ARGS(order, gfp_flags)
14962306a36Sopenharmony_ci);
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ciDEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_softlimit_reclaim_begin,
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_ci	TP_PROTO(int order, gfp_t gfp_flags),
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_ci	TP_ARGS(order, gfp_flags)
15662306a36Sopenharmony_ci);
15762306a36Sopenharmony_ci#endif /* CONFIG_MEMCG */
15862306a36Sopenharmony_ci
15962306a36Sopenharmony_ciDECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_end_template,
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ci	TP_PROTO(unsigned long nr_reclaimed),
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ci	TP_ARGS(nr_reclaimed),
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_ci	TP_STRUCT__entry(
16662306a36Sopenharmony_ci		__field(	unsigned long,	nr_reclaimed	)
16762306a36Sopenharmony_ci	),
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_ci	TP_fast_assign(
17062306a36Sopenharmony_ci		__entry->nr_reclaimed	= nr_reclaimed;
17162306a36Sopenharmony_ci	),
17262306a36Sopenharmony_ci
17362306a36Sopenharmony_ci	TP_printk("nr_reclaimed=%lu", __entry->nr_reclaimed)
17462306a36Sopenharmony_ci);
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ciDEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_direct_reclaim_end,
17762306a36Sopenharmony_ci
17862306a36Sopenharmony_ci	TP_PROTO(unsigned long nr_reclaimed),
17962306a36Sopenharmony_ci
18062306a36Sopenharmony_ci	TP_ARGS(nr_reclaimed)
18162306a36Sopenharmony_ci);
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_ci#ifdef CONFIG_MEMCG
18462306a36Sopenharmony_ciDEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_reclaim_end,
18562306a36Sopenharmony_ci
18662306a36Sopenharmony_ci	TP_PROTO(unsigned long nr_reclaimed),
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ci	TP_ARGS(nr_reclaimed)
18962306a36Sopenharmony_ci);
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ciDEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_softlimit_reclaim_end,
19262306a36Sopenharmony_ci
19362306a36Sopenharmony_ci	TP_PROTO(unsigned long nr_reclaimed),
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_ci	TP_ARGS(nr_reclaimed)
19662306a36Sopenharmony_ci);
19762306a36Sopenharmony_ci#endif /* CONFIG_MEMCG */
19862306a36Sopenharmony_ci
19962306a36Sopenharmony_ciTRACE_EVENT(mm_shrink_slab_start,
20062306a36Sopenharmony_ci	TP_PROTO(struct shrinker *shr, struct shrink_control *sc,
20162306a36Sopenharmony_ci		long nr_objects_to_shrink, unsigned long cache_items,
20262306a36Sopenharmony_ci		unsigned long long delta, unsigned long total_scan,
20362306a36Sopenharmony_ci		int priority),
20462306a36Sopenharmony_ci
20562306a36Sopenharmony_ci	TP_ARGS(shr, sc, nr_objects_to_shrink, cache_items, delta, total_scan,
20662306a36Sopenharmony_ci		priority),
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ci	TP_STRUCT__entry(
20962306a36Sopenharmony_ci		__field(struct shrinker *, shr)
21062306a36Sopenharmony_ci		__field(void *, shrink)
21162306a36Sopenharmony_ci		__field(int, nid)
21262306a36Sopenharmony_ci		__field(long, nr_objects_to_shrink)
21362306a36Sopenharmony_ci		__field(unsigned long, gfp_flags)
21462306a36Sopenharmony_ci		__field(unsigned long, cache_items)
21562306a36Sopenharmony_ci		__field(unsigned long long, delta)
21662306a36Sopenharmony_ci		__field(unsigned long, total_scan)
21762306a36Sopenharmony_ci		__field(int, priority)
21862306a36Sopenharmony_ci	),
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_ci	TP_fast_assign(
22162306a36Sopenharmony_ci		__entry->shr = shr;
22262306a36Sopenharmony_ci		__entry->shrink = shr->scan_objects;
22362306a36Sopenharmony_ci		__entry->nid = sc->nid;
22462306a36Sopenharmony_ci		__entry->nr_objects_to_shrink = nr_objects_to_shrink;
22562306a36Sopenharmony_ci		__entry->gfp_flags = (__force unsigned long)sc->gfp_mask;
22662306a36Sopenharmony_ci		__entry->cache_items = cache_items;
22762306a36Sopenharmony_ci		__entry->delta = delta;
22862306a36Sopenharmony_ci		__entry->total_scan = total_scan;
22962306a36Sopenharmony_ci		__entry->priority = priority;
23062306a36Sopenharmony_ci	),
23162306a36Sopenharmony_ci
23262306a36Sopenharmony_ci	TP_printk("%pS %p: nid: %d objects to shrink %ld gfp_flags %s cache items %ld delta %lld total_scan %ld priority %d",
23362306a36Sopenharmony_ci		__entry->shrink,
23462306a36Sopenharmony_ci		__entry->shr,
23562306a36Sopenharmony_ci		__entry->nid,
23662306a36Sopenharmony_ci		__entry->nr_objects_to_shrink,
23762306a36Sopenharmony_ci		show_gfp_flags(__entry->gfp_flags),
23862306a36Sopenharmony_ci		__entry->cache_items,
23962306a36Sopenharmony_ci		__entry->delta,
24062306a36Sopenharmony_ci		__entry->total_scan,
24162306a36Sopenharmony_ci		__entry->priority)
24262306a36Sopenharmony_ci);
24362306a36Sopenharmony_ci
24462306a36Sopenharmony_ciTRACE_EVENT(mm_shrink_slab_end,
24562306a36Sopenharmony_ci	TP_PROTO(struct shrinker *shr, int nid, int shrinker_retval,
24662306a36Sopenharmony_ci		long unused_scan_cnt, long new_scan_cnt, long total_scan),
24762306a36Sopenharmony_ci
24862306a36Sopenharmony_ci	TP_ARGS(shr, nid, shrinker_retval, unused_scan_cnt, new_scan_cnt,
24962306a36Sopenharmony_ci		total_scan),
25062306a36Sopenharmony_ci
25162306a36Sopenharmony_ci	TP_STRUCT__entry(
25262306a36Sopenharmony_ci		__field(struct shrinker *, shr)
25362306a36Sopenharmony_ci		__field(int, nid)
25462306a36Sopenharmony_ci		__field(void *, shrink)
25562306a36Sopenharmony_ci		__field(long, unused_scan)
25662306a36Sopenharmony_ci		__field(long, new_scan)
25762306a36Sopenharmony_ci		__field(int, retval)
25862306a36Sopenharmony_ci		__field(long, total_scan)
25962306a36Sopenharmony_ci	),
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_ci	TP_fast_assign(
26262306a36Sopenharmony_ci		__entry->shr = shr;
26362306a36Sopenharmony_ci		__entry->nid = nid;
26462306a36Sopenharmony_ci		__entry->shrink = shr->scan_objects;
26562306a36Sopenharmony_ci		__entry->unused_scan = unused_scan_cnt;
26662306a36Sopenharmony_ci		__entry->new_scan = new_scan_cnt;
26762306a36Sopenharmony_ci		__entry->retval = shrinker_retval;
26862306a36Sopenharmony_ci		__entry->total_scan = total_scan;
26962306a36Sopenharmony_ci	),
27062306a36Sopenharmony_ci
27162306a36Sopenharmony_ci	TP_printk("%pS %p: nid: %d unused scan count %ld new scan count %ld total_scan %ld last shrinker return val %d",
27262306a36Sopenharmony_ci		__entry->shrink,
27362306a36Sopenharmony_ci		__entry->shr,
27462306a36Sopenharmony_ci		__entry->nid,
27562306a36Sopenharmony_ci		__entry->unused_scan,
27662306a36Sopenharmony_ci		__entry->new_scan,
27762306a36Sopenharmony_ci		__entry->total_scan,
27862306a36Sopenharmony_ci		__entry->retval)
27962306a36Sopenharmony_ci);
28062306a36Sopenharmony_ci
28162306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_lru_isolate,
28262306a36Sopenharmony_ci	TP_PROTO(int highest_zoneidx,
28362306a36Sopenharmony_ci		int order,
28462306a36Sopenharmony_ci		unsigned long nr_requested,
28562306a36Sopenharmony_ci		unsigned long nr_scanned,
28662306a36Sopenharmony_ci		unsigned long nr_skipped,
28762306a36Sopenharmony_ci		unsigned long nr_taken,
28862306a36Sopenharmony_ci		isolate_mode_t isolate_mode,
28962306a36Sopenharmony_ci		int lru),
29062306a36Sopenharmony_ci
29162306a36Sopenharmony_ci	TP_ARGS(highest_zoneidx, order, nr_requested, nr_scanned, nr_skipped, nr_taken, isolate_mode, lru),
29262306a36Sopenharmony_ci
29362306a36Sopenharmony_ci	TP_STRUCT__entry(
29462306a36Sopenharmony_ci		__field(int, highest_zoneidx)
29562306a36Sopenharmony_ci		__field(int, order)
29662306a36Sopenharmony_ci		__field(unsigned long, nr_requested)
29762306a36Sopenharmony_ci		__field(unsigned long, nr_scanned)
29862306a36Sopenharmony_ci		__field(unsigned long, nr_skipped)
29962306a36Sopenharmony_ci		__field(unsigned long, nr_taken)
30062306a36Sopenharmony_ci		__field(unsigned int, isolate_mode)
30162306a36Sopenharmony_ci		__field(int, lru)
30262306a36Sopenharmony_ci	),
30362306a36Sopenharmony_ci
30462306a36Sopenharmony_ci	TP_fast_assign(
30562306a36Sopenharmony_ci		__entry->highest_zoneidx = highest_zoneidx;
30662306a36Sopenharmony_ci		__entry->order = order;
30762306a36Sopenharmony_ci		__entry->nr_requested = nr_requested;
30862306a36Sopenharmony_ci		__entry->nr_scanned = nr_scanned;
30962306a36Sopenharmony_ci		__entry->nr_skipped = nr_skipped;
31062306a36Sopenharmony_ci		__entry->nr_taken = nr_taken;
31162306a36Sopenharmony_ci		__entry->isolate_mode = (__force unsigned int)isolate_mode;
31262306a36Sopenharmony_ci		__entry->lru = lru;
31362306a36Sopenharmony_ci	),
31462306a36Sopenharmony_ci
31562306a36Sopenharmony_ci	/*
31662306a36Sopenharmony_ci	 * classzone is previous name of the highest_zoneidx.
31762306a36Sopenharmony_ci	 * Reason not to change it is the ABI requirement of the tracepoint.
31862306a36Sopenharmony_ci	 */
31962306a36Sopenharmony_ci	TP_printk("isolate_mode=%d classzone=%d order=%d nr_requested=%lu nr_scanned=%lu nr_skipped=%lu nr_taken=%lu lru=%s",
32062306a36Sopenharmony_ci		__entry->isolate_mode,
32162306a36Sopenharmony_ci		__entry->highest_zoneidx,
32262306a36Sopenharmony_ci		__entry->order,
32362306a36Sopenharmony_ci		__entry->nr_requested,
32462306a36Sopenharmony_ci		__entry->nr_scanned,
32562306a36Sopenharmony_ci		__entry->nr_skipped,
32662306a36Sopenharmony_ci		__entry->nr_taken,
32762306a36Sopenharmony_ci		__print_symbolic(__entry->lru, LRU_NAMES))
32862306a36Sopenharmony_ci);
32962306a36Sopenharmony_ci
33062306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_write_folio,
33162306a36Sopenharmony_ci
33262306a36Sopenharmony_ci	TP_PROTO(struct folio *folio),
33362306a36Sopenharmony_ci
33462306a36Sopenharmony_ci	TP_ARGS(folio),
33562306a36Sopenharmony_ci
33662306a36Sopenharmony_ci	TP_STRUCT__entry(
33762306a36Sopenharmony_ci		__field(unsigned long, pfn)
33862306a36Sopenharmony_ci		__field(int, reclaim_flags)
33962306a36Sopenharmony_ci	),
34062306a36Sopenharmony_ci
34162306a36Sopenharmony_ci	TP_fast_assign(
34262306a36Sopenharmony_ci		__entry->pfn = folio_pfn(folio);
34362306a36Sopenharmony_ci		__entry->reclaim_flags = trace_reclaim_flags(
34462306a36Sopenharmony_ci						folio_is_file_lru(folio));
34562306a36Sopenharmony_ci	),
34662306a36Sopenharmony_ci
34762306a36Sopenharmony_ci	TP_printk("page=%p pfn=0x%lx flags=%s",
34862306a36Sopenharmony_ci		pfn_to_page(__entry->pfn),
34962306a36Sopenharmony_ci		__entry->pfn,
35062306a36Sopenharmony_ci		show_reclaim_flags(__entry->reclaim_flags))
35162306a36Sopenharmony_ci);
35262306a36Sopenharmony_ci
35362306a36Sopenharmony_ci#ifdef CONFIG_HYPERHOLD_ZSWAPD
35462306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_lru_zswapd_shrink_active,
35562306a36Sopenharmony_ci
35662306a36Sopenharmony_ci	TP_PROTO(int nid, unsigned long nr_taken,
35762306a36Sopenharmony_ci		unsigned long nr_deactivated, int priority),
35862306a36Sopenharmony_ci
35962306a36Sopenharmony_ci	TP_ARGS(nid, nr_taken, nr_deactivated, priority),
36062306a36Sopenharmony_ci
36162306a36Sopenharmony_ci	TP_STRUCT__entry(
36262306a36Sopenharmony_ci		__field(int, nid)
36362306a36Sopenharmony_ci		__field(unsigned long, nr_taken)
36462306a36Sopenharmony_ci		__field(unsigned long, nr_deactivated)
36562306a36Sopenharmony_ci		__field(int, priority)
36662306a36Sopenharmony_ci	),
36762306a36Sopenharmony_ci
36862306a36Sopenharmony_ci	TP_fast_assign(
36962306a36Sopenharmony_ci		__entry->nid = nid;
37062306a36Sopenharmony_ci		__entry->nr_taken = nr_taken;
37162306a36Sopenharmony_ci		__entry->nr_deactivated = nr_deactivated;
37262306a36Sopenharmony_ci		__entry->priority = priority;
37362306a36Sopenharmony_ci	),
37462306a36Sopenharmony_ci
37562306a36Sopenharmony_ci	TP_printk("nid=%d nr_taken=%ld nr_deactivated=%ld priority=%d",
37662306a36Sopenharmony_ci		__entry->nid,
37762306a36Sopenharmony_ci		__entry->nr_taken,
37862306a36Sopenharmony_ci		__entry->nr_deactivated,
37962306a36Sopenharmony_ci		__entry->priority)
38062306a36Sopenharmony_ci);
38162306a36Sopenharmony_ci#endif
38262306a36Sopenharmony_ci
38362306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_lru_shrink_inactive,
38462306a36Sopenharmony_ci
38562306a36Sopenharmony_ci	TP_PROTO(int nid,
38662306a36Sopenharmony_ci		unsigned long nr_scanned, unsigned long nr_reclaimed,
38762306a36Sopenharmony_ci		struct reclaim_stat *stat, int priority, int file),
38862306a36Sopenharmony_ci
38962306a36Sopenharmony_ci	TP_ARGS(nid, nr_scanned, nr_reclaimed, stat, priority, file),
39062306a36Sopenharmony_ci
39162306a36Sopenharmony_ci	TP_STRUCT__entry(
39262306a36Sopenharmony_ci		__field(int, nid)
39362306a36Sopenharmony_ci		__field(unsigned long, nr_scanned)
39462306a36Sopenharmony_ci		__field(unsigned long, nr_reclaimed)
39562306a36Sopenharmony_ci		__field(unsigned long, nr_dirty)
39662306a36Sopenharmony_ci		__field(unsigned long, nr_writeback)
39762306a36Sopenharmony_ci		__field(unsigned long, nr_congested)
39862306a36Sopenharmony_ci		__field(unsigned long, nr_immediate)
39962306a36Sopenharmony_ci		__field(unsigned int, nr_activate0)
40062306a36Sopenharmony_ci		__field(unsigned int, nr_activate1)
40162306a36Sopenharmony_ci		__field(unsigned long, nr_ref_keep)
40262306a36Sopenharmony_ci		__field(unsigned long, nr_unmap_fail)
40362306a36Sopenharmony_ci		__field(int, priority)
40462306a36Sopenharmony_ci		__field(int, reclaim_flags)
40562306a36Sopenharmony_ci	),
40662306a36Sopenharmony_ci
40762306a36Sopenharmony_ci	TP_fast_assign(
40862306a36Sopenharmony_ci		__entry->nid = nid;
40962306a36Sopenharmony_ci		__entry->nr_scanned = nr_scanned;
41062306a36Sopenharmony_ci		__entry->nr_reclaimed = nr_reclaimed;
41162306a36Sopenharmony_ci		__entry->nr_dirty = stat->nr_dirty;
41262306a36Sopenharmony_ci		__entry->nr_writeback = stat->nr_writeback;
41362306a36Sopenharmony_ci		__entry->nr_congested = stat->nr_congested;
41462306a36Sopenharmony_ci		__entry->nr_immediate = stat->nr_immediate;
41562306a36Sopenharmony_ci		__entry->nr_activate0 = stat->nr_activate[0];
41662306a36Sopenharmony_ci		__entry->nr_activate1 = stat->nr_activate[1];
41762306a36Sopenharmony_ci		__entry->nr_ref_keep = stat->nr_ref_keep;
41862306a36Sopenharmony_ci		__entry->nr_unmap_fail = stat->nr_unmap_fail;
41962306a36Sopenharmony_ci		__entry->priority = priority;
42062306a36Sopenharmony_ci		__entry->reclaim_flags = trace_reclaim_flags(file);
42162306a36Sopenharmony_ci	),
42262306a36Sopenharmony_ci
42362306a36Sopenharmony_ci	TP_printk("nid=%d nr_scanned=%ld nr_reclaimed=%ld nr_dirty=%ld nr_writeback=%ld nr_congested=%ld nr_immediate=%ld nr_activate_anon=%d nr_activate_file=%d nr_ref_keep=%ld nr_unmap_fail=%ld priority=%d flags=%s",
42462306a36Sopenharmony_ci		__entry->nid,
42562306a36Sopenharmony_ci		__entry->nr_scanned, __entry->nr_reclaimed,
42662306a36Sopenharmony_ci		__entry->nr_dirty, __entry->nr_writeback,
42762306a36Sopenharmony_ci		__entry->nr_congested, __entry->nr_immediate,
42862306a36Sopenharmony_ci		__entry->nr_activate0, __entry->nr_activate1,
42962306a36Sopenharmony_ci		__entry->nr_ref_keep, __entry->nr_unmap_fail,
43062306a36Sopenharmony_ci		__entry->priority,
43162306a36Sopenharmony_ci		show_reclaim_flags(__entry->reclaim_flags))
43262306a36Sopenharmony_ci);
43362306a36Sopenharmony_ci
43462306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_lru_shrink_active,
43562306a36Sopenharmony_ci
43662306a36Sopenharmony_ci	TP_PROTO(int nid, unsigned long nr_taken,
43762306a36Sopenharmony_ci		unsigned long nr_active, unsigned long nr_deactivated,
43862306a36Sopenharmony_ci		unsigned long nr_referenced, int priority, int file),
43962306a36Sopenharmony_ci
44062306a36Sopenharmony_ci	TP_ARGS(nid, nr_taken, nr_active, nr_deactivated, nr_referenced, priority, file),
44162306a36Sopenharmony_ci
44262306a36Sopenharmony_ci	TP_STRUCT__entry(
44362306a36Sopenharmony_ci		__field(int, nid)
44462306a36Sopenharmony_ci		__field(unsigned long, nr_taken)
44562306a36Sopenharmony_ci		__field(unsigned long, nr_active)
44662306a36Sopenharmony_ci		__field(unsigned long, nr_deactivated)
44762306a36Sopenharmony_ci		__field(unsigned long, nr_referenced)
44862306a36Sopenharmony_ci		__field(int, priority)
44962306a36Sopenharmony_ci		__field(int, reclaim_flags)
45062306a36Sopenharmony_ci	),
45162306a36Sopenharmony_ci
45262306a36Sopenharmony_ci	TP_fast_assign(
45362306a36Sopenharmony_ci		__entry->nid = nid;
45462306a36Sopenharmony_ci		__entry->nr_taken = nr_taken;
45562306a36Sopenharmony_ci		__entry->nr_active = nr_active;
45662306a36Sopenharmony_ci		__entry->nr_deactivated = nr_deactivated;
45762306a36Sopenharmony_ci		__entry->nr_referenced = nr_referenced;
45862306a36Sopenharmony_ci		__entry->priority = priority;
45962306a36Sopenharmony_ci		__entry->reclaim_flags = trace_reclaim_flags(file);
46062306a36Sopenharmony_ci	),
46162306a36Sopenharmony_ci
46262306a36Sopenharmony_ci	TP_printk("nid=%d nr_taken=%ld nr_active=%ld nr_deactivated=%ld nr_referenced=%ld priority=%d flags=%s",
46362306a36Sopenharmony_ci		__entry->nid,
46462306a36Sopenharmony_ci		__entry->nr_taken,
46562306a36Sopenharmony_ci		__entry->nr_active, __entry->nr_deactivated, __entry->nr_referenced,
46662306a36Sopenharmony_ci		__entry->priority,
46762306a36Sopenharmony_ci		show_reclaim_flags(__entry->reclaim_flags))
46862306a36Sopenharmony_ci);
46962306a36Sopenharmony_ci
47062306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_node_reclaim_begin,
47162306a36Sopenharmony_ci
47262306a36Sopenharmony_ci	TP_PROTO(int nid, int order, gfp_t gfp_flags),
47362306a36Sopenharmony_ci
47462306a36Sopenharmony_ci	TP_ARGS(nid, order, gfp_flags),
47562306a36Sopenharmony_ci
47662306a36Sopenharmony_ci	TP_STRUCT__entry(
47762306a36Sopenharmony_ci		__field(int, nid)
47862306a36Sopenharmony_ci		__field(int, order)
47962306a36Sopenharmony_ci		__field(unsigned long, gfp_flags)
48062306a36Sopenharmony_ci	),
48162306a36Sopenharmony_ci
48262306a36Sopenharmony_ci	TP_fast_assign(
48362306a36Sopenharmony_ci		__entry->nid = nid;
48462306a36Sopenharmony_ci		__entry->order = order;
48562306a36Sopenharmony_ci		__entry->gfp_flags = (__force unsigned long)gfp_flags;
48662306a36Sopenharmony_ci	),
48762306a36Sopenharmony_ci
48862306a36Sopenharmony_ci	TP_printk("nid=%d order=%d gfp_flags=%s",
48962306a36Sopenharmony_ci		__entry->nid,
49062306a36Sopenharmony_ci		__entry->order,
49162306a36Sopenharmony_ci		show_gfp_flags(__entry->gfp_flags))
49262306a36Sopenharmony_ci);
49362306a36Sopenharmony_ci
49462306a36Sopenharmony_ciDEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_node_reclaim_end,
49562306a36Sopenharmony_ci
49662306a36Sopenharmony_ci	TP_PROTO(unsigned long nr_reclaimed),
49762306a36Sopenharmony_ci
49862306a36Sopenharmony_ci	TP_ARGS(nr_reclaimed)
49962306a36Sopenharmony_ci);
50062306a36Sopenharmony_ci
50162306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_throttled,
50262306a36Sopenharmony_ci
50362306a36Sopenharmony_ci	TP_PROTO(int nid, int usec_timeout, int usec_delayed, int reason),
50462306a36Sopenharmony_ci
50562306a36Sopenharmony_ci	TP_ARGS(nid, usec_timeout, usec_delayed, reason),
50662306a36Sopenharmony_ci
50762306a36Sopenharmony_ci	TP_STRUCT__entry(
50862306a36Sopenharmony_ci		__field(int, nid)
50962306a36Sopenharmony_ci		__field(int, usec_timeout)
51062306a36Sopenharmony_ci		__field(int, usec_delayed)
51162306a36Sopenharmony_ci		__field(int, reason)
51262306a36Sopenharmony_ci	),
51362306a36Sopenharmony_ci
51462306a36Sopenharmony_ci	TP_fast_assign(
51562306a36Sopenharmony_ci		__entry->nid = nid;
51662306a36Sopenharmony_ci		__entry->usec_timeout = usec_timeout;
51762306a36Sopenharmony_ci		__entry->usec_delayed = usec_delayed;
51862306a36Sopenharmony_ci		__entry->reason = 1U << reason;
51962306a36Sopenharmony_ci	),
52062306a36Sopenharmony_ci
52162306a36Sopenharmony_ci	TP_printk("nid=%d usec_timeout=%d usect_delayed=%d reason=%s",
52262306a36Sopenharmony_ci		__entry->nid,
52362306a36Sopenharmony_ci		__entry->usec_timeout,
52462306a36Sopenharmony_ci		__entry->usec_delayed,
52562306a36Sopenharmony_ci		show_throttle_flags(__entry->reason))
52662306a36Sopenharmony_ci);
52762306a36Sopenharmony_ci#endif /* _TRACE_VMSCAN_H */
52862306a36Sopenharmony_ci
52962306a36Sopenharmony_ci/* This part must be outside protection */
53062306a36Sopenharmony_ci#include <trace/define_trace.h>
531