Skip to content
  • Daniel Lezcano's avatar
    cpuidle: make a single register function for all · 4c637b21
    Daniel Lezcano authored
    The usual scheme to initialize a cpuidle driver on a SMP is:
    
    	cpuidle_register_driver(drv);
    	for_each_possible_cpu(cpu) {
    		device = &per_cpu(cpuidle_dev, cpu);
    		cpuidle_register_device(device);
    	}
    
    This code is duplicated in each cpuidle driver.
    
    On UP systems, it is done this way:
    
    	cpuidle_register_driver(drv);
    	device = &per_cpu(cpuidle_dev, cpu);
    	cpuidle_register_device(device);
    
    On UP, the macro 'for_each_cpu' does one iteration:
    
    #define for_each_cpu(cpu, mask)                 \
            for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask)
    
    Hence, the initialization loop is the same for UP than SMP.
    
    Beside, we saw different bugs / mis-initialization / return code unchecked in
    the different drivers, the code is duplicated including bugs. After fixing all
    these ones, it appears the initialization pattern is the same for everyone.
    
    Please note, some drivers are doing dev->state_count = drv->state_count. This is
    not necessary because it is done by the cpui...
    4c637b21