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 static_key_deferred_flush(struct static_key_deferred *key); 18 extern void 19 jump_label_rate_limit(struct static_key_deferred *key, unsigned long rl); 20 21 #else /* !HAVE_JUMP_LABEL */ 22 struct static_key_deferred { 23 struct static_key key; 24 }; static_key_slow_dec_deferred(struct static_key_deferred * key)25static inline void static_key_slow_dec_deferred(struct static_key_deferred *key) 26 { 27 STATIC_KEY_CHECK_USE(); 28 static_key_slow_dec(&key->key); 29 } static_key_deferred_flush(struct static_key_deferred * key)30static inline void static_key_deferred_flush(struct static_key_deferred *key) 31 { 32 STATIC_KEY_CHECK_USE(); 33 } 34 static inline void jump_label_rate_limit(struct static_key_deferred * key,unsigned long rl)35jump_label_rate_limit(struct static_key_deferred *key, 36 unsigned long rl) 37 { 38 STATIC_KEY_CHECK_USE(); 39 } 40 #endif /* HAVE_JUMP_LABEL */ 41 #endif /* _LINUX_JUMP_LABEL_RATELIMIT_H */ 42