1. 14 Apr, 2009 4 commits
    • Paul E. McKenney's avatar
      rcu: Make hierarchical RCU less IPI-happy · ef631b0c
      Paul E. McKenney authored
      This patch fixes a hierarchical-RCU performance bug located by Anton
      Blanchard.  The problem stems from a misguided attempt to provide a
      work-around for jiffies-counter failure.  This work-around uses a per-CPU
      n_rcu_pending counter, which is incremented on each call to rcu_pending(),
      which in turn is called from each scheduling-clock interrupt.  Each CPU
      then treats this counter as a surrogate for the jiffies counter, so
      that if the jiffies counter fails to advance, the per-CPU n_rcu_pending
      counter will cause RCU to invoke force_quiescent_state(), which in turn
      will (among other things) send resched IPIs to CPUs that have thus far
      failed to pass through an RCU quiescent state.
      
      Unfortunately, each CPU resets only its own counter after sending a
      batch of IPIs.  This means that the other CPUs will also (needlessly)
      send -another- round of IPIs, for a full N-squared set of IPIs in the
      worst case every three scheduler-clock ticks until the grace period
      finally ends.  It is not reasonable for a given CPU to reset each and
      every n_rcu_pending for all the other CPUs, so this patch instead simply
      disables the jiffies-counter "training wheels", thus eliminating the
      excessive IPIs.
      
      Note that the jiffies-counter IPIs do not have this problem due to
      the fact that the jiffies counter is global, so that the CPU sending
      the IPIs can easily reset things, thus preventing the other CPUs from
      sending redundant IPIs.
      
      Note also that the n_rcu_pending counter remains, as it will continue to
      be used for tracing.  It may also see use to update the jiffies counter,
      should an appropriate kick-the-jiffies-counter API appear.
      Located-by: default avatarAnton Blanchard <anton@au1.ibm.com>
      Tested-by: default avatarAnton Blanchard <anton@au1.ibm.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
      Cc: anton@samba.org
      Cc: akpm@linux-foundation.org
      Cc: dipankar@in.ibm.com
      Cc: manfred@colorfullife.com
      Cc: cl@linux-foundation.org
      Cc: josht@linux.vnet.ibm.com
      Cc: schamp@sgi.com
      Cc: niv@us.ibm.com
      Cc: dvhltc@us.ibm.com
      Cc: ego@in.ibm.com
      Cc: laijs@cn.fujitsu.com
      Cc: rostedt@goodmis.org
      Cc: peterz@infradead.org
      Cc: penberg@cs.helsinki.fi
      Cc: andi@firstfloor.org
      Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
      LKML-Reference: <12396834793575-git-send-email->
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      ef631b0c
    • Ingo Molnar's avatar
      lockdep: warn about lockdep disabling after kernel taint, fix · 27b19565
      Ingo Molnar authored
      Impact: build fix for Sparc and s390
      
      Stephen Rothwell reported that the Sparc build broke:
      
       In file included from kernel/panic.c:12:
       include/linux/debug_locks.h: In function '__debug_locks_off':
       include/linux/debug_locks.h:15: error: implicit declaration of function 'xchg'
      
      due to:
      
       9eeba613: lockdep: warn about lockdep disabling after kernel taint
      
      There is some inconsistency between architectures about where exactly
      xchg() is defined.
      
      The traditional place is in system.h but the more logical point for it
      is in atomic.h - where most architectures (especially new ones) have
      it defined. These architecture also still offer it via system.h.
      
      Some, such as Sparc or s390 only have it in asm/system.h and not available
      via asm/atomic.h at all.
      
      Use the widest set of headers in debug_locks.h and also include asm/system.h.
      Reported-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      LKML-Reference: <20090414144317.026498df.sfr@canb.auug.org.au>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      27b19565
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of... · b21597d0
      Linus Torvalds authored
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6
      
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6:
        tomoyo: version bump to 2.2.0.
        tomoyo: add Documentation/tomoyo.txt
      b21597d0
    • Linus Torvalds's avatar
      Fix quilt merge error in acpi-cpufreq.c · 1c98aa74
      Linus Torvalds authored
      We ended up incorrectly using '&cur' instead of '&readin' in the
      work_on_cpu() -> smp_call_function_single() transformation in commit
      01599fca ("cpufreq: use
      smp_call_function_[single|many]() in acpi-cpufreq.c").
      
      Andrew explains:
       "OK, the acpi tree went and had conflicting changes merged into it after
        I'd written the patch and it appears that I incorrectly reverted part
        of 18b2646f while fixing the resulting
        rejects.
      
        Switching it to `readin' looks correct."
      Acked-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      1c98aa74
  2. 13 Apr, 2009 36 commits