hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/include/linux/jump_label_ratelimit.h
....@@ -12,21 +12,77 @@
1212 struct delayed_work work;
1313 };
1414
15
-extern void static_key_slow_dec_deferred(struct static_key_deferred *key);
16
-extern void static_key_deferred_flush(struct static_key_deferred *key);
15
+struct static_key_true_deferred {
16
+ struct static_key_true key;
17
+ unsigned long timeout;
18
+ struct delayed_work work;
19
+};
20
+
21
+struct static_key_false_deferred {
22
+ struct static_key_false key;
23
+ unsigned long timeout;
24
+ struct delayed_work work;
25
+};
26
+
27
+#define static_key_slow_dec_deferred(x) \
28
+ __static_key_slow_dec_deferred(&(x)->key, &(x)->work, (x)->timeout)
29
+#define static_branch_slow_dec_deferred(x) \
30
+ __static_key_slow_dec_deferred(&(x)->key.key, &(x)->work, (x)->timeout)
31
+
32
+#define static_key_deferred_flush(x) \
33
+ __static_key_deferred_flush((x), &(x)->work)
34
+
35
+extern void
36
+__static_key_slow_dec_deferred(struct static_key *key,
37
+ struct delayed_work *work,
38
+ unsigned long timeout);
39
+extern void __static_key_deferred_flush(void *key, struct delayed_work *work);
1740 extern void
1841 jump_label_rate_limit(struct static_key_deferred *key, unsigned long rl);
42
+
43
+extern void jump_label_update_timeout(struct work_struct *work);
44
+
45
+#define DEFINE_STATIC_KEY_DEFERRED_TRUE(name, rl) \
46
+ struct static_key_true_deferred name = { \
47
+ .key = { STATIC_KEY_INIT_TRUE }, \
48
+ .timeout = (rl), \
49
+ .work = __DELAYED_WORK_INITIALIZER((name).work, \
50
+ jump_label_update_timeout, \
51
+ 0), \
52
+ }
53
+
54
+#define DEFINE_STATIC_KEY_DEFERRED_FALSE(name, rl) \
55
+ struct static_key_false_deferred name = { \
56
+ .key = { STATIC_KEY_INIT_FALSE }, \
57
+ .timeout = (rl), \
58
+ .work = __DELAYED_WORK_INITIALIZER((name).work, \
59
+ jump_label_update_timeout, \
60
+ 0), \
61
+ }
1962
2063 #else /* !CONFIG_JUMP_LABEL */
2164 struct static_key_deferred {
2265 struct static_key key;
2366 };
67
+struct static_key_true_deferred {
68
+ struct static_key_true key;
69
+};
70
+struct static_key_false_deferred {
71
+ struct static_key_false key;
72
+};
73
+#define DEFINE_STATIC_KEY_DEFERRED_TRUE(name, rl) \
74
+ struct static_key_true_deferred name = { STATIC_KEY_TRUE_INIT }
75
+#define DEFINE_STATIC_KEY_DEFERRED_FALSE(name, rl) \
76
+ struct static_key_false_deferred name = { STATIC_KEY_FALSE_INIT }
77
+
78
+#define static_branch_slow_dec_deferred(x) static_branch_dec(&(x)->key)
79
+
2480 static inline void static_key_slow_dec_deferred(struct static_key_deferred *key)
2581 {
2682 STATIC_KEY_CHECK_USE(key);
2783 static_key_slow_dec(&key->key);
2884 }
29
-static inline void static_key_deferred_flush(struct static_key_deferred *key)
85
+static inline void static_key_deferred_flush(void *key)
3086 {
3187 STATIC_KEY_CHECK_USE(key);
3288 }
....@@ -37,4 +93,7 @@
3793 STATIC_KEY_CHECK_USE(key);
3894 }
3995 #endif /* CONFIG_JUMP_LABEL */
96
+
97
+#define static_branch_deferred_inc(x) static_branch_inc(&(x)->key)
98
+
4099 #endif /* _LINUX_JUMP_LABEL_RATELIMIT_H */