lkml.org 
[lkml]   [2016]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 11/15] sched/migration: Move CPU_ONLINE into scheduler state
    The alleged requirement that the migration notifier has a lower priority than
    perf is completely undocumented and there is no indication at all that this is
    true. perf does not even handle the CPU_ONLINE notification and perf really
    has nothing to do with migration.

    Move the CPU_ONLINE code into the sched_activate_cpu() state callback.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    ---
    kernel/sched/core.c | 33 ++++++++++++++++++++++-----------
    1 file changed, 22 insertions(+), 11 deletions(-)

    --- a/kernel/sched/core.c
    +++ b/kernel/sched/core.c
    @@ -5662,17 +5662,6 @@ migration_call(struct notifier_block *nf

    switch (action & ~CPU_TASKS_FROZEN) {

    - case CPU_ONLINE:
    - /* Update our root-domain */
    - raw_spin_lock_irqsave(&rq->lock, flags);
    - if (rq->rd) {
    - BUG_ON(!cpumask_test_cpu(cpu, rq->rd->span));
    -
    - set_rq_online(rq);
    - }
    - raw_spin_unlock_irqrestore(&rq->lock, flags);
    - break;
    -
    #ifdef CONFIG_HOTPLUG_CPU
    case CPU_DYING:
    sched_ttwu_pending();
    @@ -7323,12 +7312,34 @@ static int cpuset_cpu_inactive(unsigned

    int sched_cpu_activate(unsigned int cpu)
    {
    + struct rq *rq = cpu_rq(cpu);
    + unsigned long flags;
    +
    set_cpu_active(cpu, true);

    if (sched_smp_initialized) {
    sched_domains_numa_masks_set(cpu);
    cpuset_cpu_active();
    }
    +
    + /*
    + * Put the rq online, if not already. This happens:
    + *
    + * 1) In the early boot process, because we build the real domains
    + * after all cpus have been brought up.
    + *
    + * 2) At runtime, if cpuset_cpu_active() fails to rebuild the
    + * domains.
    + */
    + raw_spin_lock_irqsave(&rq->lock, flags);
    + if (rq->rd) {
    + BUG_ON(!cpumask_test_cpu(cpu, rq->rd->span));
    + set_rq_online(rq);
    + }
    + raw_spin_unlock_irqrestore(&rq->lock, flags);
    +
    + update_max_interval();
    +
    return 0;
    }


    \
     
     \ /
      Last update: 2016-03-10 13:41    [W:2.657 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site