mirror of
				https://github.com/linuxkit/linuxkit.git
				synced 2025-11-04 08:25:51 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From c9c04b93f7a5c7efc87e6b5b4119e4c4502a2d64 Mon Sep 17 00:00:00 2001
 | 
						|
From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
 | 
						|
Date: Thu, 18 Jan 2018 15:42:09 -0500
 | 
						|
Subject: [PATCH 115/414] ring-buffer: Fix duplicate results in mapping context
 | 
						|
 to bits in recursive lock
 | 
						|
 | 
						|
In bringing back the context checks, the code checks first if its normal
 | 
						|
(non-interrupt) context, and then for NMI then IRQ then softirq. The final
 | 
						|
check is redundant. Since the if branch is only hit if the context is one of
 | 
						|
NMI, IRQ, or SOFTIRQ, if it's not NMI or IRQ there's no reason to check if
 | 
						|
it is SOFTIRQ. The current code returns the same result even if its not a
 | 
						|
SOFTIRQ. Which is confusing.
 | 
						|
 | 
						|
  pc & SOFTIRQ_OFFSET ? 2 : RB_CTX_SOFTIRQ
 | 
						|
 | 
						|
Is redundant as RB_CTX_SOFTIRQ *is* 2!
 | 
						|
 | 
						|
Fixes: a0e3a18f4baf ("ring-buffer: Bring back context level recursive checks")
 | 
						|
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
 | 
						|
(cherry picked from commit 0164e0d7e803af3ee1c63770978c728f8778ad01)
 | 
						|
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
 | 
						|
---
 | 
						|
 kernel/trace/ring_buffer.c | 3 +--
 | 
						|
 1 file changed, 1 insertion(+), 2 deletions(-)
 | 
						|
 | 
						|
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
 | 
						|
index 3621164c234b..cad398ba3009 100644
 | 
						|
--- a/kernel/trace/ring_buffer.c
 | 
						|
+++ b/kernel/trace/ring_buffer.c
 | 
						|
@@ -2633,8 +2633,7 @@ trace_recursive_lock(struct ring_buffer_per_cpu *cpu_buffer)
 | 
						|
 		bit = RB_CTX_NORMAL;
 | 
						|
 	else
 | 
						|
 		bit = pc & NMI_MASK ? RB_CTX_NMI :
 | 
						|
-			pc & HARDIRQ_MASK ? RB_CTX_IRQ :
 | 
						|
-			pc & SOFTIRQ_OFFSET ? 2 : RB_CTX_SOFTIRQ;
 | 
						|
+			pc & HARDIRQ_MASK ? RB_CTX_IRQ : RB_CTX_SOFTIRQ;
 | 
						|
 
 | 
						|
 	if (unlikely(val & (1 << bit)))
 | 
						|
 		return 1;
 | 
						|
-- 
 | 
						|
2.17.0
 | 
						|
 |