Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1306556 > unrolled thread
| Started by | Juri Lelli <juri.lelli@arm.com> |
|---|---|
| First post | 2016-01-11 18:40 +0100 |
| Last post | 2016-01-12 12:10 +0100 |
| Articles | 2 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[RFC PATCH 15/19] cpufreq: remove useless usage of cpufreq_governor_mutex in __cpufreq_governor Juri Lelli <juri.lelli@arm.com> - 2016-01-11 18:40 +0100
Re: [RFC PATCH 15/19] cpufreq: remove useless usage of cpufreq_governor_mutex in __cpufreq_governor Viresh Kumar <viresh.kumar@linaro.org> - 2016-01-12 12:10 +0100
| From | Juri Lelli <juri.lelli@arm.com> |
|---|---|
| Date | 2016-01-11 18:40 +0100 |
| Subject | [RFC PATCH 15/19] cpufreq: remove useless usage of cpufreq_governor_mutex in __cpufreq_governor |
| Message-ID | <qPOBK-5zs-53@gated-at.bofh.it> |
Commit 6f1e4efd882e ("cpufreq: Fix timer/workqueue corruption by
protecting reading governor_enabled") made policy->governor_enabled
guarded by cpufreq_governor_mutex in __cpufreq_governor. Now that
holding of policy->rwsem is asserted in __cpufreq_governor,
cpufreq_governor_mutex is overkilling.
Remove such usage. Also, this cleans up semantic of
cpufreq_governor_mutex: it guards cpufreq_governor_list only.
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Juri Lelli <juri.lelli@arm.com>
---
drivers/cpufreq/cpufreq.c | 6 ------
1 file changed, 6 deletions(-)
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index ba452c3..d58a622 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -1993,11 +1993,9 @@ static int __cpufreq_governor(struct cpufreq_policy *policy,
pr_debug("%s: for CPU %u, event %u\n", __func__, policy->cpu, event);
- mutex_lock(&cpufreq_governor_mutex);
if ((policy->governor_enabled && event == CPUFREQ_GOV_START)
|| (!policy->governor_enabled
&& (event == CPUFREQ_GOV_LIMITS || event == CPUFREQ_GOV_STOP))) {
- mutex_unlock(&cpufreq_governor_mutex);
return -EBUSY;
}
@@ -2006,8 +2004,6 @@ static int __cpufreq_governor(struct cpufreq_policy *policy,
else if (event == CPUFREQ_GOV_START)
policy->governor_enabled = true;
- mutex_unlock(&cpufreq_governor_mutex);
-
ret = policy->governor->governor(policy, event);
if (!ret) {
@@ -2017,12 +2013,10 @@ static int __cpufreq_governor(struct cpufreq_policy *policy,
policy->governor->initialized--;
} else {
/* Restore original values */
- mutex_lock(&cpufreq_governor_mutex);
if (event == CPUFREQ_GOV_STOP)
policy->governor_enabled = true;
else if (event == CPUFREQ_GOV_START)
policy->governor_enabled = false;
- mutex_unlock(&cpufreq_governor_mutex);
}
if (((event == CPUFREQ_GOV_POLICY_INIT) && ret) ||
--
2.2.2
[toc] | [next] | [standalone]
| From | Viresh Kumar <viresh.kumar@linaro.org> |
|---|---|
| Date | 2016-01-12 12:10 +0100 |
| Subject | Re: [RFC PATCH 15/19] cpufreq: remove useless usage of cpufreq_governor_mutex in __cpufreq_governor |
| Message-ID | <qQ4ZQ-5t-29@gated-at.bofh.it> |
| In reply to | #1306556 |
On 11-01-16, 17:35, Juri Lelli wrote:
> Commit 6f1e4efd882e ("cpufreq: Fix timer/workqueue corruption by
> protecting reading governor_enabled") made policy->governor_enabled
> guarded by cpufreq_governor_mutex in __cpufreq_governor. Now that
> holding of policy->rwsem is asserted in __cpufreq_governor,
> cpufreq_governor_mutex is overkilling.
I am sure that is going to break it. Try that x86, somehow I don't get
it on my exynos boards.
> - mutex_lock(&cpufreq_governor_mutex);
> if ((policy->governor_enabled && event == CPUFREQ_GOV_START)
> || (!policy->governor_enabled
> && (event == CPUFREQ_GOV_LIMITS || event == CPUFREQ_GOV_STOP))) {
> - mutex_unlock(&cpufreq_governor_mutex);
> return -EBUSY;
> }
Actually the above checks should also be removed as the governors are
responsible for maintaining their state machines. But
userspace/powersave/performance don't have that support yet and so
these checks save them from going into undefined states.
Over that, above and below checks are incomplete..
> @@ -2006,8 +2004,6 @@ static int __cpufreq_governor(struct cpufreq_policy *policy,
> else if (event == CPUFREQ_GOV_START)
> policy->governor_enabled = true;
>
> - mutex_unlock(&cpufreq_governor_mutex);
> -
> ret = policy->governor->governor(policy, event);
>
> if (!ret) {
> @@ -2017,12 +2013,10 @@ static int __cpufreq_governor(struct cpufreq_policy *policy,
> policy->governor->initialized--;
> } else {
> /* Restore original values */
> - mutex_lock(&cpufreq_governor_mutex);
> if (event == CPUFREQ_GOV_STOP)
> policy->governor_enabled = true;
> else if (event == CPUFREQ_GOV_START)
> policy->governor_enabled = false;
> - mutex_unlock(&cpufreq_governor_mutex);
> }
>
> if (((event == CPUFREQ_GOV_POLICY_INIT) && ret) ||
> --
> 2.2.2
--
viresh
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web