1. 22 2月, 2012 17 次提交
  2. 12 12月, 2011 19 次提交
  3. 31 10月, 2011 1 次提交
  4. 29 9月, 2011 3 次提交
    • 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