Re: [PATCH v9 RESEND 1/3] sched/fair: Co-locate cfs_rq and sched_entity in cfs_tg_state
From: K Prateek Nayak
Date: Tue Mar 31 2026 - 23:00:17 EST
Hello Josh,
On 4/1/2026 1:05 AM, Josh Don wrote:
>> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
>> index 0a35a82e4792..79160d419c9f 100644
>> --- a/kernel/sched/fair.c
>> +++ b/kernel/sched/fair.c
>> @@ -13877,8 +13877,6 @@ void free_fair_sched_group(struct task_group *tg)
>> for_each_possible_cpu(i) {
>> if (tg->cfs_rq)
>> kfree(tg->cfs_rq[i]);
>> - if (tg->se)
>> - kfree(tg->se[i]);
>> }
>
> To be more explicit, suggest converting tg->cfs_rq[i] to an explicit
> cfs_tg_state pointer via container_of, to not depend on cfs_rq being
> the first member of the struct.
I suggested the __no_randomize_layout trick since it is similar to what
"struct sched_entity_stats" does and we save on checking if
"tg->cfs_rq[i]" NULL before doing container_of() + kfree().
I isn't any more obscure than how kfree(tg->se[i]) would have previously
freed up the stats member too in one go but perhaps a comment on top
can address your concerns?
--
Thanks and Regards,
Prateek