lkml.org 
[lkml]   [2019]   [May]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v8 06/16] sched/core: uclamp: Extend sched_setattr() to support utilization clamping
    On 17-Apr 15:26, Suren Baghdasaryan wrote:
    > On Tue, Apr 2, 2019 at 3:42 AM Patrick Bellasi <patrick.bellasi@arm.com> wrote:

    [...]

    > > Do not allow to change sched class specific params and non class
    > > specific params (i.e. clamp values) at the same time. This keeps things
    > > simple and still works for the most common cases since we are usually
    > > interested in just one of the two actions.
    >
    > Sorry, I can't find where you are checking to eliminate the
    > possibility of simultaneous changes to both sched class specific
    > params and non class specific params... Am I too tired or they are
    > indeed missing?

    No, you right... that limitation has been removed in v8 :)

    I'll remove the above paragraph in v9, thanks for spotting it.

    [...]

    > > +static int uclamp_validate(struct task_struct *p,
    > > + const struct sched_attr *attr)
    > > +{
    > > + unsigned int lower_bound = p->uclamp_req[UCLAMP_MIN].value;
    > > + unsigned int upper_bound = p->uclamp_req[UCLAMP_MAX].value;
    > > +
    > > + if (attr->sched_flags & SCHED_FLAG_UTIL_CLAMP_MIN)
    > > + lower_bound = attr->sched_util_min;
    > > + if (attr->sched_flags & SCHED_FLAG_UTIL_CLAMP_MAX)
    > > + upper_bound = attr->sched_util_max;
    > > +
    > > + if (lower_bound > upper_bound)
    > > + return -EINVAL;
    > > + if (upper_bound > SCHED_CAPACITY_SCALE)
    > > + return -EINVAL;
    > > +
    > > + return 0;
    > > +}

    [...]

    > > static void uclamp_fork(struct task_struct *p)
    > > {
    > > unsigned int clamp_id;
    > > @@ -1056,6 +1100,13 @@ static void __init init_uclamp(void)
    > > #else /* CONFIG_UCLAMP_TASK */
    > > static inline void uclamp_rq_inc(struct rq *rq, struct task_struct *p) { }
    > > static inline void uclamp_rq_dec(struct rq *rq, struct task_struct *p) { }
    > > +static inline int uclamp_validate(struct task_struct *p,
    > > + const struct sched_attr *attr)
    > > +{
    > > + return -ENODEV;
    >
    > ENOSYS might be more appropriate?

    Yep, agree, thanks!

    >
    > > +}
    > > +static void __setscheduler_uclamp(struct task_struct *p,
    > > + const struct sched_attr *attr) { }
    > > static inline void uclamp_fork(struct task_struct *p) { }
    > > static inline void init_uclamp(void) { }
    > > #endif /* CONFIG_UCLAMP_TASK */
    > > @@ -4424,6 +4475,13 @@ static void __setscheduler_params(struct task_struct *p,
    > > static void __setscheduler(struct rq *rq, struct task_struct *p,
    > > const struct sched_attr *attr, bool keep_boost)
    > > {
    > > + /*
    > > + * If params can't change scheduling class changes aren't allowed
    > > + * either.
    > > + */
    > > + if (attr->sched_flags & SCHED_FLAG_KEEP_PARAMS)
    > > + return;
    > > +
    > > __setscheduler_params(p, attr);
    > >
    > > /*
    > > @@ -4561,6 +4619,13 @@ static int __sched_setscheduler(struct task_struct *p,
    > > return retval;
    > > }
    > >
    > > + /* Update task specific "requested" clamps */
    > > + if (attr->sched_flags & SCHED_FLAG_UTIL_CLAMP) {
    > > + retval = uclamp_validate(p, attr);
    > > + if (retval)
    > > + return retval;
    > > + }
    > > +
    > > /*
    > > * Make sure no PI-waiters arrive (or leave) while we are
    > > * changing the priority of the task:

    [...]

    --
    #include <best/regards.h>

    Patrick Bellasi

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