lkml.org 
[lkml]   [2019]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2] sched/uclamp: Fix overzealous type replacement
    Date
    Some uclamp helpers had their return type changed from 'unsigned int' to
    'enum uclamp_id' by commit

    0413d7f33e60 ("sched/uclamp: Always use 'enum uclamp_id' for clamp_id values")

    but it happens that some do return a value in the [0, SCHED_CAPACITY_SCALE]
    range, which should really be unsigned int. The affected helpers are
    uclamp_none(), uclamp_rq_max_value() and uclamp_eff_value(). Fix those up.

    Note that this doesn't lead to any obj diff using a relatively recent
    aarch64 compiler (8.3-2019.03). The current code of e.g. uclamp_eff_value()
    properly returns an 11 bit value (bits_per(1024)) and doesn't seem to do
    anything funny. I'm still marking this as fixing the above commit to be on
    the safe side.

    Fixes: 0413d7f33e60 ("sched/uclamp: Always use 'enum uclamp_id' for clamp_id values")
    Reviewed-by: Qais Yousef <qais.yousef@arm.com>
    Signed-off-by: Valentin Schneider <valentin.schneider@arm.com>
    ---
    v2 changes:
    o Also fix uclamp_none() (Vincent)
    o Collect reviewed-by
    o Slightly reword changelog
    ---
    kernel/sched/core.c | 6 +++---
    kernel/sched/sched.h | 2 +-
    2 files changed, 4 insertions(+), 4 deletions(-)

    diff --git a/kernel/sched/core.c b/kernel/sched/core.c
    index 513a4794ff36..3ceff1c93ef1 100644
    --- a/kernel/sched/core.c
    +++ b/kernel/sched/core.c
    @@ -810,7 +810,7 @@ static inline unsigned int uclamp_bucket_base_value(unsigned int clamp_value)
    return UCLAMP_BUCKET_DELTA * uclamp_bucket_id(clamp_value);
    }

    -static inline enum uclamp_id uclamp_none(enum uclamp_id clamp_id)
    +static inline unsigned int uclamp_none(enum uclamp_id clamp_id)
    {
    if (clamp_id == UCLAMP_MIN)
    return 0;
    @@ -853,7 +853,7 @@ static inline void uclamp_idle_reset(struct rq *rq, enum uclamp_id clamp_id,
    }

    static inline
    -enum uclamp_id uclamp_rq_max_value(struct rq *rq, enum uclamp_id clamp_id,
    +unsigned int uclamp_rq_max_value(struct rq *rq, enum uclamp_id clamp_id,
    unsigned int clamp_value)
    {
    struct uclamp_bucket *bucket = rq->uclamp[clamp_id].bucket;
    @@ -918,7 +918,7 @@ uclamp_eff_get(struct task_struct *p, enum uclamp_id clamp_id)
    return uc_req;
    }

    -enum uclamp_id uclamp_eff_value(struct task_struct *p, enum uclamp_id clamp_id)
    +unsigned int uclamp_eff_value(struct task_struct *p, enum uclamp_id clamp_id)
    {
    struct uclamp_se uc_eff;

    diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
    index 05c282775f21..280a3c735935 100644
    --- a/kernel/sched/sched.h
    +++ b/kernel/sched/sched.h
    @@ -2300,7 +2300,7 @@ static inline void cpufreq_update_util(struct rq *rq, unsigned int flags) {}
    #endif /* CONFIG_CPU_FREQ */

    #ifdef CONFIG_UCLAMP_TASK
    -enum uclamp_id uclamp_eff_value(struct task_struct *p, enum uclamp_id clamp_id);
    +unsigned int uclamp_eff_value(struct task_struct *p, enum uclamp_id clamp_id);

    static __always_inline
    unsigned int uclamp_util_with(struct rq *rq, unsigned int util,
    --
    2.22.0
    \
     
     \ /
      Last update: 2019-11-15 11:39    [W:3.158 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site