Tejun Heo <tj@xxxxxxxxxx> writes: > Hello, > > On Wed, Sep 03, 2025 at 04:30:16PM -0700, Roman Gushchin wrote: > ... >> > - 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; > > Yeah, that'd look better but are there practical differences? The only one I > can think of is fs based permission check but that can be done separately > too. The practical difference is that a single struct ops can be attached to multiple cgroups.