1. 22 2月, 2012 15 次提交
  2. 12 12月, 2011 19 次提交
  3. 31 10月, 2011 1 次提交
  4. 29 9月, 2011 5 次提交
    • P
      rcu: Move propagation of ->completed from rcu_start_gp() to rcu_report_qs_rsp() · afe24b12
      Paul E. McKenney 提交于
      It is possible for the CPU that noted the end of the prior grace period
      to not need a new one, and therefore to decide to propagate ->completed
      throughout the rcu_node tree without starting another grace period.
      However, in so doing, it releases the root rcu_node structure's lock,
      which can allow some other CPU to start another grace period.  The first
      CPU will be propagating ->completed in parallel with the second CPU
      initializing the rcu_node tree for the new grace period.  In theory
      this is harmless, but in practice we need to keep things simple.
      
      This commit therefore moves the propagation of ->completed to
      rcu_report_qs_rsp(), and refrains from marking the old grace period
      as having been completed until it has finished doing this.  This
      prevents anyone from starting a new grace period concurrently with
      marking the old grace period as having been completed.
      
      Of course, the optimization where a CPU needing a new grace period
      doesn't bother marking the old one completed is still in effect:
      In that case, the marking happens implicitly as part of initializing
      the new grace period.
      Signed-off-by: NPaul E. McKenney <paulmck@linux.vnet.ibm.com>
      afe24b12
    • P
      rcu: Remove rcu_needs_cpu_flush() to avoid false quiescent states · e90c53d3
      Paul E. McKenney 提交于
      The purpose of rcu_needs_cpu_flush() was to iterate on pushing the
      current grace period in order to help the current CPU enter dyntick-idle
      mode.  However, this can result in failures if the CPU starts entering
      dyntick-idle mode, but then backs out.  In this case, the call to
      rcu_pending() from rcu_needs_cpu_flush() might end up announcing a
      non-existing quiescent state.
      
      This commit therefore removes rcu_needs_cpu_flush() in favor of letting
      the dyntick-idle machinery at the end of the softirq handler push the
      loop along via its call to rcu_pending().
      Signed-off-by: NPaul E. McKenney <paulmck@linux.vnet.ibm.com>
      e90c53d3
    • M
      rcu: Wire up RCU_BOOST_PRIO for rcutree · 5b61b0ba
      Mike Galbraith 提交于
      RCU boost threads start life at RCU_BOOST_PRIO, while others remain
      at RCU_KTHREAD_PRIO.  While here, change thread names to match other
      kthreads, and adjust rcu_yield() to not override the priority set by
      the user.  This last change sets the stage for runtime changes to
      priority in the -rt tree.
      Signed-off-by: NMike Galbraith <efault@gmx.de>
      Signed-off-by: NPaul E. McKenney <paulmck@linux.vnet.ibm.com>
      5b61b0ba
    • P
      rcu: Avoid having just-onlined CPU resched itself when RCU is idle · 06ae115a
      Paul E. McKenney 提交于
      CPUs set rdp->qs_pending when coming online to resolve races with
      grace-period start.  However, this means that if RCU is idle, the
      just-onlined CPU might needlessly send itself resched IPIs.  Adjust
      the online-CPU initialization to avoid this, and also to correctly
      cause the CPU to respond to the current grace period if needed.
      Signed-off-by: NPaul E. McKenney <paulmck@linux.vnet.ibm.com>
      Tested-by: NJosh Boyer <jwboyer@redhat.com>
      Tested-by: NChristian Hoffmann <email@christianhoffmann.info>
      06ae115a
    • P
      rcu: Suppress NMI backtraces when stall ends before dump · 9bc8b558
      Paul E. McKenney 提交于
      It is possible for an RCU CPU stall to end just as it is detected, in
      which case the current code will uselessly dump all CPU's stacks.
      This commit therefore checks for this condition and refrains from
      sending needless NMIs.
      
      And yes, the stall might also end just after we checked all CPUs and
      tasks, but in that case we would at least have given some clue as
      to which CPU/task was at fault.
      Signed-off-by: NPaul E. McKenney <paulmck@linux.vnet.ibm.com>
      9bc8b558