From: Dave Jones The hotplug CPU locking in cpufreq is horrendous. No-one seems to care enough to fix it, so just remove it so that the 99.9% of the real world users of this code can use cpufreq without being bothered by warnings. Signed-off-by: Dave Jones Signed-off-by: Andrew Morton --- drivers/cpufreq/cpufreq.c | 16 ---------------- drivers/cpufreq/cpufreq_conservative.c | 2 -- drivers/cpufreq/cpufreq_ondemand.c | 2 -- drivers/cpufreq/cpufreq_stats.c | 2 -- drivers/cpufreq/cpufreq_userspace.c | 2 -- 5 files changed, 24 deletions(-) diff -puN drivers/cpufreq/cpufreq.c~remove-hotplug-cpu-crap-from-cpufreq drivers/cpufreq/cpufreq.c --- a/drivers/cpufreq/cpufreq.c~remove-hotplug-cpu-crap-from-cpufreq +++ a/drivers/cpufreq/cpufreq.c @@ -416,12 +416,10 @@ static ssize_t store_##file_name \ if (ret != 1) \ return -EINVAL; \ \ - lock_cpu_hotplug(); \ mutex_lock(&policy->lock); \ ret = __cpufreq_set_policy(policy, &new_policy); \ policy->user_policy.object = policy->object; \ mutex_unlock(&policy->lock); \ - unlock_cpu_hotplug(); \ \ return ret ? ret : count; \ } @@ -480,8 +478,6 @@ static ssize_t store_scaling_governor (s &new_policy.governor)) return -EINVAL; - lock_cpu_hotplug(); - /* Do not use cpufreq_set_policy here or the user_policy.max will be wrongly overridden */ mutex_lock(&policy->lock); @@ -491,8 +487,6 @@ static ssize_t store_scaling_governor (s policy->user_policy.governor = policy->governor; mutex_unlock(&policy->lock); - unlock_cpu_hotplug(); - if (ret) return ret; else @@ -1268,7 +1262,6 @@ EXPORT_SYMBOL(cpufreq_unregister_notifie *********************************************************************/ -/* Must be called with lock_cpu_hotplug held */ int __cpufreq_driver_target(struct cpufreq_policy *policy, unsigned int target_freq, unsigned int relation) @@ -1294,13 +1287,11 @@ int cpufreq_driver_target(struct cpufreq if (!policy) return -EINVAL; - lock_cpu_hotplug(); mutex_lock(&policy->lock); ret = __cpufreq_driver_target(policy, target_freq, relation); mutex_unlock(&policy->lock); - unlock_cpu_hotplug(); cpufreq_cpu_put(policy); return ret; @@ -1328,7 +1319,6 @@ int cpufreq_driver_getavg(struct cpufreq EXPORT_SYMBOL_GPL(cpufreq_driver_getavg); /* - * Locking: Must be called with the lock_cpu_hotplug() lock held * when "event" is CPUFREQ_GOV_LIMITS */ @@ -1423,7 +1413,6 @@ EXPORT_SYMBOL(cpufreq_get_policy); /* * data : current policy. * policy : policy to be set. - * Locking: Must be called with the lock_cpu_hotplug() lock held */ static int __cpufreq_set_policy(struct cpufreq_policy *data, struct cpufreq_policy *policy) @@ -1529,8 +1518,6 @@ int cpufreq_set_policy(struct cpufreq_po if (!data) return -EINVAL; - lock_cpu_hotplug(); - /* lock this CPU */ mutex_lock(&data->lock); @@ -1542,7 +1529,6 @@ int cpufreq_set_policy(struct cpufreq_po mutex_unlock(&data->lock); - unlock_cpu_hotplug(); cpufreq_cpu_put(data); return ret; @@ -1566,7 +1552,6 @@ int cpufreq_update_policy(unsigned int c if (!data) return -ENODEV; - lock_cpu_hotplug(); mutex_lock(&data->lock); dprintk("updating policy for CPU %u\n", cpu); @@ -1593,7 +1578,6 @@ int cpufreq_update_policy(unsigned int c ret = __cpufreq_set_policy(data, &policy); mutex_unlock(&data->lock); - unlock_cpu_hotplug(); cpufreq_cpu_put(data); return ret; } diff -puN drivers/cpufreq/cpufreq_conservative.c~remove-hotplug-cpu-crap-from-cpufreq drivers/cpufreq/cpufreq_conservative.c --- a/drivers/cpufreq/cpufreq_conservative.c~remove-hotplug-cpu-crap-from-cpufreq +++ a/drivers/cpufreq/cpufreq_conservative.c @@ -430,14 +430,12 @@ static void dbs_check_cpu(int cpu) static void do_dbs_timer(void *data) { int i; - lock_cpu_hotplug(); mutex_lock(&dbs_mutex); for_each_online_cpu(i) dbs_check_cpu(i); schedule_delayed_work(&dbs_work, usecs_to_jiffies(dbs_tuners_ins.sampling_rate)); mutex_unlock(&dbs_mutex); - unlock_cpu_hotplug(); } static inline void dbs_timer_init(void) diff -puN drivers/cpufreq/cpufreq_ondemand.c~remove-hotplug-cpu-crap-from-cpufreq drivers/cpufreq/cpufreq_ondemand.c --- a/drivers/cpufreq/cpufreq_ondemand.c~remove-hotplug-cpu-crap-from-cpufreq +++ a/drivers/cpufreq/cpufreq_ondemand.c @@ -434,9 +434,7 @@ static void do_dbs_timer(void *data) INIT_WORK(&dbs_info->work, do_dbs_timer, (void *)DBS_NORMAL_SAMPLE); if (!dbs_tuners_ins.powersave_bias || (unsigned long) data == DBS_NORMAL_SAMPLE) { - lock_cpu_hotplug(); dbs_check_cpu(dbs_info); - unlock_cpu_hotplug(); if (dbs_info->freq_lo) { /* Setup timer for SUB_SAMPLE */ INIT_WORK(&dbs_info->work, do_dbs_timer, diff -puN drivers/cpufreq/cpufreq_stats.c~remove-hotplug-cpu-crap-from-cpufreq drivers/cpufreq/cpufreq_stats.c --- a/drivers/cpufreq/cpufreq_stats.c~remove-hotplug-cpu-crap-from-cpufreq +++ a/drivers/cpufreq/cpufreq_stats.c @@ -366,12 +366,10 @@ __exit cpufreq_stats_exit(void) cpufreq_unregister_notifier(¬ifier_trans_block, CPUFREQ_TRANSITION_NOTIFIER); unregister_hotcpu_notifier(&cpufreq_stat_cpu_notifier); - lock_cpu_hotplug(); for_each_online_cpu(cpu) { cpufreq_stat_cpu_callback(&cpufreq_stat_cpu_notifier, CPU_DEAD, (void *)(long)cpu); } - unlock_cpu_hotplug(); } MODULE_AUTHOR ("Zou Nan hai "); diff -puN drivers/cpufreq/cpufreq_userspace.c~remove-hotplug-cpu-crap-from-cpufreq drivers/cpufreq/cpufreq_userspace.c --- a/drivers/cpufreq/cpufreq_userspace.c~remove-hotplug-cpu-crap-from-cpufreq +++ a/drivers/cpufreq/cpufreq_userspace.c @@ -71,7 +71,6 @@ static int cpufreq_set(unsigned int freq dprintk("cpufreq_set for cpu %u, freq %u kHz\n", policy->cpu, freq); - lock_cpu_hotplug(); mutex_lock(&userspace_mutex); if (!cpu_is_managed[policy->cpu]) goto err; @@ -94,7 +93,6 @@ static int cpufreq_set(unsigned int freq err: mutex_unlock(&userspace_mutex); - unlock_cpu_hotplug(); return ret; } _