Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752292AbcKGHxy (ORCPT ); Mon, 7 Nov 2016 02:53:54 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:39890 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752187AbcKGHxx (ORCPT ); Mon, 7 Nov 2016 02:53:53 -0500 Subject: Re: [PATCH 1/2] cpufreq: powernv: Adding fast_switch for schedutil To: Viresh Kumar References: <1478237255-4258-1-git-send-email-akshay.adiga@linux.vnet.ibm.com> <20161104063322.GA3414@vireshk-i7> Cc: rjw@rjwysocki.net, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org From: Akshay Adiga Date: Mon, 7 Nov 2016 13:02:04 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <20161104063322.GA3414@vireshk-i7> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16110707-0040-0000-0000-000001F6B914 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16110707-0041-0000-0000-00000AD5D9D3 Message-Id: X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2016-11-07_02:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1609300000 definitions=main-1611070143 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2429 Lines: 73 Thanks Viresh for taking a look at it. I will make the mentioned changes in the next version of the patch. Regards Akshay Adiga On 11/04/2016 12:03 PM, Viresh Kumar wrote: > On 04-11-16, 10:57, Akshay Adiga wrote: >> Adding fast_switch which does light weight operation to >> set the desired pstate. >> >> Signed-off-by: Akshay Adiga >> --- >> drivers/cpufreq/powernv-cpufreq.c | 22 +++++++++++++++++++++- >> 1 file changed, 21 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/cpufreq/powernv-cpufreq.c b/drivers/cpufreq/powernv-cpufreq.c >> index d3ffde8..09a0496 100644 >> --- a/drivers/cpufreq/powernv-cpufreq.c >> +++ b/drivers/cpufreq/powernv-cpufreq.c >> @@ -752,9 +752,12 @@ static int powernv_cpufreq_cpu_init(struct cpufreq_policy *policy) >> spin_lock_init(&gpstates->gpstate_lock); >> ret = cpufreq_table_validate_and_show(policy, powernv_freqs); >> >> - if (ret < 0) >> + if (ret < 0) { >> kfree(policy->driver_data); >> + return ret; >> + } >> >> + policy->fast_switch_possible = true; >> return ret; >> } >> >> @@ -897,6 +900,22 @@ static void powernv_cpufreq_stop_cpu(struct cpufreq_policy *policy) >> del_timer_sync(&gpstates->timer); >> } >> >> +static unsigned int powernv_fast_switch(struct cpufreq_policy *policy, >> + unsigned int target_freq) >> +{ >> + int index; >> + struct powernv_smp_call_data freq_data; >> + >> + index = cpufreq_table_find_index_dl(policy, target_freq); >> + if (index < 0 || index >= powernv_pstate_info.nr_pstates) >> + return CPUFREQ_ENTRY_INVALID; > I don't think such a check is required at all. It wouldn't happen without a BUG > in kernel. >> + freq_data.pstate_id = powernv_freqs[index].driver_data; >> + freq_data.gpstate_id = powernv_freqs[index].driver_data; >> + set_pstate(&freq_data); >> + >> + return powernv_freqs[index].frequency; >> +} >> + >> static struct cpufreq_driver powernv_cpufreq_driver = { >> .name = "powernv-cpufreq", >> .flags = CPUFREQ_CONST_LOOPS, >> @@ -904,6 +923,7 @@ static struct cpufreq_driver powernv_cpufreq_driver = { >> .exit = powernv_cpufreq_cpu_exit, >> .verify = cpufreq_generic_frequency_table_verify, >> .target_index = powernv_cpufreq_target_index, >> + .fast_switch = powernv_fast_switch, >> .get = powernv_cpufreq_get, >> .stop_cpu = powernv_cpufreq_stop_cpu, >> .attr = powernv_cpu_freq_attr, >> -- >> 2.7.4