include/linux/tracepoint-defs.h | 4 ++-- include/linux/tracepoint.h | 8 ++++---- kernel/tracepoint.c | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-)
The old static key API based on 'struct static_key' is deprecated.
Convert tracepoints to use the new API.
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
---
include/linux/tracepoint-defs.h | 4 ++--
include/linux/tracepoint.h | 8 ++++----
kernel/tracepoint.c | 4 ++--
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/include/linux/tracepoint-defs.h b/include/linux/tracepoint-defs.h
index 4dc4955f0fbf..60a6e8314d4c 100644
--- a/include/linux/tracepoint-defs.h
+++ b/include/linux/tracepoint-defs.h
@@ -31,7 +31,7 @@ struct tracepoint_func {
struct tracepoint {
const char *name; /* Tracepoint name */
- struct static_key key;
+ struct static_key_false key;
struct static_call_key *static_call_key;
void *static_call_tramp;
void *iterator;
@@ -83,7 +83,7 @@ struct bpf_raw_event_map {
#ifdef CONFIG_TRACEPOINTS
# define tracepoint_enabled(tp) \
- static_key_false(&(__tracepoint_##tp).key)
+ static_branch_unlikely(&(__tracepoint_##tp).key)
#else
# define tracepoint_enabled(tracepoint) false
#endif
diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h
index 6be396bb4297..ab5162fc3e4a 100644
--- a/include/linux/tracepoint.h
+++ b/include/linux/tracepoint.h
@@ -228,7 +228,7 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
#define __DECLARE_TRACE_RCU(name, proto, args, cond) \
static inline void trace_##name##_rcuidle(proto) \
{ \
- if (static_key_false(&__tracepoint_##name.key)) \
+ if (static_branch_unlikely(&__tracepoint_##name.key)) \
__DO_TRACE(name, \
TP_ARGS(args), \
TP_CONDITION(cond), 1); \
@@ -254,7 +254,7 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
extern struct tracepoint __tracepoint_##name; \
static inline void trace_##name(proto) \
{ \
- if (static_key_false(&__tracepoint_##name.key)) \
+ if (static_branch_unlikely(&__tracepoint_##name.key)) \
__DO_TRACE(name, \
TP_ARGS(args), \
TP_CONDITION(cond), 0); \
@@ -291,7 +291,7 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
static inline bool \
trace_##name##_enabled(void) \
{ \
- return static_key_false(&__tracepoint_##name.key); \
+ return static_branch_unlikely(&__tracepoint_##name.key);\
}
/*
@@ -308,7 +308,7 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
struct tracepoint __tracepoint_##_name __used \
__section("__tracepoints") = { \
.name = __tpstrtab_##_name, \
- .key = STATIC_KEY_INIT_FALSE, \
+ .key = STATIC_KEY_FALSE_INIT, \
.static_call_key = &STATIC_CALL_KEY(tp_func_##_name), \
.static_call_tramp = STATIC_CALL_TRAMP_ADDR(tp_func_##_name), \
.iterator = &__traceiter_##_name, \
diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
index 8d1507dd0724..dc160cc0b616 100644
--- a/kernel/tracepoint.c
+++ b/kernel/tracepoint.c
@@ -358,7 +358,7 @@ static int tracepoint_add_func(struct tracepoint *tp,
tracepoint_update_call(tp, tp_funcs);
/* Both iterator and static call handle NULL tp->funcs */
rcu_assign_pointer(tp->funcs, tp_funcs);
- static_key_enable(&tp->key);
+ static_branch_enable(&tp->key);
break;
case TP_FUNC_2: /* 1->2 */
/* Set iterator static call */
@@ -414,7 +414,7 @@ static int tracepoint_remove_func(struct tracepoint *tp,
if (tp->unregfunc && static_key_enabled(&tp->key))
tp->unregfunc();
- static_key_disable(&tp->key);
+ static_branch_disable(&tp->key);
/* Set iterator static call */
tracepoint_update_call(tp, tp_funcs);
/* Both iterator and static call handle NULL tp->funcs */
--
2.46.0
On Tue, Oct 01, 2024 at 03:24:01PM -0700, Josh Poimboeuf wrote: > The old static key API based on 'struct static_key' is deprecated. > Convert tracepoints to use the new API. > > Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org> Steven, The kernel test robot found this patch breaks the build with CONFIG_HIST_TRIGGERS: https://lore.kernel.org/202410040333.vJSL1NXx-lkp@intel.com Here's the fix, do you want to squash it in or should I post a v2? diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index 5f9119eb7c67..cc2924ad32a3 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -822,7 +822,7 @@ static inline void trace_synth(struct synth_event *event, u64 *var_ref_vals, { struct tracepoint *tp = event->tp; - if (unlikely(atomic_read(&tp->key.enabled) > 0)) { + if (unlikely(static_key_enabled(&tp->key))) { struct tracepoint_func *probe_func_ptr; synth_probe_func_t probe_func; void *__data;
On Mon, 7 Oct 2024 11:25:21 -0700 Josh Poimboeuf <jpoimboe@kernel.org> wrote: > On Tue, Oct 01, 2024 at 03:24:01PM -0700, Josh Poimboeuf wrote: > > The old static key API based on 'struct static_key' is deprecated. > > Convert tracepoints to use the new API. > > > > Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org> > > Steven, > > The kernel test robot found this patch breaks the build with > CONFIG_HIST_TRIGGERS: > > https://lore.kernel.org/202410040333.vJSL1NXx-lkp@intel.com > > Here's the fix, do you want to squash it in or should I post a v2? Please post a v2. My workflow relies on patchwork, as it will automatically update the status of the patch as it goes through git trees and my "for-next/linus" postings. If I modify the patch, then I need to do it manually. -- Steve > > diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c > index 5f9119eb7c67..cc2924ad32a3 100644 > --- a/kernel/trace/trace_events_hist.c > +++ b/kernel/trace/trace_events_hist.c > @@ -822,7 +822,7 @@ static inline void trace_synth(struct synth_event *event, u64 *var_ref_vals, > { > struct tracepoint *tp = event->tp; > > - if (unlikely(atomic_read(&tp->key.enabled) > 0)) { > + if (unlikely(static_key_enabled(&tp->key))) { > struct tracepoint_func *probe_func_ptr; > synth_probe_func_t probe_func; > void *__data;
© 2016 - 2024 Red Hat, Inc.