Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Commits on Jul 22, 2011
  1. @torvalds

    Linux 3.0

    torvalds authored
  2. @torvalds

    Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel…

    torvalds authored
    …/git/jwessel/linux-2.6-kgdb
    
    * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/linux-2.6-kgdb:
      sparc,kgdbts: fix compile regression with kgdb test suite
Commits on Jul 21, 2011
  1. @jwessel

    sparc,kgdbts: fix compile regression with kgdb test suite

    jwessel authored
    Commit 63ab25e (kgdbts: unify/generalize gdb breakpoint adjustment)
    introduced a compile regression on sparc.
    
    kgdbts.c: In function 'check_and_rewind_pc':
    kgdbts.c:307: error: implicit declaration of function 'instruction_pointer_set'
    
    Simply add the correct macro definition for instruction pointer on the
    Sparc architecture.
    
    Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
    Acked-by: Mike Frysinger <vapier@gentoo.org>
    Acked-by: David S. Miller <davem@davemloft.net>
  2. @torvalds

    Merge git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6

    torvalds authored
    * git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6:
      CIFS: Fix wrong length in cifs_iovec_read
  3. @torvalds

    Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/l…

    torvalds authored
    …inux/kernel/git/tip/linux-2.6-tip
    
    * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
      x86: Make Dell Latitude E6420 use reboot=pci
      x86: Make Dell Latitude E5420 use reboot=pci
  4. x86: Make Dell Latitude E6420 use reboot=pci

    H. Peter Anvin authored
    Yet another variant of the Dell Latitude series which requires
    reboot=pci.
    
    From the E5420 bug report by Daniel J Blueman:
    
    > The E6420 is affected also (same platform, different casing and
    > features), which provides an external confirmation of the issue; I can
    > submit a patch for that later or include it if you prefer:
    > http://linux.koolsolutions.com/2009/08/04/howto-fix-linux-hangfreeze-during-reboots-and-restarts/
    
    Reported-by: Daniel J Blueman <daniel.blueman@gmail.com>
    Signed-off-by: H. Peter Anvin <hpa@zytor.com>
    Cc: <stable@kernel.org>
  5. x86: Make Dell Latitude E5420 use reboot=pci

    Daniel J Blueman authored H. Peter Anvin committed
    Rebooting on the Dell E5420 often hangs with the keyboard or ACPI
    methods, but is reliable via the PCI method.
    
    [ hpa: this was deferred because we believed for a long time that the
      recent reshuffling of the boot priorities in commit
      660e34c fixed this platform.
      Unfortunately that turned out to be incorrect. ]
    
    Signed-off-by: Daniel J Blueman <daniel.blueman@gmail.com>
    Link: http://lkml.kernel.org/r/1305248699-2347-1-git-send-email-daniel.blueman@gmail.com
    Signed-off-by: H. Peter Anvin <hpa@zytor.com>
    Cc: <stable@kernel.org>
  6. @torvalds

    Merge branch 'drm-intel-fixes' of git://git.kernel.org/pub/scm/linux/…

    torvalds authored
    …kernel/git/keithp/linux-2.6
    
    * 'drm-intel-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/keithp/linux-2.6:
      drm/i915: Fix unfenced alignment on pre-G33 hardware
      drm/i915: Add quirk to disable SSC on Lenovo U160 LVDS
  7. @torvalds

    vfs: drop conditional inode prefetch in __do_lookup_rcu

    torvalds authored
    It seems to hurt performance in real life.  Yes, the inode will be used
    later, but the conditional doesn't seem to predict all that well
    (negative dentries are not uncommon) and it looks like the cost of
    prefetching is simply higher than depending on the cache doing the right
    thing.
    
    As usual.
    
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  8. @torvalds

    FS-Cache: Fix __fscache_uncache_all_inode_pages()'s outer loop

    Jan Beulich authored torvalds committed
    The compiler, at least for ix86 and m68k, validly warns that the
    comparison:
    
    	next <= (loff_t)-1
    
    is always true (and it's always true also for x86-64 and probably all
    other arches - as long as pgoff_t isn't wider than loff_t).  The
    intention appears to be to avoid wrapping of "next", so rather than
    eliminating the pointless comparison, fix the loop to indeed get exited
    when "next" would otherwise wrap.
    
    On m68k the following warning is observed:
    
      fs/fscache/page.c: In function '__fscache_uncache_all_inode_pages':
      fs/fscache/page.c:979: warning: comparison is always false due to limited range of data type
    
    Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Reported-by: Jan Beulich <jbeulich@novell.com>
    Signed-off-by: Jan Beulich <jbeulich@novell.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Cc: Suresh Jayaraman <sjayaraman@suse.de>
    Cc: Geert Uytterhoeven <geert@linux-m68k.org>
    Cc: stable@kernel.org
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  9. @piastry

    CIFS: Fix wrong length in cifs_iovec_read

    piastry authored Steve French committed
    Signed-off-by: Pavel Shilovsky <piastryyy@gmail.com>
    Reviewed-by: Jeff Layton <jlayton@redhat.com>
    Signed-off-by: Steve French <sfrench@us.ibm.com>
Commits on Jul 20, 2011
  1. @torvalds

    Merge branch 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/…

    torvalds authored
    …linux/kernel/git/tip/linux-2.6-tip
    
    * 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
      signal: align __lock_task_sighand() irq disabling and RCU
      softirq,rcu: Inform RCU of irq_exit() activity
      sched: Add irq_{enter,exit}() to scheduler_ipi()
      rcu: protect __rcu_read_unlock() against scheduler-using irq handlers
      rcu: Streamline code produced by __rcu_read_unlock()
      rcu: Fix RCU_BOOST race handling current->rcu_read_unlock_special
      rcu: decrease rcu_report_exp_rnp coupling with scheduler
  2. @torvalds

    Merge branch 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm…

    torvalds authored
    …/linux/kernel/git/tip/linux-2.6-tip
    
    * 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
      sched: Avoid creating superfluous NUMA domains on non-NUMA systems
      sched: Allow for overlapping sched_domain spans
      sched: Break out cpu_power from the sched_group structure
  3. @torvalds

    Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/l…

    torvalds authored
    …inux/kernel/git/tip/linux-2.6-tip
    
    * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
      x86. reboot: Make Dell Latitude E6320 use reboot=pci
      x86, doc only: Correct real-mode kernel header offset for init_size
      x86: Disable AMD_NUMA for 32bit for now
  4. Merge branch 'rcu/urgent' of git://git.kernel.org/pub/scm/linux/kerne…

    Ingo Molnar authored
    …l/git/paulmck/linux-2.6-rcu into core/urgent
  5. @paulmck

    signal: align __lock_task_sighand() irq disabling and RCU

    Paul E. McKenney authored paulmck committed
    The __lock_task_sighand() function calls rcu_read_lock() with interrupts
    and preemption enabled, but later calls rcu_read_unlock() with interrupts
    disabled.  It is therefore possible that this RCU read-side critical
    section will be preempted and later RCU priority boosted, which means that
    rcu_read_unlock() will call rt_mutex_unlock() in order to deboost itself, but
    with interrupts disabled. This results in lockdep splats, so this commit
    nests the RCU read-side critical section within the interrupt-disabled
    region of code.  This prevents the RCU read-side critical section from
    being preempted, and thus prevents the attempt to deboost with interrupts
    disabled.
    
    It is quite possible that a better long-term fix is to make rt_mutex_unlock()
    disable irqs when acquiring the rt_mutex structure's ->wait_lock.
    
    Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
  6. @paulmck

    softirq,rcu: Inform RCU of irq_exit() activity

    Peter Zijlstra authored paulmck committed
    The rcu_read_unlock_special() function relies on in_irq() to exclude
    scheduler activity from interrupt level.  This fails because exit_irq()
    can invoke the scheduler after clearing the preempt_count() bits that
    in_irq() uses to determine that it is at interrupt level.  This situation
    can result in failures as follows:
    
     $task			IRQ		SoftIRQ
    
     rcu_read_lock()
    
     /* do stuff */
    
     <preempt> |= UNLOCK_BLOCKED
    
     rcu_read_unlock()
       --t->rcu_read_lock_nesting
    
    			irq_enter();
    			/* do stuff, don't use RCU */
    			irq_exit();
    			  sub_preempt_count(IRQ_EXIT_OFFSET);
    			  invoke_softirq()
    
    					ttwu();
    					  spin_lock_irq(&pi->lock)
    					  rcu_read_lock();
    					  /* do stuff */
    					  rcu_read_unlock();
    					    rcu_read_unlock_special()
    					      rcu_report_exp_rnp()
    					        ttwu()
    					          spin_lock_irq(&pi->lock) /* deadlock */
    
       rcu_read_unlock_special(t);
    
    Ed can simply trigger this 'easy' because invoke_softirq() immediately
    does a ttwu() of ksoftirqd/# instead of doing the in-place softirq stuff
    first, but even without that the above happens.
    
    Cure this by also excluding softirqs from the
    rcu_read_unlock_special() handler and ensuring the force_irqthreads
    ksoftirqd/# wakeup is done from full softirq context.
    
    [ Alternatively, delaying the ->rcu_read_lock_nesting decrement
      until after the special handling would make the thing more robust
      in the face of interrupts as well.  And there is a separate patch
      for that. ]
    
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Reported-and-tested-by: Ed Tomlinson <edt@aei.ca>
    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
  7. @paulmck

    sched: Add irq_{enter,exit}() to scheduler_ipi()

    Peter Zijlstra authored paulmck committed
    Ensure scheduler_ipi() calls irq_{enter,exit} when it does some actual
    work. Traditionally we never did any actual work from the resched IPI
    and all magic happened in the return from interrupt path.
    
    Now that we do do some work, we need to ensure irq_{enter,exit} are
    called so that we don't confuse things.
    
    This affects things like timekeeping, NO_HZ and RCU, basically
    everything with a hook in irq_enter/exit.
    
    Explicit examples of things going wrong are:
    
      sched_clock_cpu() -- has a callback when leaving NO_HZ state to take
                        a new reading from GTOD and TSC. Without this
                        callback, time is stuck in the past.
    
      RCU -- needs in_irq() to work in order to avoid some nasty deadlocks
    
    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
  8. @paulmck

    rcu: protect __rcu_read_unlock() against scheduler-using irq handlers

    Paul E. McKenney authored paulmck committed
    The addition of RCU read-side critical sections within runqueue and
    priority-inheritance lock critical sections introduced some deadlock
    cycles, for example, involving interrupts from __rcu_read_unlock()
    where the interrupt handlers call wake_up().  This situation can cause
    the instance of __rcu_read_unlock() invoked from interrupt to do some
    of the processing that would otherwise have been carried out by the
    task-level instance of __rcu_read_unlock().  When the interrupt-level
    instance of __rcu_read_unlock() is called with a scheduler lock held
    from interrupt-entry/exit situations where in_irq() returns false,
    deadlock can result.
    
    This commit resolves these deadlocks by using negative values of
    the per-task ->rcu_read_lock_nesting counter to indicate that an
    instance of __rcu_read_unlock() is in flight, which in turn prevents
    instances from interrupt handlers from doing any special processing.
    This patch is inspired by Steven Rostedt's earlier patch that similarly
    made __rcu_read_unlock() guard against interrupt-mediated recursion
    (see https://lkml.org/lkml/2011/7/15/326), but this commit refines
    Steven's approach to avoid the need for preemption disabling on the
    __rcu_read_unlock() fastpath and to also avoid the need for manipulating
    a separate per-CPU variable.
    
    This patch avoids need for preempt_disable() by instead using negative
    values of the per-task ->rcu_read_lock_nesting counter.  Note that nested
    rcu_read_lock()/rcu_read_unlock() pairs are still permitted, but they will
    never see ->rcu_read_lock_nesting go to zero, and will therefore never
    invoke rcu_read_unlock_special(), thus preventing them from seeing the
    RCU_READ_UNLOCK_BLOCKED bit should it be set in ->rcu_read_unlock_special.
    This patch also adds a check for ->rcu_read_unlock_special being negative
    in rcu_check_callbacks(), thus preventing the RCU_READ_UNLOCK_NEED_QS
    bit from being set should a scheduling-clock interrupt occur while
    __rcu_read_unlock() is exiting from an outermost RCU read-side critical
    section.
    
    Of course, __rcu_read_unlock() can be preempted during the time that
    ->rcu_read_lock_nesting is negative.  This could result in the setting
    of the RCU_READ_UNLOCK_BLOCKED bit after __rcu_read_unlock() checks it,
    and would also result it this task being queued on the corresponding
    rcu_node structure's blkd_tasks list.  Therefore, some later RCU read-side
    critical section would enter rcu_read_unlock_special() to clean up --
    which could result in deadlock if that critical section happened to be in
    the scheduler where the runqueue or priority-inheritance locks were held.
    
    This situation is dealt with by making rcu_preempt_note_context_switch()
    check for negative ->rcu_read_lock_nesting, thus refraining from
    queuing the task (and from setting RCU_READ_UNLOCK_BLOCKED) if we are
    already exiting from the outermost RCU read-side critical section (in
    other words, we really are no longer actually in that RCU read-side
    critical section).  In addition, rcu_preempt_note_context_switch()
    invokes rcu_read_unlock_special() to carry out the cleanup in this case,
    which clears out the ->rcu_read_unlock_special bits and dequeues the task
    (if necessary), in turn avoiding needless delay of the current RCU grace
    period and needless RCU priority boosting.
    
    It is still illegal to call rcu_read_unlock() while holding a scheduler
    lock if the prior RCU read-side critical section has ever had either
    preemption or irqs enabled.  However, the common use case is legal,
    namely where then entire RCU read-side critical section executes with
    irqs disabled, for example, when the scheduler lock is held across the
    entire lifetime of the RCU read-side critical section.
    
    Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
  9. sched: Avoid creating superfluous NUMA domains on non-NUMA systems

    Peter Zijlstra authored Ingo Molnar committed
    When creating sched_domains, stop when we've covered the entire
    target span instead of continuing to create domains, only to
    later find they're redundant and throw them away again.
    
    This avoids single node systems from touching funny NUMA
    sched_domain creation code and reduces the risks of the new
    SD_OVERLAP code.
    
    Requested-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Anton Blanchard <anton@samba.org>
    Cc: mahesh@linux.vnet.ibm.com
    Cc: benh@kernel.crashing.org
    Cc: linuxppc-dev@lists.ozlabs.org
    Link: http://lkml.kernel.org/r/1311180177.29152.57.camel@twins
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
  10. sched: Allow for overlapping sched_domain spans

    Peter Zijlstra authored Ingo Molnar committed
    Allow for sched_domain spans that overlap by giving such domains their
    own sched_group list instead of sharing the sched_groups amongst
    each-other.
    
    This is needed for machines with more than 16 nodes, because
    sched_domain_node_span() will generate a node mask from the
    16 nearest nodes without regard if these masks have any overlap.
    
    Currently sched_domains have a sched_group that maps to their child
    sched_domain span, and since there is no overlap we share the
    sched_group between the sched_domains of the various CPUs. If however
    there is overlap, we would need to link the sched_group list in
    different ways for each cpu, and hence sharing isn't possible.
    
    In order to solve this, allocate private sched_groups for each CPU's
    sched_domain but have the sched_groups share a sched_group_power
    structure such that we can uniquely track the power.
    
    Reported-and-tested-by: Anton Blanchard <anton@samba.org>
    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Link: http://lkml.kernel.org/n/tip-08bxqw9wis3qti9u5inifh3y@git.kernel.org
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
  11. sched: Break out cpu_power from the sched_group structure

    Peter Zijlstra authored Ingo Molnar committed
    In order to prepare for non-unique sched_groups per domain, we need to
    carry the cpu_power elsewhere, so put a level of indirection in.
    
    Reported-and-tested-by: Anton Blanchard <anton@samba.org>
    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Link: http://lkml.kernel.org/n/tip-qkho2byuhe4482fuknss40ad@git.kernel.org
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
  12. @torvalds

    Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel…

    torvalds authored
    …/git/sage/ceph-client
    
    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:
      ceph: fix file mode calculation
  13. @torvalds

    Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git…

    torvalds authored
    …/arm/linux-arm-soc
    
    * 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/linux-arm-soc:
      davinci: DM365 EVM: fix video input mux bits
      ARM: davinci: Check for NULL return from irq_alloc_generic_chip
      arm: davinci: Fix low level gpio irq handlers' argument
  14. @torvalds

    vmscan: fix a livelock in kswapd

    Shaohua Li authored torvalds committed
    I'm running a workload which triggers a lot of swap in a machine with 4
    nodes.  After I kill the workload, I found a kswapd livelock.  Sometimes
    kswapd3 or kswapd2 are keeping running and I can't access filesystem,
    but most memory is free.
    
    This looks like a regression since commit 08951e5 ("mm: vmscan:
    correct check for kswapd sleeping in sleeping_prematurely").
    
    Node 2 and 3 have only ZONE_NORMAL, but balance_pgdat() will return 0
    for classzone_idx.  The reason is end_zone in balance_pgdat() is 0 by
    default, if all zones have watermark ok, end_zone will keep 0.
    
    Later sleeping_prematurely() always returns true.  Because this is an
    order 3 wakeup, and if classzone_idx is 0, both balanced_pages and
    present_pages in pgdat_balanced() are 0.  We add a special case here.
    If a zone has no page, we think it's balanced.  This fixes the livelock.
    
    Signed-off-by: Shaohua Li <shaohua.li@intel.com>
    Acked-by: Mel Gorman <mgorman@suse.de>
    Cc: Minchan Kim <minchan.kim@gmail.com>
    Cc: <stable@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  15. @mita @torvalds

    fs/libfs.c: fix simple_attr_write() on 32bit machines

    mita authored torvalds committed
    Assume that /sys/kernel/debug/dummy64 is debugfs file created by
    debugfs_create_x64().
    
    	# cd /sys/kernel/debug
    	# echo 0x1234567812345678 > dummy64
    	# cat dummy64
    	0x0000000012345678
    
    	# echo 0x80000000 > dummy64
    	# cat dummy64
    	0xffffffff80000000
    
    A value larger than INT_MAX cannot be written to the debugfs file created
    by debugfs_create_u64 or debugfs_create_x64 on 32bit machine.  Because
    simple_attr_write() uses simple_strtol() for the conversion.
    
    To fix this, use simple_strtoll() instead.
    
    Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
    Cc: Greg Kroah-Hartman <gregkh@suse.de>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  16. @torvalds

    Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel…

    torvalds authored
    …/git/viro/vfs-2.6
    
    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:
      vfs: fix race in rcu lookup of pruned dentry
      Fix cifs_get_root()
    
    [ Edited the last commit to get rid of a 'unused variable "seq"'
      warning due to Al editing the patch.  - Linus ]
  17. @torvalds

    vfs: fix race in rcu lookup of pruned dentry

    torvalds authored
    Don't update *inode in __follow_mount_rcu() until we'd verified that
    there is mountpoint there.  Kudos to Hugh Dickins for catching that
    one in the first place and eventually figuring out the solution (and
    catching a braino in the earlier version of patch).
    
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
  18. @paulmck

    rcu: Streamline code produced by __rcu_read_unlock()

    paulmck authored
    Given some common flag combinations, particularly -Os, gcc will inline
    rcu_read_unlock_special() despite its being in an unlikely() clause.
    Use noinline to prohibit this misoptimization.
    
    In addition, move the second barrier() in __rcu_read_unlock() so that
    it is not on the common-case code path.  This will allow the compiler to
    generate better code for the common-case path through __rcu_read_unlock().
    
    Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  19. @paulmck

    rcu: Fix RCU_BOOST race handling current->rcu_read_unlock_special

    Paul E. McKenney authored paulmck committed
    The RCU_BOOST commits for TREE_PREEMPT_RCU introduced an other-task
    write to a new RCU_READ_UNLOCK_BOOSTED bit in the task_struct structure's
    ->rcu_read_unlock_special field, but, as noted by Steven Rostedt, without
    correctly synchronizing all accesses to ->rcu_read_unlock_special.
    This could result in bits in ->rcu_read_unlock_special being spuriously
    set and cleared due to conflicting accesses, which in turn could result
    in deadlocks between the rcu_node structure's ->lock and the scheduler's
    rq and pi locks.  These deadlocks would result from RCU incorrectly
    believing that the just-ended RCU read-side critical section had been
    preempted and/or boosted.  If that RCU read-side critical section was
    executed with either rq or pi locks held, RCU's ensuing (incorrect)
    calls to the scheduler would cause the scheduler to attempt to once
    again acquire the rq and pi locks, resulting in deadlock.  More complex
    deadlock cycles are also possible, involving multiple rq and pi locks
    as well as locks from multiple rcu_node structures.
    
    This commit fixes synchronization by creating ->rcu_boosted field in
    task_struct that is accessed and modified only when holding the ->lock
    in the rcu_node structure on which the task is queued (on that rcu_node
    structure's ->blkd_tasks list).  This results in tasks accessing only
    their own current->rcu_read_unlock_special fields, making unsynchronized
    access once again legal, and keeping the rcu_read_unlock() fastpath free
    of atomic instructions and memory barriers.
    
    The reason that the rcu_read_unlock() fastpath does not need to access
    the new current->rcu_boosted field is that this new field cannot
    be non-zero unless the RCU_READ_UNLOCK_BLOCKED bit is set in the
    current->rcu_read_unlock_special field.  Therefore, rcu_read_unlock()
    need only test current->rcu_read_unlock_special: if that is zero, then
    current->rcu_boosted must also be zero.
    
    This bug does not affect TINY_PREEMPT_RCU because this implementation
    of RCU accesses current->rcu_read_unlock_special with irqs disabled,
    thus preventing races on the !SMP systems that TINY_PREEMPT_RCU runs on.
    
    Maybe-reported-by: Dave Jones <davej@redhat.com>
    Maybe-reported-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Reported-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Reviewed-by: Steven Rostedt <rostedt@goodmis.org>
  20. @paulmck

    rcu: decrease rcu_report_exp_rnp coupling with scheduler

    paulmck authored
    PREEMPT_RCU read-side critical sections blocking an expedited grace
    period invoke rcu_report_exp_rnp().  When the last such critical section
    has completed, rcu_report_exp_rnp() invokes the scheduler to wake up the
    task that invoked synchronize_rcu_expedited() -- needlessly holding the
    root rcu_node structure's lock while doing so, thus needlessly providing
    a way for RCU and the scheduler to deadlock.
    
    This commit therefore releases the root rcu_node structure's lock before
    calling wake_up().
    
    Reported-by: Ed Tomlinson <edt@aei.ca>
    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Commits on Jul 19, 2011
  1. @liewegas

    ceph: fix file mode calculation

    liewegas authored
    open(2) must always include one of O_RDONLY, O_WRONLY, or O_RDWR.  No need
    for any O_APPEND special case.
    
    Passing O_WRONLY|O_RDWR is undefined according to the man page, but the
    Linux VFS interprets this as O_RDWR, so we'll do the same.
    
    This fixes open(2) with flags O_RDWR|O_APPEND, which was incorrectly being
    translated to readonly.
    
    Reported-by: Fyodor Ustinov <ufm@ufm.su>
    Signed-off-by: Sage Weil <sage@newdream.net>
  2. davinci: DM365 EVM: fix video input mux bits

    Jon Povey authored Sekhar Nori committed
    Video input mux settings for tvp7002 and imager inputs were swapped.
    Comment was correct.
    
    Tested on EVM with tvp7002 input.
    
    Signed-off-by: Jon Povey <jon.povey@racelogic.co.uk>
    Acked-by: Manjunath Hadli <manjunath.hadli@ti.com>
    Cc: stable@kernel.org
    Signed-off-by: Sekhar Nori <nsekhar@ti.com>
  3. @toddpoynor

    ARM: davinci: Check for NULL return from irq_alloc_generic_chip

    toddpoynor authored Sekhar Nori committed
    Avoid NULL dereference of irq_alloc_generic_chip return in low
    memory conditions.
    
    Signed-off-by: Todd Poynor <toddpoynor@google.com>
    Signed-off-by: Sekhar Nori <nsekhar@ti.com>
Commits on Jul 18, 2011
  1. @ickle @keith-packard

    drm/i915: Fix unfenced alignment on pre-G33 hardware

    ickle authored keith-packard committed
    Align unfenced buffers on older hardware to the power-of-two object
    size.  The docs suggest that it should be possible to align only to a
    power-of-two tile height, but using the already computed fence size is
    easier and always correct. We also have to make sure that we unbind
    misaligned buffers upon tiling changes.
    
    In order to prevent a repetition of this bug, we change the interface
    to the alignment computation routines to force the caller to provide
    the requested alignment and size of the GTT binding rather than assume
    the current values on the object.
    
    Reported-and-tested-by: Sitosfe Wheeler <sitsofe@yahoo.com>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=36326
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: stable@kernel.org
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: Keith Packard <keithp@keithp.com>
Something went wrong with that request. Please try again.