Messages in this thread | | | Date | Fri, 5 Feb 2021 12:52:32 +0100 | From | Peter Zijlstra <> | Subject | Re: [PATCH v10 2/5] sched: CGroup tagging interface for core scheduling |
| |
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.
| |