History

indirect_call_wrapper: extend indirect wrapper to support up to 4 calls

There are many places where 2 annotations are not enough. This patch adds INDIRECT_CALL_3 and INDIRECT_CALL_4 to cover such cases.

Brian Vazquez committed 6 years ago

Commit e678e9d1 parent 13fdc411 file · +12 −0Browse files

Unified · Split

include/linux/indirect_call_wrapper.h+12−0
@@ -23,6 +23,16 @@ · 22 unmodified lines
23 likely(f == f2) ? f2(__VA_ARGS__) : \23 likely(f == f2) ? f2(__VA_ARGS__) : \
24 INDIRECT_CALL_1(f, f1, __VA_ARGS__); \24 INDIRECT_CALL_1(f, f1, __VA_ARGS__); \
25 })25 })
26#define INDIRECT_CALL_3(f, f3, f2, f1, ...) \
27 ({ \
28 likely(f == f3) ? f3(__VA_ARGS__) : \
29 INDIRECT_CALL_2(f, f2, f1, __VA_ARGS__); \
30 })
31#define INDIRECT_CALL_4(f, f4, f3, f2, f1, ...) \
32 ({ \
33 likely(f == f4) ? f4(__VA_ARGS__) : \
34 INDIRECT_CALL_3(f, f3, f2, f1, __VA_ARGS__); \
35 })
26 36
27#define INDIRECT_CALLABLE_DECLARE(f) f37#define INDIRECT_CALLABLE_DECLARE(f) f
28#define INDIRECT_CALLABLE_SCOPE38#define INDIRECT_CALLABLE_SCOPE
@@ -30,6 +40,8 @@ · 1 unmodified line
30#else40#else
31#define INDIRECT_CALL_1(f, f1, ...) f(__VA_ARGS__)41#define INDIRECT_CALL_1(f, f1, ...) f(__VA_ARGS__)
32#define INDIRECT_CALL_2(f, f2, f1, ...) f(__VA_ARGS__)42#define INDIRECT_CALL_2(f, f2, f1, ...) f(__VA_ARGS__)
43#define INDIRECT_CALL_3(f, f3, f2, f1, ...) f(__VA_ARGS__)
44#define INDIRECT_CALL_4(f, f4, f3, f2, f1, ...) f(__VA_ARGS__)
33#define INDIRECT_CALLABLE_DECLARE(f)45#define INDIRECT_CALLABLE_DECLARE(f)
34#define INDIRECT_CALLABLE_SCOPE static46#define INDIRECT_CALLABLE_SCOPE static
35#endif47#endif