aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sched.c')
-rw-r--r--kernel/sched.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index b309027bf9e8..56b285cd5350 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -7906,14 +7906,25 @@ int arch_reinit_sched_domains(void)
7906static ssize_t sched_power_savings_store(const char *buf, size_t count, int smt) 7906static ssize_t sched_power_savings_store(const char *buf, size_t count, int smt)
7907{ 7907{
7908 int ret; 7908 int ret;
7909 unsigned int level = 0;
7909 7910
7910 if (buf[0] != '0' && buf[0] != '1') 7911 if (sscanf(buf, "%u", &level) != 1)
7912 return -EINVAL;
7913
7914 /*
7915 * level is always be positive so don't check for
7916 * level < POWERSAVINGS_BALANCE_NONE which is 0
7917 * What happens on 0 or 1 byte write,
7918 * need to check for count as well?
7919 */
7920
7921 if (level >= MAX_POWERSAVINGS_BALANCE_LEVELS)
7911 return -EINVAL; 7922 return -EINVAL;
7912 7923
7913 if (smt) 7924 if (smt)
7914 sched_smt_power_savings = (buf[0] == '1'); 7925 sched_smt_power_savings = level;
7915 else 7926 else
7916 sched_mc_power_savings = (buf[0] == '1'); 7927 sched_mc_power_savings = level;
7917 7928
7918 ret = arch_reinit_sched_domains(); 7929 ret = arch_reinit_sched_domains();
7919 7930