50 lines
1.4 KiB
C
50 lines
1.4 KiB
C
/* 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 */
|