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) 9struct 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 17extern void static_key_slow_dec_deferred(struct static_key_deferred *key); 18extern void static_key_deferred_flush(struct static_key_deferred *key); 19extern void 20jump_label_rate_limit(struct static_key_deferred *key, unsigned long rl); 21 22#else /* !HAVE_JUMP_LABEL */ 23struct static_key_deferred { 24 struct static_key key; 25}; 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} 31static inline void static_key_deferred_flush(struct static_key_deferred *key) 32{ 33 STATIC_KEY_CHECK_USE(key); 34} 35static inline void 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