public inbox for linux-pm@vger.kernel.org
 help / color / mirror / Atom feed
From: Pratyush Yadav <ptyadav@amazon.de>
To: <linux-pm@vger.kernel.org>
Cc: Pratyush Yadav <ptyadav@amazon.de>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	Len Brown <lenb@kernel.org>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	Viresh Kumar <viresh.kumar@linaro.org>,
	Robert Moore <robert.moore@intel.com>,
	<linux-acpi@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<devel@acpica.org>
Subject: [PATCH 2/2] cpufreq: intel_pstate: use acpi perflib to update turbo frequency
Date: Wed, 21 Dec 2022 16:52:03 +0100	[thread overview]
Message-ID: <20221221155203.11347-3-ptyadav@amazon.de> (raw)
In-Reply-To: <20221221155203.11347-1-ptyadav@amazon.de>

The _PSS table does not contain the whole turbo frequency range, but
only +1 MHz above the max non-turbo frequency. The pstate driver then
updates the ACPI perf data with the actual max frequency. But doing this
here directly would mean that frequency QoS constraints that acpi
perflib imposes do not get updated.

This is a problem when a CPU is brought offline and online again. When
the CPU first comes online, cpufreq is not initialized. So PPC
constraints are not applied (because ignore_ppc == -1). This leads to
the frequency QoS allowing all values from acpi perflib side.

Once everything is initialized and then userspace brings a CPU down and
up again, intel_pstate_init_acpi_perf_limits() calls
acpi_processor_register_performance(), which then eventually calls
acpi_processor_get_platform_limit(). There PPC is state 0, the turbo
state, but the frequency has not been updated yet. So when
acpi_processor_get_platform_limit() sets QoS constraints, it sets them
with the max_non_turbo + 1 value.

Now even though intel_pstate says it can support the full turbo speed,
cpufreq only asks for up to max_non_turbo + 1 MHz since that is what
satisfies all constraints.

Call into acpi perflib's function to update the frequency so it can also
update the QoS constraints with the new value.

Signed-off-by: Pratyush Yadav <ptyadav@amazon.de>
---
 drivers/cpufreq/intel_pstate.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
index fd73d6d2b808..b312f87ff522 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
@@ -464,8 +464,9 @@ static void intel_pstate_init_acpi_perf_limits(struct cpufreq_policy *policy)
 	 * Also need to convert to MHz as _PSS freq is in MHz.
 	 */
 	if (!global.turbo_disabled)
-		cpu->acpi_perf_data.states[0].core_frequency =
-					policy->cpuinfo.max_freq / 1000;
+		acpi_processor_fixup_perf_state(policy->cpu, 0,
+						policy->cpuinfo.max_freq / 1000);
+
 	cpu->valid_pss_table = true;
 	pr_debug("_PPC limits will be enforced\n");
 
-- 
2.38.1


  parent reply	other threads:[~2022-12-21 15:52 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-21 15:52 [PATCH 0/2] intel_pstate: fix turbo not being used after a processor is rebooted Pratyush Yadav
2022-12-21 15:52 ` [PATCH 1/2] acpi: processor: allow fixing up the frequency for a performance state Pratyush Yadav
2022-12-22 16:23   ` Rafael J. Wysocki
2022-12-22 22:18     ` Pratyush Yadav
2022-12-21 15:52 ` Pratyush Yadav [this message]
2022-12-21 21:34 ` [PATCH 0/2] intel_pstate: fix turbo not being used after a processor is rebooted srinivas pandruvada
2022-12-22 10:39   ` Pratyush Yadav
2022-12-23 18:10     ` srinivas pandruvada
2022-12-25  0:28       ` srinivas pandruvada
2022-12-27 15:38         ` Pratyush Yadav
2022-12-27 15:57           ` Rafael J. Wysocki
2022-12-27 16:40           ` srinivas pandruvada
2022-12-27 17:02             ` Rafael J. Wysocki
2022-12-27 17:13               ` Rafael J. Wysocki
2022-12-27 18:07               ` srinivas pandruvada
2022-12-27 18:47                 ` Rafael J. Wysocki
2022-12-27 18:49                   ` srinivas pandruvada
2022-12-27 18:54                     ` Rafael J. Wysocki
2022-12-27 16:15 ` Rafael J. Wysocki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221221155203.11347-3-ptyadav@amazon.de \
    --to=ptyadav@amazon.de \
    --cc=devel@acpica.org \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rafael@kernel.org \
    --cc=robert.moore@intel.com \
    --cc=srinivas.pandruvada@linux.intel.com \
    --cc=viresh.kumar@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox