Thread (11 messages) flat view 11 messages, 3 authors, 2021-10-27

Re: [PATCH v5 1/2] ftrace: disable preemption when recursion locked

From: 王贇 <hidden>
Date: 2021-10-26 09:48:25
Also in: linux-riscv, live-patching, lkml

Hi, Miroslav

On 2021/10/26 下午5:35, Miroslav Benes wrote:
Hi,
quoted
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.
Could you please give more hint on how will it be correct?

I get the point that bit will no longer be 0, there are only -1 or > 0 now
so trace_test_and_set_recursion() will disable preemption on bit > 0 and
trace_clear_recursion() will enabled it since it should only be called when
bit > 0 (I remember we could use a WARN_ON here now :-P).
quoted
@@ -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.
I thought it will no longer return 0 so I change it to > 0, isn't that correct?

Regards,
Michael Wang
Regards
Miroslav
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help