Hi, > diff --git a/include/linux/trace_recursion.h b/include/linux/trace_recursion.h > index abe1a50..2bc1522 100644 > --- a/include/linux/trace_recursion.h > +++ b/include/linux/trace_recursion.h > @@ -135,6 +135,9 @@ static __always_inline int trace_get_context_bit(void) > # define do_ftrace_record_recursion(ip, pip) do { } while (0) > #endif > > +/* > + * Preemption is promised to be disabled when return bit > 0. > + */ > static __always_inline int trace_test_and_set_recursion(unsigned long ip, unsigned long pip, > int start) > { > @@ -162,11 +165,17 @@ static __always_inline int trace_test_and_set_recursion(unsigned long ip, unsign > current->trace_recursion = val; > barrier(); > > + preempt_disable_notrace(); > + > return bit; > } > > +/* > + * Preemption will be enabled (if it was previously enabled). > + */ > static __always_inline void trace_clear_recursion(int bit) > { > + preempt_enable_notrace(); > barrier(); > trace_recursion_clear(bit); > } The two comments should be updated too since Steven removed the "bit == 0" trick. > @@ -178,7 +187,7 @@ static __always_inline void trace_clear_recursion(int bit) > * tracing recursed in the same context (normal vs interrupt), > * > * Returns: -1 if a recursion happened. > - * >= 0 if no recursion > + * > 0 if no recursion. > */ > static __always_inline int ftrace_test_recursion_trylock(unsigned long ip, > unsigned long parent_ip) And this change would not be correct now. Regards Miroslav