]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge branches 'bigrt.2012.09.20b', 'doctorture.2012.09.18a', 'fixes.2012.09.20a...
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 20 Sep 2012 22:03:06 +0000 (15:03 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 20 Sep 2012 22:03:06 +0000 (15:03 -0700)
bigrt.2012.09.17c contains additional commits to reduce scheduling
latency from RCU on huge systems (many hundrends or thousands
of CPUs).

doctorture.2012.09.18a contains documentation changes and rcutorture fixes.

fixes.2012.09.17a contains miscellaneous fixes.

hotplug.2012.09.17a contains CPU-hotplug-related changes.

idle.2012.09.18b contains additional RCU changes in support of Frederic's
adaptive dynticks and also fixes architectures for which RCU no
longer considered the idle loop to be a quiescent state due to
earlier adaptive-dynticks changes.  Affected architectures are
alpha, cris, frv, h8300, m32r, m68k, mn10300, parisc, score,
xtensa, and ia64.

1  2  3  4  5 
include/linux/rcupdate.h
kernel/rcutree.c
kernel/rcutree.h
kernel/rcutree_plugin.h
kernel/rcutree_trace.c
kernel/sched/core.c

Simple merge
index 52b24c052474ca5ac579e8b45742ced9e35063a9,f280e542e3e9f531df83b03d1e1fce6cf8ebaaa2,e705bf217f9910206b827f360c56b89d3d7beaa0,5f8c4dd45ed917152484888b3c1c422a2ec78e2a,79ea65fafb6aa3b79bb61727a92fa2941fb52e93..6c94351f87cc8294968995621666dfc0764f76b0
@@@@@@ -320,37 -316,37 -316,8 -316,37 -319,37 +323,8 @@@@@@ static struct rcu_node *rcu_get_root(st
        return &rsp->node[0];
     }
     
    -/*
    - * If the specified CPU is offline, tell the caller that it is in
    - * a quiescent state.  Otherwise, whack it with a reschedule IPI.
    - * Grace periods can end up waiting on an offline CPU when that
    - * CPU is in the process of coming online -- it will be added to the
    - * rcu_node bitmasks before it actually makes it online.  The same thing
    - * can happen while a CPU is in the process of coming online.  Because this
    - * race is quite rare, we check for it after detecting that the grace
    - * period has been delayed rather than checking each and every CPU
    - * each and every time we start a new grace period.
    - */
    -static int rcu_implicit_offline_qs(struct rcu_data *rdp)
    -{
    -   /*
    -    * If the CPU is offline for more than a jiffy, it is in a quiescent
    -    * state.  We can trust its state not to change because interrupts
    -    * are disabled.  The reason for the jiffy's worth of slack is to
    -    * handle CPUs initializing on the way up and finding their way
    -    * to the idle loop on the way down.
    -    */
    -   if (cpu_is_offline(rdp->cpu) &&
    -       ULONG_CMP_LT(rdp->rsp->gp_start + 2, jiffies)) {
    -           trace_rcu_fqs(rdp->rsp->name, rdp->gpnum, rdp->cpu, "ofl");
    -           rdp->offline_fqs++;
    -           return 1;
    -   }
    -   return 0;
    -}
    -
     /*
-- -  * If the specified CPU is offline, tell the caller that it is in
-- -  * a quiescent state.  Otherwise, whack it with a reschedule IPI.
-- -  * Grace periods can end up waiting on an offline CPU when that
-- -  * CPU is in the process of coming online -- it will be added to the
-- -  * rcu_node bitmasks before it actually makes it online.  The same thing
-- -  * can happen while a CPU is in the process of coming online.  Because this
-- -  * race is quite rare, we check for it after detecting that the grace
-- -  * period has been delayed rather than checking each and every CPU
-- -  * each and every time we start a new grace period.
-- -  */
-- - static int rcu_implicit_offline_qs(struct rcu_data *rdp)
-- - {
-- -    /*
-- -     * If the CPU is offline for more than a jiffy, it is in a quiescent
-- -     * state.  We can trust its state not to change because interrupts
-- -     * are disabled.  The reason for the jiffy's worth of slack is to
-- -     * handle CPUs initializing on the way up and finding their way
-- -     * to the idle loop on the way down.
-- -     */
-- -    if (cpu_is_offline(rdp->cpu) &&
-- -        ULONG_CMP_LT(rdp->rsp->gp_start + 2, jiffies)) {
-- -            trace_rcu_fqs(rdp->rsp->name, rdp->gpnum, rdp->cpu, "ofl");
-- -            rdp->offline_fqs++;
-- -            return 1;
-- -    }
-- -    return 0;
-- - }
-- - 
-- - /*
----  * rcu_idle_enter_common - inform RCU that current CPU is moving towards idle
++++  * rcu_eqs_enter_common - current CPU is moving towards extended quiescent state
      *
      * If the new value of the ->dynticks_nesting counter now is zero,
      * we really have entered idle, and must do the appropriate accounting.
@@@@@@ -448,12 -444,12 -415,13 -444,12 -505,12 +480,13 @@@@@@ void rcu_irq_exit(void
        if (rdtp->dynticks_nesting)
                trace_rcu_dyntick("--=", oldval, rdtp->dynticks_nesting);
        else
----            rcu_idle_enter_common(rdtp, oldval);
++++            rcu_eqs_enter_common(rdtp, oldval, true);
        local_irq_restore(flags);
     }
++ ++EXPORT_SYMBOL_GPL(rcu_irq_exit);
     
     /*
----  * rcu_idle_exit_common - inform RCU that current CPU is moving away from idle
++++  * rcu_eqs_exit_common - current CPU moving away from extended quiescent state
      *
      * If the new value of the ->dynticks_nesting counter was previously zero,
      * we really have exited idle, and must do the appropriate accounting.
@@@@@@ -543,9 -539,9 -511,10 -539,9 -655,9 +631,10 @@@@@@ void rcu_irq_enter(void
        if (oldval)
                trace_rcu_dyntick("++=", oldval, rdtp->dynticks_nesting);
        else
----            rcu_idle_exit_common(rdtp, oldval);
++++            rcu_eqs_exit_common(rdtp, oldval, true);
        local_irq_restore(flags);
     }
++ ++EXPORT_SYMBOL_GPL(rcu_irq_enter);
     
     /**
      * rcu_nmi_enter - inform RCU of entry to NMI context
Simple merge
Simple merge
Simple merge
Simple merge