2013/2/22 Vincent Guittot vincent.guittot@linaro.org:
I wanted to avoid having to use the sd pointer for testing NOHZ_IDLE flag because it occurs each time we go into idle but it seems to be not easily feasible. Another solution could be to add a synchronization step between rcu_assign_pointer(dom 1, NULL) and create new domain to ensure that all pending access to old sd values, has finished but this will imply a potential delay in the rebuild of sched_domain and i'm not sure that it's acceptable
The other issue is that we'll need to abuse the fact that struct sched_domain is per cpu in order to store a per cpu state there. That's a bit ugly but at least safer.
Also, are struct sched_group and struct sched_group_power shared among several CPUs or are they per CPUs allocated as well? I guess they aren't otherwise nr_cpus_busy would be pointless.