>> However, regarding the logic, I have a few doubts - >> >> 1. for each cpu in drv->cpumask, if there is already a driver >> registered, its calling __cpuidle_unset_driver which loops over for >> each cpu in drv->cpumask again. Isn't it unnecessary to do this nested >> calls? > > > It is to rollback the previous changes done in the loop. However, I have two concerns here:- 1. static inline int __cpuidle_set_driver(struct cpuidle_driver *drv) { int cpu; struct cpuidle_driver *tmp = NULL; for_each_cpu(cpu, drv->cpumask) { tmp = __cpuidle_get_cpu_driver(cpu); /* This would prevent nesting of loops */ if ( tmp != NULL ) { if ( tmp == drv ) per_cpu(cpuidle_drivers, cpu) = NULL; return -EBUSY; } per_cpu(cpuidle_drivers, cpu) = drv; } return 0; } Instead of calling __cpuidle_unset_driver() which would loop-over again for all the cpus , is it not that the above function would be more efficient. 2. Secondly, if the cpuidle driver to be registered matches to the one already registered , then why should it be unset instead of leaving it as it is. Any views would be highly appreciated. _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies