|
@@ -875,11 +875,18 @@ static ssize_t store(struct kobject *kobj, struct attribute *attr,
|
|
|
|
|
|
down_write(&policy->rwsem);
|
|
|
|
|
|
+ /* Updating inactive policies is invalid, so avoid doing that. */
|
|
|
+ if (unlikely(policy_is_inactive(policy))) {
|
|
|
+ ret = -EBUSY;
|
|
|
+ goto unlock_policy_rwsem;
|
|
|
+ }
|
|
|
+
|
|
|
if (fattr->store)
|
|
|
ret = fattr->store(policy, buf, count);
|
|
|
else
|
|
|
ret = -EIO;
|
|
|
|
|
|
+unlock_policy_rwsem:
|
|
|
up_write(&policy->rwsem);
|
|
|
|
|
|
up_read(&cpufreq_rwsem);
|
|
@@ -1610,6 +1617,10 @@ static unsigned int __cpufreq_get(struct cpufreq_policy *policy)
|
|
|
|
|
|
ret_freq = cpufreq_driver->get(policy->cpu);
|
|
|
|
|
|
+ /* Updating inactive policies is invalid, so avoid doing that. */
|
|
|
+ if (unlikely(policy_is_inactive(policy)))
|
|
|
+ return ret_freq;
|
|
|
+
|
|
|
if (ret_freq && policy->cur &&
|
|
|
!(cpufreq_driver->flags & CPUFREQ_CONST_LOOPS)) {
|
|
|
/* verify no discrepancy between actual and
|