Message ID | 1328125319-5205-37-git-send-email-paulmck@linux.vnet.ibm.com |
---|---|
State | Superseded |
Headers | show |
On Wed, Feb 01, 2012 at 11:41:55AM -0800, Paul E. McKenney wrote: > --- a/kernel/lockdep.c > +++ b/kernel/lockdep.c > @@ -4176,7 +4176,13 @@ void lockdep_rcu_suspicious(const char *file, const int line, const char *s) > printk("-------------------------------\n"); > printk("%s:%d %s!\n", file, line, s); > printk("\nother info that might help us debug this:\n\n"); > - printk("\nrcu_scheduler_active = %d, debug_locks = %d\n", rcu_scheduler_active, debug_locks); > + printk("\n%srcu_scheduler_active = %d, debug_locks = %d\n", > + !rcu_lockdep_current_cpu_online() > + ? "RCU used illegally from offline CPU!\n" > + : rcu_is_cpu_idle() > + ? "RCU used illegally from idle CPU!\n" > + : "", Not the usual way I've seen chained ?: indented in kernel code: cond1 ? value1 : cond2 ? value2 : value3 That avoids repeated indentation over to the right, much like "else if". - Josh Triplett
On Wed, Feb 01, 2012 at 10:07:52PM -0800, Josh Triplett wrote: > On Wed, Feb 01, 2012 at 11:41:55AM -0800, Paul E. McKenney wrote: > > --- a/kernel/lockdep.c > > +++ b/kernel/lockdep.c > > @@ -4176,7 +4176,13 @@ void lockdep_rcu_suspicious(const char *file, const int line, const char *s) > > printk("-------------------------------\n"); > > printk("%s:%d %s!\n", file, line, s); > > printk("\nother info that might help us debug this:\n\n"); > > - printk("\nrcu_scheduler_active = %d, debug_locks = %d\n", rcu_scheduler_active, debug_locks); > > + printk("\n%srcu_scheduler_active = %d, debug_locks = %d\n", > > + !rcu_lockdep_current_cpu_online() > > + ? "RCU used illegally from offline CPU!\n" > > + : rcu_is_cpu_idle() > > + ? "RCU used illegally from idle CPU!\n" > > + : "", > > Not the usual way I've seen chained ?: indented in kernel code: > > cond1 ? value1 : > cond2 ? value2 : > value3 > > That avoids repeated indentation over to the right, much like "else if". I tried the following, but didn't like it: !rcu_lockdep_current_cpu_online() ? "RCU used illegally from offline CPU!\n" : rcu_is_cpu_idle() ? "RCU used illegally from idle CPU!\n" : "", Thanx, Paul
On Thu, Feb 02, 2012 at 10:30:07AM -0800, Paul E. McKenney wrote: > On Wed, Feb 01, 2012 at 10:07:52PM -0800, Josh Triplett wrote: > > On Wed, Feb 01, 2012 at 11:41:55AM -0800, Paul E. McKenney wrote: > > > --- a/kernel/lockdep.c > > > +++ b/kernel/lockdep.c > > > @@ -4176,7 +4176,13 @@ void lockdep_rcu_suspicious(const char *file, const int line, const char *s) > > > printk("-------------------------------\n"); > > > printk("%s:%d %s!\n", file, line, s); > > > printk("\nother info that might help us debug this:\n\n"); > > > - printk("\nrcu_scheduler_active = %d, debug_locks = %d\n", rcu_scheduler_active, debug_locks); > > > + printk("\n%srcu_scheduler_active = %d, debug_locks = %d\n", > > > + !rcu_lockdep_current_cpu_online() > > > + ? "RCU used illegally from offline CPU!\n" > > > + : rcu_is_cpu_idle() > > > + ? "RCU used illegally from idle CPU!\n" > > > + : "", > > > > Not the usual way I've seen chained ?: indented in kernel code: > > > > cond1 ? value1 : > > cond2 ? value2 : > > value3 > > > > That avoids repeated indentation over to the right, much like "else if". > > I tried the following, but didn't like it: > > !rcu_lockdep_current_cpu_online() ? "RCU used illegally from offline CPU!\n" : > rcu_is_cpu_idle() ? "RCU used illegally from idle CPU!\n" : > "", Seems like an improvement to me, but it also doesn't matter enough to bikeshed further about. :) - Josh Triplett
diff --git a/kernel/lockdep.c b/kernel/lockdep.c index 8889f7d..ea9ee45 100644 --- a/kernel/lockdep.c +++ b/kernel/lockdep.c @@ -4176,7 +4176,13 @@ void lockdep_rcu_suspicious(const char *file, const int line, const char *s) printk("-------------------------------\n"); printk("%s:%d %s!\n", file, line, s); printk("\nother info that might help us debug this:\n\n"); - printk("\nrcu_scheduler_active = %d, debug_locks = %d\n", rcu_scheduler_active, debug_locks); + printk("\n%srcu_scheduler_active = %d, debug_locks = %d\n", + !rcu_lockdep_current_cpu_online() + ? "RCU used illegally from offline CPU!\n" + : rcu_is_cpu_idle() + ? "RCU used illegally from idle CPU!\n" + : "", + rcu_scheduler_active, debug_locks); /* * If a CPU is in the RCU-free window in idle (ie: in the section