Re: [PATCH] printk: robustify printk

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Paul E. McKenney
Date: Monday, August 11, 2008 - 9:09 am

On Mon, Aug 11, 2008 at 01:04:00PM +0200, Peter Zijlstra wrote:

One way to break the deadlock within the RCU subsystem would be something
similar to the following untested (known not to compile) patch.  The
idea is that RCU detects that call_rcu() is being called from printk(), and
simply enqueues the callback in this case.  For this to really work, RCU
needs something exported from printk() to allow it to make this
decision.  I chose the static variable printk_cpu below just to present
the general idea.

Thoughts?

Buggy, but otherwise:

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---

 rcupreempt.c |   11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff -urpNa -X dontdiff linux-2.6.27-rc1/kernel/rcupreempt.c linux-2.6.27-rc1-printk/kernel/rcupreempt.c
--- linux-2.6.27-rc1/kernel/rcupreempt.c	2008-07-30 08:48:17.000000000 -0700
+++ linux-2.6.27-rc1-printk/kernel/rcupreempt.c	2008-08-11 09:02:03.000000000 -0700
@@ -1118,17 +1118,22 @@ void call_rcu(struct rcu_head *head, voi
 {
 	unsigned long flags;
 	struct rcu_data *rdp;
+	int this_cpu = smp_processor_id();
 
 	head->func = func;
 	head->next = NULL;
 	local_irq_save(flags);
 	rdp = RCU_DATA_ME();
-	spin_lock(&rdp->lock);
-	__rcu_advance_callbacks(rdp);
+	if (this_cpu == printk_cpu) {
+		spin_lock(&rdp->lock);
+		__rcu_advance_callbacks(rdp);
+	}
 	*rdp->nexttail = head;
 	rdp->nexttail = &head->next;
 	RCU_TRACE_RDP(rcupreempt_trace_next_add, rdp);
-	spin_unlock_irqrestore(&rdp->lock, flags);
+	if (this_cpu == printk_cpu) {
+		spin_unlock_irqrestore(&rdp->lock, flags);
+	}
 }
 EXPORT_SYMBOL_GPL(call_rcu);
 
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 0/2] printk vs rq-&gt;lock and xtime lock, Peter Zijlstra, (Mon Mar 24, 5:24 am)
Re: [PATCH 0/2] printk vs rq-&gt;lock and xtime lock, Marcin Slusarz, (Mon Mar 24, 7:31 am)
Re: [PATCH 0/2] printk vs rq-&gt;lock and xtime lock, Linus Torvalds, (Mon Mar 24, 10:58 am)
Re: [PATCH 0/2] printk vs rq-&gt;lock and xtime lock, Peter Zijlstra, (Mon Mar 24, 11:15 am)
Re: [PATCH 0/2] printk vs rq-&gt;lock and xtime lock, Linus Torvalds, (Mon Mar 24, 11:16 am)
Re: [PATCH 0/2] printk vs rq-&gt;lock and xtime lock, Andrew Morton, (Mon Mar 24, 11:57 am)
Re: [PATCH 0/2] printk vs rq-&gt;lock and xtime lock, Peter Zijlstra, (Fri Aug 8, 6:30 am)
Re: [PATCH 0/2] printk vs rq-&gt;lock and xtime lock, Peter Zijlstra, (Fri Aug 8, 6:46 am)
Re: [PATCH 0/2] printk vs rq-&gt;lock and xtime lock, Linus Torvalds, (Fri Aug 8, 9:41 am)
Re: [PATCH 0/2] printk vs rq-&gt;lock and xtime lock, Peter Zijlstra, (Fri Aug 8, 10:10 am)
Re: [PATCH 0/2] printk vs rq-&gt;lock and xtime lock, Linus Torvalds, (Fri Aug 8, 10:25 am)
Re: [PATCH 0/2] printk vs rq-&gt;lock and xtime lock, Peter Zijlstra, (Fri Aug 8, 10:40 am)
Re: [PATCH 0/2] printk vs rq-&gt;lock and xtime lock, Linus Torvalds, (Fri Aug 8, 10:48 am)
Re: [PATCH 0/2] printk vs rq-&gt;lock and xtime lock, Steven Rostedt, (Fri Aug 8, 10:52 am)
[PATCH] printk: robustify printk, Peter Zijlstra, (Fri Aug 8, 11:14 am)
Re: [PATCH] printk: robustify printk, Linus Torvalds, (Fri Aug 8, 11:30 am)
Re: [PATCH] printk: robustify printk, Peter Zijlstra, (Fri Aug 8, 11:33 am)
Re: [PATCH] printk: robustify printk, Andrew Morton, (Fri Aug 8, 12:14 pm)
Re: [PATCH] printk: robustify printk, Peter Zijlstra, (Fri Aug 8, 12:21 pm)
Re: [PATCH] printk: robustify printk, Andrew Morton, (Fri Aug 8, 12:37 pm)
Re: [PATCH] printk: robustify printk, Peter Zijlstra, (Fri Aug 8, 12:47 pm)
Re: [PATCH] printk: robustify printk, Peter Zijlstra, (Fri Aug 8, 12:49 pm)
Re: [PATCH] printk: robustify printk, Paul E. McKenney, (Fri Aug 8, 1:20 pm)
Re: [PATCH] printk: robustify printk, Paul E. McKenney, (Fri Aug 8, 1:30 pm)
Re: [PATCH] printk: robustify printk, Paul E. McKenney, (Fri Aug 8, 1:32 pm)
Re: [PATCH] printk: robustify printk, Peter Zijlstra, (Fri Aug 8, 1:37 pm)
Re: [PATCH] printk: robustify printk, Andrew Morton, (Fri Aug 8, 1:46 pm)
Re: [PATCH] printk: robustify printk, Steven Rostedt, (Fri Aug 8, 1:50 pm)
Re: [PATCH] printk: robustify printk, Linus Torvalds, (Fri Aug 8, 1:57 pm)
Re: [PATCH] printk: robustify printk, Andrew Morton, (Fri Aug 8, 2:13 pm)
Re: [PATCH] printk: robustify printk, Andi Kleen, (Fri Aug 8, 2:35 pm)
Re: [PATCH] printk: robustify printk, David Miller, (Fri Aug 8, 4:02 pm)
Re: [PATCH] printk: robustify printk, Paul E. McKenney, (Fri Aug 8, 5:18 pm)
Re: [PATCH] printk: robustify printk, Ingo Molnar, (Mon Aug 11, 3:45 am)
Re: [PATCH] printk: robustify printk, Andi Kleen, (Mon Aug 11, 4:03 am)
Re: [PATCH] printk: robustify printk, Peter Zijlstra, (Mon Aug 11, 4:04 am)
Re: [PATCH] printk: robustify printk, Peter Zijlstra, (Mon Aug 11, 4:22 am)
Re: [PATCH] printk: robustify printk, Andi Kleen, (Mon Aug 11, 4:42 am)
Re: [PATCH] printk: robustify printk, Ingo Molnar, (Mon Aug 11, 4:51 am)
Re: [PATCH] printk: robustify printk, Ingo Molnar, (Mon Aug 11, 5:02 am)
Re: [PATCH] printk: robustify printk, Andi Kleen, (Mon Aug 11, 5:14 am)
Re: [PATCH] printk: robustify printk, Ingo Molnar, (Mon Aug 11, 5:36 am)
Re: [PATCH] printk: robustify printk, Paul E. McKenney, (Mon Aug 11, 6:22 am)
Re: [PATCH] printk: robustify printk, Valdis.Kletnieks, (Mon Aug 11, 7:15 am)
Re: [PATCH] printk: robustify printk, Andi Kleen, (Mon Aug 11, 7:29 am)
Re: [PATCH] printk: robustify printk, Steven Rostedt, (Mon Aug 11, 7:55 am)
Re: [PATCH] printk: robustify printk, Paul E. McKenney, (Mon Aug 11, 9:09 am)
Re: [PATCH] printk: robustify printk, Jiri Kosina, (Wed Aug 20, 5:40 am)
Re: [PATCH] printk: robustify printk, Peter Zijlstra, (Wed Aug 20, 5:43 am)
Re: [PATCH] printk: robustify printk, Ingo Molnar, (Wed Aug 20, 6:40 am)