FROMLIST: PM / devfreq: Restart previous governor if new governor fails to start
If the new governor fails to start, switch back to old governor so that the devfreq state is not left in some weird limbo. Signed-off-by: Saravana Kannan <skannan@codeaurora.org> Bug: 155527102 Link: https://lore.kernel.org/lkml/1477360800-11509-1-git-send-email-skannan@codeaurora.org/ Signed-off-by: Saravana Kannan <saravanak@google.com> Change-Id: If853c7d03b6ce6767047f17d747f62d850a7b3b4
This commit is contained in:
parent
12c94f71d4
commit
a2038b4794
1 changed files with 11 additions and 2 deletions
|
@ -1048,7 +1048,7 @@ static ssize_t governor_store(struct device *dev, struct device_attribute *attr,
|
|||
struct devfreq *df = to_devfreq(dev);
|
||||
int ret;
|
||||
char str_governor[DEVFREQ_NAME_LEN + 1];
|
||||
struct devfreq_governor *governor;
|
||||
const struct devfreq_governor *governor, *prev_gov;
|
||||
|
||||
ret = sscanf(buf, "%" __stringify(DEVFREQ_NAME_LEN) "s", str_governor);
|
||||
if (ret != 1)
|
||||
|
@ -1082,12 +1082,21 @@ static ssize_t governor_store(struct device *dev, struct device_attribute *attr,
|
|||
goto gov_stop_out;
|
||||
}
|
||||
}
|
||||
prev_gov = df->governor;
|
||||
df->governor = governor;
|
||||
strncpy(df->governor_name, governor->name, DEVFREQ_NAME_LEN);
|
||||
ret = df->governor->event_handler(df, DEVFREQ_GOV_START, NULL);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
dev_warn(dev, "%s: Governor %s not started(%d)\n",
|
||||
__func__, df->governor->name, ret);
|
||||
if (prev_gov) {
|
||||
df->governor = prev_gov;
|
||||
strlcpy(df->governor_name, prev_gov->name,
|
||||
DEVFREQ_NAME_LEN);
|
||||
df->governor->event_handler(df, DEVFREQ_GOV_START,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
|
||||
gov_stop_out:
|
||||
mutex_unlock(&df->event_lock);
|
||||
|
|
Loading…
Reference in a new issue