Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1282682
| Path | csiph.com!eternal-september.org!feeder.eternal-september.org!aioe.org!bofh.it!news.nic.it!robomod |
|---|---|
| From | Viresh Kumar <viresh.kumar@linaro.org> |
| Newsgroups | linux.kernel |
| Subject | [PATCH V2 1/6] cpufreq: ondemand: Update sampling rate only for concerned policies |
| Date | Thu, 03 Dec 2015 05:10:01 +0100 |
| Message-ID | <qBtnr-8mi-1@gated-at.bofh.it> (permalink) |
| References | <qBtnr-8mi-3@gated-at.bofh.it> |
| X-Original-To | Rafael Wysocki <rjw@rjwysocki.net> |
| Dkim-Signature | v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=VD4/P1XIv/AUv9eFeQI5JIEgZiWDAA8oiBMHpmBPKeU=; b=nY2mK1mQ6dHiIrYdTZVsCQeIcQ1D/Y9Wv/laHoaGjvSBxeElFpJxPrOKUP5m7/CRY5 JEEncdHWdZDKC2Wq/U5GBay24fsirn6SOqTwee3ZBXS9AKPvMJmRiSNOgnH79ZBwBPWk zQtS9Thfj8SJdhESwI4UwaR7EYKoko9/8DVz0sOOpKw6srjYFlx/mUmJ+Zv+ZjPhJ7zf ylMs7NiO6ucH3RWWtUWLx5s1RX4WaKT/6nMq4JK1tWndnCEj3XslGaZiey7zapod+G2y z7mbPYR+nT+nygZPbNyH3vmvfax+bWCkofAR1ICWOizF4a1FOELf9Wa4X6sCE7QqM3UU +5bA== |
| X-Google-Dkim-Signature | v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=VD4/P1XIv/AUv9eFeQI5JIEgZiWDAA8oiBMHpmBPKeU=; b=ZBJzXE7ZTd5qKxwRoY89lSct8tvHwG/9+LZlj855slwgPOZIcbNnTu9OZUP41lT37r rA2mJ8ZzJzwMIqInRge19Say9Vs9NyrKdZlclxQxIshQ18XKAtVcF9DtO9nqItzfs8V1 CYS83IH/Xm41qfhT1qTvx0w7aMGX9EuA7RZxsWl5BTZSha6NybcVtfVnyykTxyyjHfKt SOvRr7eaUB6vWUZSTrObxUDN6hZTSAxK5QPoJjxWTcJzB9nv6+bg32W61OieItxqxHlH i7qNgBPkyPGCX9yFMvT8Dxx2qfJoWlatz2n4MjEhuDC4xoodGPYJv0CR/FNkC+ukkZMr QnGA== |
| X-Gm-Message-State | ALoCoQk5Ly3rT13AFbCGOsSWwZXKm8ROTLdHMDoXIhtcRkPv8+Rm0CzRYl6A9jEjGQVizCqetvNu |
| X-Received | by 10.66.248.106 with SMTP id yl10mr10008263pac.140.1449115684431; Wed, 02 Dec 2015 20:08:04 -0800 (PST) |
| X-Mailer | git-send-email 2.6.2.198.g614a2ac |
| Sender | robomod@news.nic.it |
| List-ID | <linux-kernel.vger.kernel.org> |
| X-Mailing-List | linux-kernel@vger.kernel.org |
| Approved | robomod@news.nic.it |
| Lines | 93 |
| Organization | linux.* mail to news gateway |
| X-Original-Cc | linaro-kernel@lists.linaro.org, linux-pm@vger.kernel.org, ashwin.chaugule@linaro.org, Viresh Kumar <viresh.kumar@linaro.org>, linux-kernel@vger.kernel.org (open list) |
| X-Original-Date | Thu, 3 Dec 2015 09:37:49 +0530 |
| X-Original-Message-ID | <c33ac949188af81735956c6c9e43204646b9f49a.1449115453.git.viresh.kumar@linaro.org> |
| X-Original-References | <cover.1449115453.git.viresh.kumar@linaro.org> |
| X-Original-Sender | linux-kernel-owner@vger.kernel.org |
| Xref | csiph.com linux.kernel:1282682 |
Show key headers only | View raw
We are comparing policy->governor against cpufreq_gov_ondemand to make
sure that we update sampling rate only for the concerned CPUs. But that
isn't enough.
In case of governor_per_policy, there can be multiple instances of
ondemand governor and we will always end up updating all of them with
current code. What we rather need to do, is to compare dbs_data with
poilcy->governor_data, which will match only for the policies governed
by dbs_data.
This code is also racy as the governor might be getting stopped at that
time and we may end up scheduling work for a policy, which we have just
disabled.
Fix that by protecting the entire function with &od_dbs_cdata.mutex,
which will prevent against races with policy START/STOP/etc.
After these locks are in place, we can safely get the policy via per-cpu
dbs_info.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/cpufreq/cpufreq_ondemand.c | 35 ++++++++++++++++++++++++++++-------
1 file changed, 28 insertions(+), 7 deletions(-)
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
index 03ac6ce54042..089ca6a6ca02 100644
--- a/drivers/cpufreq/cpufreq_ondemand.c
+++ b/drivers/cpufreq/cpufreq_ondemand.c
@@ -252,20 +252,39 @@ static void update_sampling_rate(struct dbs_data *dbs_data,
od_tuners->sampling_rate = new_rate = max(new_rate,
dbs_data->min_sampling_rate);
+ /*
+ * Lock governor so that governor start/stop can't execute in parallel.
+ */
+ mutex_lock(&od_dbs_cdata.mutex);
+
for_each_online_cpu(cpu) {
struct cpufreq_policy *policy;
struct od_cpu_dbs_info_s *dbs_info;
+ struct cpu_dbs_info *cdbs;
+ struct cpu_common_dbs_info *shared;
unsigned long next_sampling, appointed_at;
- policy = cpufreq_cpu_get(cpu);
- if (!policy)
+ dbs_info = &per_cpu(od_cpu_dbs_info, cpu);
+ cdbs = &dbs_info->cdbs;
+ shared = cdbs->shared;
+
+ /*
+ * A valid shared and shared->policy means governor hasn't
+ * stopped or exited yet.
+ */
+ if (!shared || !shared->policy)
continue;
- if (policy->governor != &cpufreq_gov_ondemand) {
- cpufreq_cpu_put(policy);
+
+ policy = shared->policy;
+
+ /*
+ * Update sampling rate for CPUs whose policy is governed by
+ * dbs_data. In case of governor_per_policy, only a single
+ * policy will be governed by dbs_data, otherwise there can be
+ * multiple policies that are governed by the same dbs_data.
+ */
+ if (dbs_data != policy->governor_data)
continue;
- }
- dbs_info = &per_cpu(od_cpu_dbs_info, cpu);
- cpufreq_cpu_put(policy);
if (!delayed_work_pending(&dbs_info->cdbs.dwork))
continue;
@@ -281,6 +300,8 @@ static void update_sampling_rate(struct dbs_data *dbs_data,
}
}
+
+ mutex_unlock(&od_dbs_cdata.mutex);
}
static ssize_t store_sampling_rate(struct dbs_data *dbs_data, const char *buf,
--
2.6.2.198.g614a2ac
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to linux.kernel | Previous | Next | Find similar | Unroll thread
[PATCH V2 1/6] cpufreq: ondemand: Update sampling rate only for concerned policies Viresh Kumar <viresh.kumar@linaro.org> - 2015-12-03 05:10 +0100
csiph-web