|
@@ -7906,14 +7906,25 @@ int arch_reinit_sched_domains(void)
|
|
|
static ssize_t sched_power_savings_store(const char *buf, size_t count, int smt)
|
|
|
{
|
|
|
int ret;
|
|
|
+ unsigned int level = 0;
|
|
|
|
|
|
- if (buf[0] != '0' && buf[0] != '1')
|
|
|
+ if (sscanf(buf, "%u", &level) != 1)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * level is always be positive so don't check for
|
|
|
+ * level < POWERSAVINGS_BALANCE_NONE which is 0
|
|
|
+ * What happens on 0 or 1 byte write,
|
|
|
+ * need to check for count as well?
|
|
|
+ */
|
|
|
+
|
|
|
+ if (level >= MAX_POWERSAVINGS_BALANCE_LEVELS)
|
|
|
return -EINVAL;
|
|
|
|
|
|
if (smt)
|
|
|
- sched_smt_power_savings = (buf[0] == '1');
|
|
|
+ sched_smt_power_savings = level;
|
|
|
else
|
|
|
- sched_mc_power_savings = (buf[0] == '1');
|
|
|
+ sched_mc_power_savings = level;
|
|
|
|
|
|
ret = arch_reinit_sched_domains();
|
|
|
|