There are many places where 2 annotations are not enough. This patch adds INDIRECT_CALL_3 and INDIRECT_CALL_4 to cover such cases.
Showing the changes to include/linux (1 of 1 file). Show all
Unified · Split
| @@ -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) f | 37 | #define INDIRECT_CALLABLE_DECLARE(f) f |
| 28 | #define INDIRECT_CALLABLE_SCOPE | 38 | #define INDIRECT_CALLABLE_SCOPE |
| @@ -30,6 +40,8 @@ · 1 unmodified line | |||
| 30 | #else | 40 | #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 static | 46 | #define INDIRECT_CALLABLE_SCOPE static |
| 35 | #endif | 47 | #endif |