/* SPDX-License-Identifier: GPL-2.0 */ /* * Include this file from a header that uses vendor hooks. * Typical usage: * In the header file: * * #include * * DECLARE_INDIRECT_HOOK(android_vh_del_folio_from_lrulist, * TP_PROTO(struct folio *folio, enum lru_list lru), * TP_ARGS(folio, lru)); * * static __always_inline * void lruvec_del_folio(struct lruvec *lruvec, struct folio *folio) * { * ... * _trace_android_vh_del_folio_from_lrulist(folio, lru); * } * * In the source file: * * DEFINE_INDIRECT_HOOK(android_vh_del_folio_from_lrulist, * TP_PROTO(struct folio *folio, enum lru_list lru), * TP_ARGS(folio, lru)); */ #ifndef _LINUX_ANDROID_HOOK_DEFS_H #define _LINUX_ANDROID_HOOK_DEFS_H /* Users of these macros need TP_PROTO() and TP_ARGS() */ #include #define DECLARE_INDIRECT_HOOK(name, proto, args) \ extern struct tracepoint __tracepoint_##name; \ void __trace_##name(proto); \ static __always_inline void _trace_##name(proto) \ { \ if (static_key_false(&__tracepoint_##name.key)) \ __trace_##name(args); \ } #define DEFINE_INDIRECT_HOOK(name, proto, args) \ void __trace_##name(proto) \ { \ trace_##name(args); \ } \ EXPORT_SYMBOL_GPL(__trace_##name); #endif /* _LINUX_ANDROID_HOOK_DEFS_H */