int cpuquiet_register_driver(struct cpuquiet_driver *drv) { int err = -EBUSY; unsigned int cpu; struct device *dev; if (!drv) return -EINVAL; #ifdef CONFIG_CPUQUIET_STATS stats = kzalloc(nr_cpu_ids * sizeof(*stats), GFP_KERNEL); if (!stats) return -ENOMEM; #endif for_each_possible_cpu(cpu) { #ifdef CONFIG_CPUQUIET_STATS u64 cur_jiffies = get_jiffies_64(); stats[cpu].last_update = cur_jiffies; if (cpu_online(cpu)) stats[cpu].up_down_count = 1; #endif dev = get_cpu_device(cpu); if (dev) { cpuquiet_add_dev(dev, cpu); #ifdef CONFIG_CPUQUIET_STATS cpuquiet_cpu_kobject_init(&stats[cpu].cpu_kobject, &ktype_cpu_stats, "stats", cpu); #endif } } mutex_lock(&cpuquiet_lock); if (!cpuquiet_curr_driver) { err = 0; cpuquiet_curr_driver = drv; cpuquiet_switch_governor(cpuquiet_get_first_governor()); } mutex_unlock(&cpuquiet_lock); return err; }
int cpuquiet_register_driver(struct cpuquiet_driver *drv) { int err = -EBUSY; unsigned int cpu; u64 cur_jiffies; struct device *cpu_dev; if (!drv) return -EINVAL; stats = kzalloc(nr_cpu_ids * sizeof(*stats), GFP_KERNEL); if (!stats) return -ENOMEM; for_each_possible_cpu(cpu) { cur_jiffies = get_jiffies_64(); stats[cpu].last_update = cur_jiffies; if (cpu_online(cpu)) stats[cpu].up_down_count = 1; cpu_dev = get_cpu_device(cpu); if (cpu_dev) { cpuquiet_add_dev(cpu_dev, cpu); cpuquiet_cpu_kobject_init(&stats[cpu].cpu_kobject, &ktype_cpu_stats, "stats", cpu); } } mutex_lock(&cpuquiet_lock); if (!cpuquiet_curr_driver) { err = 0; cpuquiet_curr_driver = drv; } mutex_unlock(&cpuquiet_lock); return err; }