On Wed, July 2016, Thomas Gleixner wrote > On Tue, 12 Jul 2016, Fenghua Yu wrote: > > +void rdtgroup_post_fork(struct task_struct *child) { > > + if (!use_rdtgroup_tasks) > > + return; > > + > > + spin_lock_irq(&rdtgroup_task_lock); > > + if (list_empty(&child->rg_list)) { > > Why would the list be non empty after a fork? In this situation for a pid: 1.rdtgroup_fork(): rg_list=null. 2.setup_task_rg_lists(): rg_list is setup 3.rdtgroup_fork(): rg_list is not empty This situation happens only during rscctrl mount time. Before mount, post_fork() returns from !use_rdtgroup_tasks and doesn't set up rg_list. After mount, rg_list() is always empty in post_fork(). But we need to check rg_list for above situation. Does that make sense? Any suggestion for better soluation? > > > + struct rdtgroup *rdtgrp = current->rdtgroup; > > + > > + list_add_tail(&child->rg_list, &rdtgrp->pset.tasks); > > + child->rdtgroup = rdtgrp; > > + atomic_inc(&rdtgrp->pset.refcount); > > + } > > + spin_unlock_irq(&rdtgroup_task_lock); > > +} > > diff --git a/kernel/exit.c b/kernel/exit.c index 9e6e135..04346b6 > > 100644 > > --- a/kernel/exit.c > > +++ b/kernel/exit.c > > @@ -59,6 +59,7 @@ > > #include > > #include > > #include > > +#include > > > > static void __unhash_process(struct task_struct *p, bool group_dead) > > { @@ -757,6 +758,7 @@ void do_exit(long code) > > perf_event_exit_task(tsk); > > > > cgroup_exit(tsk); > > + rdtgroup_exit(tsk); > > -ENOSUCHFUNCTION > > Please provide the implementations first and then hook it up not the other > way round. Will do. > > Thanks, > > tglx