BACKPORT: PM / devfreq: Fix race condition between suspend/resume and governor_store

There is a race condition when the event governor_store is being executed
from sysfs and the device issues a suspend. The devfreq data structures
would become stale when the suspend tries to access them in the middle
of the governor_store operation. Fix this issue by taking a lock around
suspend and resume operations so that these operations are not concurrent
with the other events from sysfs.

Change-Id: Ifa0e93915a920cec3e0429966328a1128d61098b
Signed-off-by: Rama Aparna Mallavarapu <aparnam@codeaurora.org>
[avajid@codeaurora.org: updated to merge better with upstream changes and removed renaming since done in previous commit]
Signed-off-by: Amir Vajid <avajid@codeaurora.org>
Signed-off-by: UtsavBalar1231 <utsavbalar1231@gmail.com>
This commit is contained in:
Rama Aparna Mallavarapu 2018-10-10 14:53:32 -07:00 committed by spakkkk
parent 75f5520077
commit 99d9cca590

View File

@ -906,8 +906,10 @@ int devfreq_suspend_device(struct devfreq *devfreq)
return 0;
if (devfreq->governor) {
event_mutex_lock(devfreq);
ret = devfreq->governor->event_handler(devfreq,
DEVFREQ_GOV_SUSPEND, NULL);
event_mutex_unlock(devfreq);
if (ret)
return ret;
}
@ -951,8 +953,10 @@ int devfreq_resume_device(struct devfreq *devfreq)
}
if (devfreq->governor) {
event_mutex_lock(devfreq);
ret = devfreq->governor->event_handler(devfreq,
DEVFREQ_GOV_RESUME, NULL);
event_mutex_unlock(devfreq);
if (ret)
return ret;
}