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 }; static_key_slow_dec_deferred(struct static_key_deferred * key)24static inline void static_key_slow_dec_deferred(struct static_key_deferred *key) 25 { 26 STATIC_KEY_CHECK_USE(); 27 static_key_slow_dec(&key->key); 28 } 29 static inline void jump_label_rate_limit(struct static_key_deferred * key,unsigned long rl)30jump_label_rate_limit(struct static_key_deferred *key, 31 unsigned long rl) 32 { 33 STATIC_KEY_CHECK_USE(); 34 } 35 #endif /* HAVE_JUMP_LABEL */ 36 #endif /* _LINUX_JUMP_LABEL_RATELIMIT_H */ 37