/* SPDX-License-Identifier: GPL-2.0 */
#undef TRACE_SYSTEM
#define TRACE_SYSTEM vmscan

#define TRACE_INCLUDE_PATH trace/hooks

#if !defined(_TRACE_HOOK_VMSCAN_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_HOOK_VMSCAN_H

#include <trace/hooks/vendor_hooks.h>

DECLARE_RESTRICTED_HOOK(android_rvh_set_balance_anon_file_reclaim,
			TP_PROTO(bool *balance_anon_file_reclaim),
			TP_ARGS(balance_anon_file_reclaim), 1);
DECLARE_HOOK(android_vh_kswapd_per_node,
	TP_PROTO(int nid, bool *skip, bool run),
	TP_ARGS(nid, skip, run));
DECLARE_HOOK(android_vh_page_referenced_check_bypass,
	TP_PROTO(struct page *page, unsigned long nr_to_scan, int lru, bool *bypass),
	TP_ARGS(page, nr_to_scan, lru, bypass));
DECLARE_HOOK(android_vh_page_trylock_get_result,
	TP_PROTO(struct page *page, bool *trylock_fail),
	TP_ARGS(page, trylock_fail));
DECLARE_HOOK(android_vh_handle_failed_page_trylock,
	TP_PROTO(struct list_head *page_list),
	TP_ARGS(page_list));
DECLARE_HOOK(android_vh_page_trylock_set,
	TP_PROTO(struct page *page),
	TP_ARGS(page));
DECLARE_HOOK(android_vh_page_trylock_clear,
	TP_PROTO(struct page *page),
	TP_ARGS(page));
DECLARE_HOOK(android_vh_shrink_node_memcgs,
	TP_PROTO(struct mem_cgroup *memcg, bool *skip),
	TP_ARGS(memcg, skip));
DECLARE_HOOK(android_vh_shrink_page_lock_owner_set,
	TP_PROTO(struct page *page),
	TP_ARGS(page));
DECLARE_HOOK(android_vh_shrink_page_lock_owner_clear,
	TP_PROTO(struct page *page),
	TP_ARGS(page));
DECLARE_HOOK(android_vh_tune_scan_type,
	TP_PROTO(char *scan_type),
	TP_ARGS(scan_type));
DECLARE_RESTRICTED_HOOK(android_rvh_kswapd_shrink_node,
			TP_PROTO(unsigned long *nr_reclaimed),
			TP_ARGS(nr_reclaimed), 1);
DECLARE_HOOK(android_vh_tune_swappiness,
	TP_PROTO(int *swappiness),
	TP_ARGS(swappiness));
DECLARE_HOOK(android_vh_shrink_slab_bypass,
	TP_PROTO(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg, int priority, bool *bypass),
	TP_ARGS(gfp_mask, nid, memcg, priority, bypass));
DECLARE_HOOK(android_vh_do_shrink_slab,
	TP_PROTO(struct shrinker *shrinker, struct shrink_control *shrinkctl, int priority),
	TP_ARGS(shrinker, shrinkctl, priority));
DECLARE_HOOK(android_vh_tune_memcg_scan_type,
	TP_PROTO(struct mem_cgroup *memcg, char *scan_type),
	TP_ARGS(memcg, scan_type));
DECLARE_HOOK(android_vh_tune_inactive_ratio,
	TP_PROTO(unsigned long *inactive_ratio, int file),
	TP_ARGS(inactive_ratio, file))
DECLARE_HOOK(android_vh_check_page_look_around_ref,
	TP_PROTO(struct page *page, int *skip),
	TP_ARGS(page, skip));
DECLARE_HOOK(android_vh_vmscan_kswapd_done,
	TP_PROTO(int node_id, unsigned int highest_zoneidx, unsigned int alloc_order,
	        unsigned int reclaim_order),
	TP_ARGS(node_id, highest_zoneidx, alloc_order, reclaim_order));
DECLARE_HOOK(android_vh_mglru_new_gen,
	TP_PROTO(void *unused),
	TP_ARGS(unused));
DECLARE_HOOK(android_vh_shrink_page_list,
	TP_PROTO(struct page *page, bool dirty, bool writeback,
		bool *activate, bool *keep),
	TP_ARGS(page, dirty, writeback, activate, keep));
DECLARE_HOOK(android_vh_inode_lru_isolate,
	TP_PROTO(struct inode *inode, bool *skip),
	TP_ARGS(inode, skip));
DECLARE_HOOK(android_vh_invalidate_mapping_pagevec,
	TP_PROTO(struct address_space *mapping, bool *skip),
	TP_ARGS(mapping, skip));
DECLARE_HOOK(android_vh_keep_reclaimed_page,
	TP_PROTO(struct page *page, int refcount, bool *keep),
	TP_ARGS(page, refcount, keep));
DECLARE_HOOK(android_vh_clear_reclaimed_page,
	TP_PROTO(struct page *page, bool reclaimed),
	TP_ARGS(page, reclaimed));
DECLARE_HOOK(android_vh_evict_pages_bypass,
	TP_PROTO(struct page *page, bool *bypass),
	TP_ARGS(page, bypass));
DECLARE_HOOK(android_vh_mglru_should_abort_scan,
	TP_PROTO(unsigned long *nr_reclaimed),
	TP_ARGS(nr_reclaimed));
#endif /* _TRACE_HOOK_VMSCAN_H */
/* This part must be outside protection */
#include <trace/define_trace.h>
