• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /* SPDX-License-Identifier: GPL-2.0 */
2  /*
3   * Include this file from a header that uses vendor hooks.
4   * Typical usage:
5   * In the header file:
6   *
7   *    #include <linux/android_hook_defs.h>
8   *
9   *    DECLARE_INDIRECT_HOOK(android_vh_del_folio_from_lrulist,
10   *        TP_PROTO(struct folio *folio, enum lru_list lru),
11   *        TP_ARGS(folio, lru));
12   *
13   *   static __always_inline
14   *   void lruvec_del_folio(struct lruvec *lruvec, struct folio *folio)
15   *   {
16   *        ...
17   *        _trace_android_vh_del_folio_from_lrulist(folio, lru);
18   *   }
19   *
20   * In the source file:
21   *
22   *    DEFINE_INDIRECT_HOOK(android_vh_del_folio_from_lrulist,
23   *        TP_PROTO(struct folio *folio, enum lru_list lru),
24   *        TP_ARGS(folio, lru));
25   */
26  
27  #ifndef _LINUX_ANDROID_HOOK_DEFS_H
28  #define _LINUX_ANDROID_HOOK_DEFS_H
29  
30  /* Users of these macros need TP_PROTO() and TP_ARGS() */
31  #include <linux/tracepoint.h>
32  
33  #define DECLARE_INDIRECT_HOOK(name, proto, args)			\
34  	extern struct tracepoint __tracepoint_##name;			\
35  	void __trace_##name(proto);					\
36  	static __always_inline void _trace_##name(proto)		\
37  	{								\
38  		if (static_key_false(&__tracepoint_##name.key))		\
39  			__trace_##name(args);				\
40  	}
41  
42  #define DEFINE_INDIRECT_HOOK(name, proto, args)				\
43  	void __trace_##name(proto)					\
44  	{								\
45  		trace_##name(args);					\
46  	}								\
47  	EXPORT_SYMBOL_GPL(__trace_##name);
48  
49  #endif	/* _LINUX_ANDROID_HOOK_DEFS_H */
50