lkml.org 
[lkml]   [2019]   [May]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [RFC PATCH v3 10/16] sched: Core-wide rq->lock
    On Wed, May 29, 2019 at 08:36:46PM +0000, Vineeth Remanan Pillai wrote:

    > + * The static-key + stop-machine variable are needed such that:
    > + *
    > + * spin_lock(rq_lockp(rq));
    > + * ...
    > + * spin_unlock(rq_lockp(rq));
    > + *
    > + * ends up locking and unlocking the _same_ lock, and all CPUs
    > + * always agree on what rq has what lock.

    > @@ -5790,8 +5854,15 @@ int sched_cpu_activate(unsigned int cpu)
    > /*
    > * When going up, increment the number of cores with SMT present.
    > */
    > - if (cpumask_weight(cpu_smt_mask(cpu)) == 2)
    > + if (cpumask_weight(cpu_smt_mask(cpu)) == 2) {
    > static_branch_inc_cpuslocked(&sched_smt_present);
    > +#ifdef CONFIG_SCHED_CORE
    > + if (static_branch_unlikely(&__sched_core_enabled)) {
    > + rq->core_enabled = true;
    > + }
    > +#endif
    > + }
    > +
    > #endif
    > set_cpu_active(cpu, true);
    >
    > @@ -5839,8 +5910,16 @@ int sched_cpu_deactivate(unsigned int cpu)
    > /*
    > * When going down, decrement the number of cores with SMT present.
    > */
    > - if (cpumask_weight(cpu_smt_mask(cpu)) == 2)
    > + if (cpumask_weight(cpu_smt_mask(cpu)) == 2) {
    > +#ifdef CONFIG_SCHED_CORE
    > + struct rq *rq = cpu_rq(cpu);
    > + if (static_branch_unlikely(&__sched_core_enabled)) {
    > + rq->core_enabled = false;
    > + }
    > +#endif
    > static_branch_dec_cpuslocked(&sched_smt_present);
    > +
    > + }
    > #endif

    I'm confused, how doesn't this break the invariant above?

    That is, all CPUs must at all times agree on the value of rq_lockp(),
    and I'm not seeing how that is true with the above changes.

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