sched: constrain HMP scheduler tunable range with in better way

HMP scheduler tunables can be constrained via extra1 and extra2 of
ctl_table.  Having valid range in the sysctl table gives clearer
view of tunable's range.

Also add range for sched_select_prev_cpu_us so we can avoid invalid
value configuration of that tunable.

CRs-fixed: 1056910
Change-Id: I09fcc019133f4d37b7be3287da8e0733e40fc0ac
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
This commit is contained in:
Joonwoo Park 2016-09-21 14:51:51 -07:00
parent 9e2d528dc4
commit cc60f0790f
2 changed files with 27 additions and 22 deletions

View file

@ -1499,28 +1499,10 @@ int sched_hmp_proc_update_handler(struct ctl_table *table, int write,
if (write && (old_val == *data))
goto done;
/*
* Special handling for sched_freq_aggregate_threshold_pct
* which can be greater than 100. Use 1000 as an upper bound
* value which works for all practical use cases.
*/
if (data == &sysctl_sched_freq_aggregate_threshold_pct) {
if (*data > 1000) {
*data = old_val;
ret = -EINVAL;
goto done;
}
} else if (data != &sysctl_sched_select_prev_cpu_us) {
/*
* all tunables other than sched_select_prev_cpu_us are
* in percentage.
*/
if (sysctl_sched_downmigrate_pct >
sysctl_sched_upmigrate_pct || *data > 100) {
*data = old_val;
ret = -EINVAL;
goto done;
}
if (sysctl_sched_downmigrate_pct > sysctl_sched_upmigrate_pct) {
*data = old_val;
ret = -EINVAL;
goto done;
}
/*

View file

@ -130,6 +130,9 @@ static int one_hundred = 100;
#ifdef CONFIG_PRINTK
static int ten_thousand = 10000;
#endif
#ifdef CONFIG_SCHED_HMP
static int one_thousand = 1000;
#endif
/* this is needed for the proc_doulongvec_minmax of vm_dirty_bytes */
static unsigned long dirty_bytes_min = 2 * PAGE_SIZE;
@ -336,6 +339,8 @@ static struct ctl_table kern_table[] = {
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = sched_hmp_proc_update_handler,
.extra1 = &zero,
.extra2 = &one_hundred,
},
{
.procname = "sched_spill_nr_run",
@ -351,6 +356,8 @@ static struct ctl_table kern_table[] = {
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = sched_hmp_proc_update_handler,
.extra1 = &zero,
.extra2 = &one_hundred,
},
{
.procname = "sched_downmigrate",
@ -358,6 +365,8 @@ static struct ctl_table kern_table[] = {
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = sched_hmp_proc_update_handler,
.extra1 = &zero,
.extra2 = &one_hundred,
},
{
.procname = "sched_init_task_load",
@ -365,6 +374,8 @@ static struct ctl_table kern_table[] = {
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = sched_hmp_proc_update_handler,
.extra1 = &zero,
.extra2 = &one_hundred,
},
{
.procname = "sched_select_prev_cpu_us",
@ -372,6 +383,7 @@ static struct ctl_table kern_table[] = {
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = sched_hmp_proc_update_handler,
.extra1 = &zero,
},
{
.procname = "sched_enable_colocation",
@ -397,6 +409,8 @@ static struct ctl_table kern_table[] = {
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = sched_hmp_proc_update_handler,
.extra1 = &zero,
.extra2 = &one_hundred,
},
{
.procname = "sched_big_waker_task_load",
@ -404,6 +418,8 @@ static struct ctl_table kern_table[] = {
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = sched_hmp_proc_update_handler,
.extra1 = &zero,
.extra2 = &one_hundred,
},
{
.procname = "sched_enable_thread_grouping",
@ -440,6 +456,13 @@ static struct ctl_table kern_table[] = {
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = sched_hmp_proc_update_handler,
.extra1 = &zero,
/*
* Special handling for sched_freq_aggregate_threshold_pct
* which can be greater than 100. Use 1000 as an upper bound
* value which works for all practical use cases.
*/
.extra2 = &one_thousand,
},
{
.procname = "sched_boost",