On Fri, Jan 22, 2021 at 08:17:01PM -0500, Joel Fernandes (Google) wrote:

> +/* All active sched_core_cookies */
> +static struct rb_root sched_core_cookies = RB_ROOT;
> +static DEFINE_RAW_SPINLOCK(sched_core_cookies_lock);

> +/*
> + * Returns the following:
> + * a < b  => -1
> + * a == b => 0
> + * a > b  => 1
> + */
> +static int sched_core_cookie_cmp(const struct sched_core_cookie *a,
> +                              const struct sched_core_cookie *b)
> +{
> +#define COOKIE_CMP_RETURN(field) do {                \
> +     if (a->field < b->field)                \
> +             return -1;                      \
> +     else if (a->field > b->field)           \
> +             return 1;                       \
> +} while (0)                                  \
> +
> +     COOKIE_CMP_RETURN(task_cookie);
> +     COOKIE_CMP_RETURN(group_cookie);
> +
> +     /* all cookie fields match */
> +     return 0;
> +
> +#undef COOKIE_CMP_RETURN
> +}

AFAICT all this madness exists because cgroup + task interaction, yet
none of that code is actually dependent on cgroups being on.

So this seems to implement semantics that will make two tasks that share
a cookie, but are then placed in different cgroups not actually share.

Is that desired? Can we justify these semantics and the resulting code
complexity.

Reply via email to