Andrew Jones | 851cf6e | 2013-08-09 19:51:57 +0530 | [diff] [blame] | 1 | #ifndef _LINUX_JUMP_LABEL_RATELIMIT_H |
| 2 | #define _LINUX_JUMP_LABEL_RATELIMIT_H |
| 3 | |
| 4 | #include <linux/jump_label.h> |
| 5 | #include <linux/workqueue.h> |
| 6 | |
| 7 | #if defined(CC_HAVE_ASM_GOTO) && defined(CONFIG_JUMP_LABEL) |
| 8 | struct static_key_deferred { |
| 9 | struct static_key key; |
| 10 | unsigned long timeout; |
| 11 | struct delayed_work work; |
| 12 | }; |
| 13 | #endif |
| 14 | |
| 15 | #ifdef HAVE_JUMP_LABEL |
| 16 | extern void static_key_slow_dec_deferred(struct static_key_deferred *key); |
| 17 | extern void |
| 18 | jump_label_rate_limit(struct static_key_deferred *key, unsigned long rl); |
| 19 | |
| 20 | #else /* !HAVE_JUMP_LABEL */ |
| 21 | struct static_key_deferred { |
| 22 | struct static_key key; |
| 23 | }; |
| 24 | static inline void static_key_slow_dec_deferred(struct static_key_deferred *key) |
| 25 | { |
Hannes Frederic Sowa | c4b2c0c | 2013-10-19 21:48:53 +0200 | [diff] [blame] | 26 | STATIC_KEY_CHECK_USE(); |
Andrew Jones | 851cf6e | 2013-08-09 19:51:57 +0530 | [diff] [blame] | 27 | static_key_slow_dec(&key->key); |
| 28 | } |
| 29 | static inline void |
| 30 | jump_label_rate_limit(struct static_key_deferred *key, |
| 31 | unsigned long rl) |
| 32 | { |
Hannes Frederic Sowa | c4b2c0c | 2013-10-19 21:48:53 +0200 | [diff] [blame] | 33 | STATIC_KEY_CHECK_USE(); |
Andrew Jones | 851cf6e | 2013-08-09 19:51:57 +0530 | [diff] [blame] | 34 | } |
| 35 | #endif /* HAVE_JUMP_LABEL */ |
| 36 | #endif /* _LINUX_JUMP_LABEL_RATELIMIT_H */ |