Tejun Heo <tj@xxxxxxxxxx> writes: > Hello, Roman. How are you? Hi Tejun! Thank you for the links... > > On Tue, Sep 02, 2025 at 10:31:33AM -0700, Roman Gushchin wrote: > ... >> Btw, what's the right way to attach struct ops to a cgroup, if there is >> one? Add a cgroup_id field to the struct and use it in the .reg() >> callback? Or there is something better? > > So, I'm trying to do something similar with sched_ext. Right now, I only > have a very rough prototype (I can attach multiple schedulers with warnings > and they even can schedule for several seconds before melting down). > However, the basic pieces should may still be useful. The branch is: > > git://git.kernel.org/pub/scm/linux/kernel/git/tj/sched_ext.git scx-hier-prototype > > There are several pieces: > > - cgroup recently grew lifetime notifiers that you can hook in there to > receive on/offline events. This is useful for initializing per-cgroup > fields and cleaning up when cgroup dies: > > https://git.kernel.org/pub/scm/linux/kernel/git/tj/sched_ext.git/tree/kernel/sched/ext.c?h=scx-hier-prototype#n5469 This is neat, I might use this for the psi struct ops to give a user a chance to create new trigger(s) if a new cgroup is created. > > - I'm passing in cgroup_id as an optional field in struct_ops and then in > enable path, look up the matching cgroup, verify it can attach there and > insert and update data structures accordingly: > > https://git.kernel.org/pub/scm/linux/kernel/git/tj/sched_ext.git/tree/kernel/sched/ext.c?h=scx-hier-prototype#n5280 Yeah, we discussed this option with Martin up in this thread. It doesn't look as the best possible solution, but maybe the best we have at the moment. Ideally, I want something like this: void test_oom(void) { struct test_oom *skel; int err, cgroup_fd; cgroup_fd = open(...); if (cgroup_fd < 0) goto cleanup; skel = test_oom__open_and_load(); if (!skel) goto cleanup; err = test_oom__attach_cgroup(skel, cgroup_fd); if (CHECK_FAIL(err)) goto cleanup;