1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _LINUX_JUMP_LABEL_RATELIMIT_H 3 #define _LINUX_JUMP_LABEL_RATELIMIT_H 4 5 #include <linux/jump_label.h> 6 #include <linux/workqueue.h> 7 8 #if defined(CC_HAVE_ASM_GOTO) && defined(CONFIG_JUMP_LABEL) 9 struct static_key_deferred { 10 struct static_key key; 11 unsigned long timeout; 12 struct delayed_work work; 13 }; 14 #endif 15 16 #ifdef HAVE_JUMP_LABEL 17 extern void static_key_slow_dec_deferred(struct static_key_deferred *key); 18 extern void static_key_deferred_flush(struct static_key_deferred *key); 19 extern void 20 jump_label_rate_limit(struct static_key_deferred *key, unsigned long rl); 21 22 #else /* !HAVE_JUMP_LABEL */ 23 struct static_key_deferred { 24 struct static_key key; 25 }; static_key_slow_dec_deferred(struct static_key_deferred * key)26static inline void static_key_slow_dec_deferred(struct static_key_deferred *key) 27 { 28 STATIC_KEY_CHECK_USE(key); 29 static_key_slow_dec(&key->key); 30 } static_key_deferred_flush(struct static_key_deferred * key)31static inline void static_key_deferred_flush(struct static_key_deferred *key) 32 { 33 STATIC_KEY_CHECK_USE(key); 34 } 35 static inline void jump_label_rate_limit(struct static_key_deferred * key,unsigned long rl)36jump_label_rate_limit(struct static_key_deferred *key, 37 unsigned long rl) 38 { 39 STATIC_KEY_CHECK_USE(key); 40 } 41 #endif /* HAVE_JUMP_LABEL */ 42 #endif /* _LINUX_JUMP_LABEL_RATELIMIT_H */ 43