Subject: Re: regression: unregister_netdev() unusably slow

From: Benjamin LaHaise <[email-masked]>
Date: Sun, 24 May 2009 20:00:50 -0400

On Mon, May 25, 2009 at 12:47:39AM +0200, Eric Dumazet wrote:
> There is a strong dependancy against HZ
> BTW, I am using TREE_RCU

I'm using CLASSIC_RCU.  The bisect just completed, and it points to RCU.  
It makes some degree of sense since I'm testing on an otherwise idle 
machine.  That said, where is fixing it going to make sense?  I'm not 
opposed to having device unregister take a few timer ticks, but there 
has to be some way of exposing parallelism to the system, and since the 
synchronize_net() calls are done under rntl_lock(), none is possible at 
present.  Hrm.

		-ben

bf51935f3e988e0ed6f34b55593e5912f990750a is first bad commit
commit bf51935f3e988e0ed6f34b55593e5912f990750a
Author: Paul E. McKenney <[email-masked]>
Date:   Tue Feb 17 06:01:30 2009 -0800

    x86, rcu: fix strange load average and ksoftirqd behavior
    
    Damien Wyart reported high ksoftirqd CPU usage (20%) on an
    otherwise idle system.
    
    The function-graph trace Damien provided:
...
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c

index a546f55..bd4da2a 100644
--- a/arch/x86/kernel/process_32.c
+++ b/arch/x86/kernel/process_32.c
@@ -104,9 +104,6 @@ void cpu_idle(void)
 			check_pgt_cache();
 			rmb();
 
-			if (rcu_pending(cpu))
-				rcu_check_callbacks(cpu, 0);
-
 			if (cpu_is_offline(cpu))
 				play_dead();