Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp371354imm; Wed, 18 Jul 2018 03:44:34 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcKXV6Kziv+Uuv8C7uEXgt4/OnkNBmDmwsW2lV2qygmF9oWyfHM/x9rYNksgwerEVvK5tJP X-Received: by 2002:a17:902:bd93:: with SMTP id q19-v6mr5391504pls.238.1531910674331; Wed, 18 Jul 2018 03:44:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531910674; cv=none; d=google.com; s=arc-20160816; b=KMcz5vldUKmIqWH/uuhpvWZhkh+evcvg3TgoK4YnAvZEtooRtPlCTI9Rnpmp3b+blx TDMdVBbSYwOucfbibd7hVtLNVOTYvw9TPO2/yhrjR1xxgggN0MTKwZ4+z/Afp1/pY5no hq/ve3ULiaaaU7b92xv0vRe8LksLljBWT7BLQ0g96Rbha2jPhoCvCFLQbhS0leIFOFau LIYSYpXK2FOITH2DVzrDCC6YHGYpfiPANsQu1S8ExupruULSz9DHuTXReXkZ3ZNcEZY0 wboeL/p//emchwjmwAszz8bt5gpvpd4Ny+XRBOAhtFm69V6AAvv9RsloCBwFEw6cAj5m 3JYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=3B7/ILsGBdnMQcedivbJtowXaNVoPRbts4HEdsPxXxw=; b=NfQn7ceL0a2sqsIYHK2u17IIBjpYrO5QKIW3koLBzg0vFkd5I0z2QVZWPGVSUMfhm7 Ndycpu6snXItYs5hVUJhOqv9PorGmdLB7q3Pz/a0j7uylMPAGC5I64EQJIqK4LRa/ura 9RcnHLgq1OmL/HwkljMHFDHU5zKf0aqO65biIzTRD0ZB78g3PsVk1RC4i3h8roPEeMVo na3NjuHRlZowRvBYtFOYRzjK6b7XzHkWZ96uu1L+f6fZ7nQAZQAqnzsTlcfGf+iKvAD+ BN6N5O+RMtEnY9sTjYjvPZV3OGvqn4JmVuEStdvcfoWHUlOPVwXL6vja8x1ejzeFgw/2 dvrA== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k185-v6si3125940pgd.15.2018.07.18.03.44.19; Wed, 18 Jul 2018 03:44:34 -0700 (PDT) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728520AbeGRLUw (ORCPT + 99 others); Wed, 18 Jul 2018 07:20:52 -0400 Received: from smtp.nue.novell.com ([195.135.221.5]:41301 "EHLO smtp.nue.novell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726264AbeGRLUw (ORCPT ); Wed, 18 Jul 2018 07:20:52 -0400 Received: from emea4-mta.ukb.novell.com ([10.120.13.87]) by smtp.nue.novell.com with ESMTP (TLS encrypted); Wed, 18 Jul 2018 12:43:33 +0200 Received: from suselix (nwb-a10-snat.microfocus.com [10.120.13.202]) by emea4-mta.ukb.novell.com with ESMTP (TLS encrypted); Wed, 18 Jul 2018 11:43:02 +0100 Date: Wed, 18 Jul 2018 12:43:00 +0200 From: Andreas Herrmann To: "Rafael J. Wysocki" Cc: Srinivas Pandruvada , Linux PM , "Rafael J. Wysocki" , Peter Zijlstra , Frederic Weisbecker , Viresh Kumar , Linux Kernel Mailing List Subject: Re: [PATCH] cpufreq: intel_pstate: Register when ACPI PCCH is present Message-ID: <20180718104300.dwgbqbnllvhwzrea@suselix> References: <20180717065048.74mmgk4t5utjaa6a@suselix> <20180717140336.ayovaz4ksdlak6bb@suselix> <8115130.Fhkpr82c7G@aspire.rjw.lan> <2386802.jRaeHeNqoJ@aspire.rjw.lan> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <2386802.jRaeHeNqoJ@aspire.rjw.lan> User-Agent: NeoMutt/20170421 (1.8.2) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jul 17, 2018 at 08:06:54PM +0200, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki > > Currently, intel_pstate doesn't load if _PSS is not present on > HP Proliant systems, because it expects the firmware to take over > CPU performance scaling in that case. However, if ACPI PCCH is > present, the firmware expects the kernel to use it for CPU > performance scaling and the pcc-cpufreq driver is loaded for that. > > Unfortunately, the firmware interface used by that driver is not > scalable for fundamental reasons, so pcc-cpufreq is way suboptimal > on systems with more than just a few CPUs. In fact, it is better to > avoid using it at all. > > For this reason, modify intel_pstate to look for ACPI PCCH if _PSS > is not present and register if it is there. Also prevent the > pcc-cpufreq driver from trying to initialize if intel_pstate has > been registered already. > > Fixes: fbbcdc0744da (intel_pstate: skip the driver if ACPI has power mgmt option) > Reported-by: Andreas Herrmann > Reviewed-by: Andreas Herrmann > Acked-by: Srinivas Pandruvada > Signed-off-by: Rafael J. Wysocki > --- > > This is a replacement for https://patchwork.kernel.org/patch/10530091/ > > In addition to the intel_pstate changes in the above, it also > prevents pcc-cpufreq from trying to initialize (which will fail > ultimately, but may confuse the firmware in the meantime). > > Andreas, please test this one and let me know if it still works for you. Done that (with system in "Dynamic Power Savings Mode"). It still works and system was stable. FYI, as a sniff test I've run a kernbench test. I now repeat the test with system switched to "OS control mode". Just in case -- if there was interference with platform code while system was in "Dynamic Power Savings Mode" (significantly affecting performance) I might spot it this way. Andreas > Thanks, > Rafael > > --- > drivers/cpufreq/intel_pstate.c | 17 ++++++++++++++++- > drivers/cpufreq/pcc-cpufreq.c | 4 ++++ > 2 files changed, 20 insertions(+), 1 deletion(-) > > Index: linux-pm/drivers/cpufreq/intel_pstate.c > =================================================================== > --- linux-pm.orig/drivers/cpufreq/intel_pstate.c > +++ linux-pm/drivers/cpufreq/intel_pstate.c > @@ -2391,6 +2391,18 @@ static bool __init intel_pstate_no_acpi_ > return true; > } > > +static bool __init intel_pstate_no_acpi_pcch(void) > +{ > + acpi_status status; > + acpi_handle handle; > + > + status = acpi_get_handle(NULL, "\\_SB", &handle); > + if (ACPI_FAILURE(status)) > + return true; > + > + return !acpi_has_method(handle, "PCCH"); > +} > + > static bool __init intel_pstate_has_acpi_ppc(void) > { > int i; > @@ -2450,7 +2462,10 @@ static bool __init intel_pstate_platform > > switch (plat_info[idx].data) { > case PSS: > - return intel_pstate_no_acpi_pss(); > + if (!intel_pstate_no_acpi_pss()) > + return false; > + > + return intel_pstate_no_acpi_pcch(); > case PPC: > return intel_pstate_has_acpi_ppc() && !force_load; > } > Index: linux-pm/drivers/cpufreq/pcc-cpufreq.c > =================================================================== > --- linux-pm.orig/drivers/cpufreq/pcc-cpufreq.c > +++ linux-pm/drivers/cpufreq/pcc-cpufreq.c > @@ -580,6 +580,10 @@ static int __init pcc_cpufreq_init(void) > { > int ret; > > + /* Skip initialization if another cpufreq driver is there. */ > + if (cpufreq_get_current_driver()) > + return 0; > + > if (acpi_disabled) > return 0; > > >