trace: Fix preempt_enable_no_resched() abuse [Linux 5.1]

trace: Fix preempt_enable_no_resched() abuse [Linux 5.1]

This Linux kernel change "trace: Fix preempt_enable_no_resched() abuse" is included in the Linux 5.1 release. This change is authored by Peter Zijlstra <peterz [at]> on Tue Apr 23 22:03:18 2019 +0200. The commit for this change in Linux stable tree is d6097c9 (patch).

trace: Fix preempt_enable_no_resched() abuse

Unless the very next line is schedule(), or implies it, one must not use
preempt_enable_no_resched(). It can cause a preemption to go missing and
thereby cause arbitrary delays, breaking the PREEMPT=y invariant.


Cc: Waiman Long <>
Cc: Linus Torvalds <>
Cc: Ingo Molnar <>
Cc: Will Deacon <>
Cc: Thomas Gleixner <>
Cc: the arch/x86 maintainers <>
Cc: Davidlohr Bueso <>
Cc: Tim Chen <>
Cc: huang ying <>
Cc: Roman Gushchin <>
Cc: Alexei Starovoitov <>
Cc: Daniel Borkmann <>
Fixes: 2c2d7329d8af ("tracing/ftrace: use preempt_enable_no_resched_notrace in ring_buffer_time_stamp()")
Signed-off-by: Peter Zijlstra (Intel) <>
Signed-off-by: Steven Rostedt (VMware) <>

There are 2 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 kernel/trace/ring_buffer.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 41b6f96..4ee8d8a 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -762,7 +762,7 @@ u64 ring_buffer_time_stamp(struct ring_buffer *buffer, int cpu)

    time = rb_time_stamp(buffer);
-   preempt_enable_no_resched_notrace();
+   preempt_enable_notrace();

    return time;

Leave a Reply

Your email address will not be published. Required fields are marked *