From patchwork Thu Mar 9 11:45:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Viresh Kumar X-Patchwork-Id: 95110 Delivered-To: patch@linaro.org Received: by 10.140.82.71 with SMTP id g65csp318801qgd; Thu, 9 Mar 2017 03:46:02 -0800 (PST) X-Received: by 10.98.149.80 with SMTP id p77mr13519984pfd.56.1489059962662; Thu, 09 Mar 2017 03:46:02 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n1si6219661pgc.376.2017.03.09.03.46.02; Thu, 09 Mar 2017 03:46:02 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932279AbdCILqB (ORCPT + 25 others); Thu, 9 Mar 2017 06:46:01 -0500 Received: from mail-pf0-f172.google.com ([209.85.192.172]:33705 "EHLO mail-pf0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932257AbdCILp6 (ORCPT ); Thu, 9 Mar 2017 06:45:58 -0500 Received: by mail-pf0-f172.google.com with SMTP id w189so28055750pfb.0 for ; Thu, 09 Mar 2017 03:45:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=m2zi9E1Wzn/Q0NQ3CDi+IzVAr0zLPwDntGZ7IMHpt8Q=; b=FeqKiZzrtFqLj2elriJc+UatB4AtaqQPf+v/rD8qJJc605QJYT6nsrChpWrzBpSA6s JPFDTSs6QxTz3ewWlqo6BoYurZGsE91EODxKOPlrt4uD3f/+zRPIvSoHoR6RCMVljqtf U3h+Bl5o1HjGQYIb/jpm7DLSTyiGKK+1mYlXo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=m2zi9E1Wzn/Q0NQ3CDi+IzVAr0zLPwDntGZ7IMHpt8Q=; b=C3KRBgbHKV2QVQx2fKQ1gYMSDzFyLrexTVFEUy3/wa0aJMzk0mYc51bVC/OGzRFjNj zKJ5KXg0JMf2Mu35f/4nnQhIwUHDLRr9AMFprUGl8a0MNCRR+lKiXaUAUAP2Jg94DguX bGgk9i2WaC6Swy/UETSS38MA5SofeA3BP4lvcM0RgE9BhZse/gjjTmvq65HMdUgVNF0T peN6MEBrKKS1mKRAhJ9/KuwCyTrGvy81lnFgo2B6Lfh9pNetLuwMm65TKgbpan9vXc4s db3BBvQbIjNaWVTLXDLWgYVsz/ajrcANQ0BmqVcDMH5dwBtOhNcjyDxr3EZNv75q8o9B ZBnA== X-Gm-Message-State: AMke39mY7inKRlZy+EaN93XR/zJFQGEF1ifQtzqtJe82SWh3mqlIMWS8l8dystVgYJVL7+ng X-Received: by 10.98.4.71 with SMTP id 68mr13594411pfe.92.1489059951709; Thu, 09 Mar 2017 03:45:51 -0800 (PST) Received: from localhost ([122.171.239.200]) by smtp.gmail.com with ESMTPSA id z74sm12078777pfd.70.2017.03.09.03.45.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Mar 2017 03:45:50 -0800 (PST) From: Viresh Kumar To: Rafael Wysocki , Ingo Molnar , Peter Zijlstra Cc: linaro-kernel@lists.linaro.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Vincent Guittot , smuckle.linux@gmail.com, juri.lelli@arm.com, Morten.Rasmussen@arm.com, patrick.bellasi@arm.com, eas-dev@lists.linaro.org, Viresh Kumar Subject: [RFC 4/9] sched: cpufreq: extend irq work to support fast switches Date: Thu, 9 Mar 2017 17:15:14 +0530 Message-Id: <9d2ff35af95f5accb40d3447e6ff5970c0ba405e.1489058244.git.viresh.kumar@linaro.org> X-Mailer: git-send-email 2.7.1.410.g6faf27b In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Steve Muckle In preparation for schedutil receiving sched cpufreq callbacks for remote CPUs, extend the irq work in schedutil to support policies with fast switching enabled in addition to policies using the slow path. Signed-off-by: Steve Muckle [ vk: minor code updates ] Signed-off-by: Viresh Kumar --- kernel/sched/cpufreq_schedutil.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) -- 2.7.1.410.g6faf27b diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c index f5ffe241812e..a418544c51b1 100644 --- a/kernel/sched/cpufreq_schedutil.c +++ b/kernel/sched/cpufreq_schedutil.c @@ -88,6 +88,17 @@ static bool sugov_should_update_freq(struct sugov_policy *sg_policy, u64 time) return delta_ns >= sg_policy->freq_update_delay_ns; } +static void sugov_fast_switch(struct cpufreq_policy *policy, + unsigned int next_freq) +{ + next_freq = cpufreq_driver_fast_switch(policy, next_freq); + if (next_freq == CPUFREQ_ENTRY_INVALID) + return; + + policy->cur = next_freq; + trace_cpu_frequency(next_freq, smp_processor_id()); +} + static void sugov_update_commit(struct sugov_policy *sg_policy, u64 time, unsigned int next_freq) { @@ -100,12 +111,7 @@ static void sugov_update_commit(struct sugov_policy *sg_policy, u64 time, } sg_policy->next_freq = next_freq; sg_policy->last_freq_update_time = time; - next_freq = cpufreq_driver_fast_switch(policy, next_freq); - if (next_freq == CPUFREQ_ENTRY_INVALID) - return; - - policy->cur = next_freq; - trace_cpu_frequency(next_freq, smp_processor_id()); + sugov_fast_switch(policy, next_freq); } else if (sg_policy->next_freq != next_freq) { sg_policy->next_freq = next_freq; sg_policy->last_freq_update_time = time; @@ -303,9 +309,15 @@ static void sugov_work(struct kthread_work *work) static void sugov_irq_work(struct irq_work *irq_work) { - struct sugov_policy *sg_policy; + struct sugov_policy *sg_policy = container_of(irq_work, struct + sugov_policy, irq_work); + struct cpufreq_policy *policy = sg_policy->policy; - sg_policy = container_of(irq_work, struct sugov_policy, irq_work); + if (policy->fast_switch_enabled) { + sugov_fast_switch(policy, sg_policy->next_freq); + sg_policy->work_in_progress = false; + return; + } /* * For RT and deadline tasks, the schedutil governor shoots the