Merge "sched: Fix deadlock between cpu hotplug and upmigrate change"
This commit is contained in:
commit
9a18201fc8
1 changed files with 19 additions and 8 deletions
|
@ -1470,7 +1470,20 @@ int sched_hmp_proc_update_handler(struct ctl_table *table, int write,
|
|||
int ret;
|
||||
unsigned int old_val;
|
||||
unsigned int *data = (unsigned int *)table->data;
|
||||
int update_min_nice = 0;
|
||||
int update_task_count = 0;
|
||||
|
||||
if (!sched_enable_hmp)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* The policy mutex is acquired with cpu_hotplug.lock
|
||||
* held from cpu_up()->cpufreq_governor_interactive()->
|
||||
* sched_set_window(). So enforce the same order here.
|
||||
*/
|
||||
if (write && (data == &sysctl_sched_upmigrate_pct)) {
|
||||
update_task_count = 1;
|
||||
get_online_cpus();
|
||||
}
|
||||
|
||||
mutex_lock(&policy_mutex);
|
||||
|
||||
|
@ -1478,7 +1491,7 @@ int sched_hmp_proc_update_handler(struct ctl_table *table, int write,
|
|||
|
||||
ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
|
||||
|
||||
if (ret || !write || !sched_enable_hmp)
|
||||
if (ret || !write)
|
||||
goto done;
|
||||
|
||||
if (write && (old_val == *data))
|
||||
|
@ -1500,20 +1513,18 @@ int sched_hmp_proc_update_handler(struct ctl_table *table, int write,
|
|||
* includes taking runqueue lock of all online cpus and re-initiatizing
|
||||
* their big counter values based on changed criteria.
|
||||
*/
|
||||
if ((data == &sysctl_sched_upmigrate_pct || update_min_nice)) {
|
||||
get_online_cpus();
|
||||
if (update_task_count)
|
||||
pre_big_task_count_change(cpu_online_mask);
|
||||
}
|
||||
|
||||
set_hmp_defaults();
|
||||
|
||||
if ((data == &sysctl_sched_upmigrate_pct || update_min_nice)) {
|
||||
if (update_task_count)
|
||||
post_big_task_count_change(cpu_online_mask);
|
||||
put_online_cpus();
|
||||
}
|
||||
|
||||
done:
|
||||
mutex_unlock(&policy_mutex);
|
||||
if (update_task_count)
|
||||
put_online_cpus();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue