blob: b6d874e4dbaa09e2154b96c7dafdbb13e50aff6c [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Include this file from a header that uses vendor hooks.
* Typical usage:
* In the header file:
*
* #include <linux/android_hook_defs.h>
*
* 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 <linux/tracepoint.h>
#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 */