lkml.org 
[lkml]   [2021]   [Feb]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 7/7 v2] sched/fair: reduce the window for duplicated update
    Date
    Start to update last_blocked_load_update_tick to reduce the possibility
    of another cpu starting the update one more time

    Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>
    ---
    kernel/sched/fair.c | 11 ++++++++---
    1 file changed, 8 insertions(+), 3 deletions(-)

    diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
    index d11a632ea276..df127b64edf6 100644
    --- a/kernel/sched/fair.c
    +++ b/kernel/sched/fair.c
    @@ -7852,16 +7852,20 @@ static inline bool others_have_blocked(struct rq *rq)
    return false;
    }

    -static inline void update_blocked_load_status(struct rq *rq, bool has_blocked)
    +static inline void update_blocked_load_tick(struct rq *rq)
    {
    - rq->last_blocked_load_update_tick = jiffies;
    + WRITE_ONCE(rq->last_blocked_load_update_tick, jiffies);
    +}

    +static inline void update_blocked_load_status(struct rq *rq, bool has_blocked)
    +{
    if (!has_blocked)
    rq->has_blocked_load = 0;
    }
    #else
    static inline bool cfs_rq_has_blocked(struct cfs_rq *cfs_rq) { return false; }
    static inline bool others_have_blocked(struct rq *rq) { return false; }
    +static inline void update_blocked_load_tick(struct rq *rq) {}
    static inline void update_blocked_load_status(struct rq *rq, bool has_blocked) {}
    #endif

    @@ -8022,6 +8026,7 @@ static void update_blocked_averages(int cpu)
    struct rq_flags rf;

    rq_lock_irqsave(rq, &rf);
    + update_blocked_load_tick(rq);
    update_rq_clock(rq);

    decayed |= __update_blocked_others(rq, &done);
    @@ -8363,7 +8368,7 @@ static bool update_nohz_stats(struct rq *rq)
    if (!cpumask_test_cpu(cpu, nohz.idle_cpus_mask))
    return false;

    - if (!time_after(jiffies, rq->last_blocked_load_update_tick))
    + if (!time_after(jiffies, READ_ONCE(rq->last_blocked_load_update_tick)))
    return true;

    update_blocked_averages(cpu);
    --
    2.17.1
    \
     
     \ /
      Last update: 2021-02-12 14:35    [W:3.686 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site