linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost
@ 2024-05-08  7:21 Perry Yuan
  2024-05-08  7:21 ` [PATCH v10 1/7] cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h Perry Yuan
                   ` (8 more replies)
  0 siblings, 9 replies; 23+ messages in thread
From: Perry Yuan @ 2024-05-08  7:21 UTC (permalink / raw)
  To: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

Hi all,
The patchset series add core performance boost feature for AMD pstate
driver including passisve ,guide and active mode support.

User can change core frequency boost control with a new sysfs entry:

"/sys/devices/system/cpu/amd_pstate/cpb_boost"


1) globally disable core boost:
$ sudo bash -c "echo 0 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
$ lscpu -ae
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ      MHZ
  0    0      0    0 0:0:0:0          yes 4201.0000 400.0000 2983.578
  1    0      0    1 1:1:1:0          yes 4201.0000 400.0000 2983.578
  2    0      0    2 2:2:2:0          yes 4201.0000 400.0000 2583.855
  3    0      0    3 3:3:3:0          yes 4201.0000 400.0000 2983.578
  4    0      0    4 4:4:4:0          yes 4201.0000 400.0000 2983.578

2) globally enable core boost:
$ sudo bash -c "echo 1 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
$ lscpu -ae
   0    0      0    0 0:0:0:0          yes 5759.0000 400.0000 2983.578
  1    0      0    1 1:1:1:0          yes 5759.0000 400.0000 2983.578
  2    0      0    2 2:2:2:0          yes 5759.0000 400.0000 2983.578
  3    0      0    3 3:3:3:0          yes 5759.0000 400.0000 2983.578
  4    0      0    4 4:4:4:0          yes 5759.0000 400.0000 2983.578


============================================================================
The V9 patches add per CPU boost control, user can enable/disable CPUs boost
as the below command tested on a laptop system.
# before
  CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
  0    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1666.7740
  1    0      0    0 0:0:0:0          yes 4208.0000 400.0000  400.0000
  2    0      0    1 1:1:1:0          yes 4208.0000 400.0000 3386.1260
  3    0      0    1 1:1:1:0          yes 4208.0000 400.0000  400.0000
$ sudo rdmsr 0xc00102b3 -p 0
10a6

$ sudo bash -c "echo 1 > /sys/devices/system/cpu/cpu0/cpufreq/boost"
# after
  CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
    0    0      0    0 0:0:0:0          yes 3501.0000 400.0000  400.0000
    1    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1391.0690
    2    0      0    1 1:1:1:0          yes 4208.0000 400.0000 3654.4541
    3    0      0    1 1:1:1:0          yes 4208.0000 400.0000  400.0000
$ sudo rdmsr 0xc00102b3 -p 0
108a


The patches have been tested with the AMD 7950X processor and many users
would like to get core boost control enabled for power saving.

Perry.


Changes from v9:
 * change per CPU boost sysfs file name to `boost` (Mario)
 * rebased to latest linux-pm/bleeding-edge

Changes from v8:
 * pick RB flag for patch 4 (Mario)
 * change boot_cpu_has to cpu_feature_enabled for patch 2 (Boris)
 * merge patch 6 into patch 3 (Mario)
 * add two patch for per CPU boost control patch 6 & 7(Mario)
 * rebased to latest linux-pm/bleeding-edge

Changes from v7:
 * fix the mutext locking issue in the sysfs file update(Ray, Mario)
 * pick ack flag from Ray
 * use X86_FEATURE_CPB to verify the CPB function in Patch #2(Ray)
 * rerun the testing to check function works well
 * rebased to linux-pm/bleeding-edge latest

Changes from v6:
 * reword patch 2 commit log (Gautham)
 * update cover letter description(Gautham)
 * rebase to kernel v6.9-rc5

Changes from v4:
 * drop the legacy boost remove patch, let us keep the legacy interface
   in case some applications break.
 * rebase to linux-pm/bleeding-edge branch
 * rework the patchset base on [PATCH v8 0/8] AMD Pstate Fixes And
   Enhancements which has some intial work done there.

Changes from v4:
 * move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
 * pick RB flag from Gautham R. Shenoy
 * add Cc Oleksandr Natalenko <oleksandr@natalenko.name>
 * rebase to latest linux-pm/bleeding-edge branch
 * rebase the patch set on top of [PATCH v7 0/6] AMD Pstate Fixes And Enhancements
 * update  [PATCH v7 2/6] to use MSR_K7_HWCR_CPB_DIS_BIT

Changes from v3:
 * rebased to linux-pm/bleeding-edge v6.8
 * rename global to amd_pstate_global_params(Oleksandr Natalenko)
 * remove comments for boot_supported in amd_pstate.h
 * fix the compiler warning for amd-pstate-ut.ko
 * use for_each_online_cpu in cpb_boost_store which fix the null pointer
   error during testing
 * fix the max frequency value to be KHz when cpb boost disabled(Gautham R. Shenoy)

Changes from v2:
 * move global struct to amd-pstate.h
 * fix the amd-pstate-ut with new cpb control interface

Changes from v1:
 * drop suspend/resume fix patch 6/7 because of the fix should be in
   another fix series instead of CPB feature
 * move the set_boost remove patch to the last(Mario)
 * Fix commit info with "Closes:" (Mario)
 * simplified global.cpb_supported initialization(Mario)
 * Add guide mode support for CPB control
 * Fixed some Doc typos and add guide mode info to Doc as well.

v1: https://lore.kernel.org/all/cover.1706255676.git.perry.yuan@amd.com/
v2: https://lore.kernel.org/lkml/cover.1707047943.git.perry.yuan@amd.com/
v3: https://lore.kernel.org/lkml/cover.1707297581.git.perry.yuan@amd.com/
v4: https://lore.kernel.org/lkml/cover.1710322310.git.perry.yuan@amd.com/
v5: https://lore.kernel.org/lkml/cover.1710473712.git.perry.yuan@amd.com/
v6: https://lore.kernel.org/lkml/cover.1710754236.git.perry.yuan@amd.com/
v7: https://lore.kernel.org/lkml/cover.1713861200.git.perry.yuan@amd.com/
v8: https://lore.kernel.org/lkml/cover.1714112854.git.perry.yuan@amd.com/
v9: https://lore.kernel.org/lkml/cover.1714989803.git.perry.yuan@amd.com/

Perry Yuan (7):
  cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
  cpufreq: amd-pstate: initialize new core precision boost state
  cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control
  cpufreq: amd-pstate: fix the MSR highest perf will be reset issue
    while cpb boost off
  Documentation: cpufreq: amd-pstate: introduce the new cpu boost
    control method
  cpufreq: amd-pstate: introduce per CPU frequency boost control
  Documentation: cpufreq: amd-pstate: update doc for Per CPU boost
    control method

 Documentation/admin-guide/pm/amd-pstate.rst |  30 ++++
 arch/x86/include/asm/msr-index.h            |   2 +
 drivers/cpufreq/acpi-cpufreq.c              |   2 -
 drivers/cpufreq/amd-pstate-ut.c             |   2 +-
 drivers/cpufreq/amd-pstate.c                | 189 ++++++++++++++++++--
 include/linux/amd-pstate.h                  |  14 ++
 6 files changed, 225 insertions(+), 14 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 23+ messages in thread

* [PATCH v10 1/7] cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
  2024-05-08  7:21 [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost Perry Yuan
@ 2024-05-08  7:21 ` Perry Yuan
  2024-05-08  7:21 ` [PATCH v10 2/7] cpufreq: amd-pstate: initialize new core precision boost state Perry Yuan
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 23+ messages in thread
From: Perry Yuan @ 2024-05-08  7:21 UTC (permalink / raw)
  To: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

There are some other drivers also need to use the
MSR_K7_HWCR_CPB_DIS_BIT for CPB control bit, so it makes sense to move
the definition to a common header file to allow other driver to use it.

No intentional functional impact.

Suggested-by: Gautham Ranjal Shenoy <gautham.shenoy@amd.com>
Signed-off-by: Perry Yuan <perry.yuan@amd.com>
Acked-by: Rafael J. Wysocki <rafael@kernel.org>
Acked-by: Huang Rui <ray.huang@amd.com>
---
 arch/x86/include/asm/msr-index.h | 2 ++
 drivers/cpufreq/acpi-cpufreq.c   | 2 --
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
index e72c2b872957..8738a7b3917d 100644
--- a/arch/x86/include/asm/msr-index.h
+++ b/arch/x86/include/asm/msr-index.h
@@ -782,6 +782,8 @@
 #define MSR_K7_HWCR_IRPERF_EN		BIT_ULL(MSR_K7_HWCR_IRPERF_EN_BIT)
 #define MSR_K7_FID_VID_CTL		0xc0010041
 #define MSR_K7_FID_VID_STATUS		0xc0010042
+#define MSR_K7_HWCR_CPB_DIS_BIT		25
+#define MSR_K7_HWCR_CPB_DIS		BIT_ULL(MSR_K7_HWCR_CPB_DIS_BIT)
 
 /* K6 MSRs */
 #define MSR_K6_WHCR			0xc0000082
diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c
index 37f1cdf46d29..2fc82831bddd 100644
--- a/drivers/cpufreq/acpi-cpufreq.c
+++ b/drivers/cpufreq/acpi-cpufreq.c
@@ -50,8 +50,6 @@ enum {
 #define AMD_MSR_RANGE		(0x7)
 #define HYGON_MSR_RANGE		(0x7)
 
-#define MSR_K7_HWCR_CPB_DIS	(1ULL << 25)
-
 struct acpi_cpufreq_data {
 	unsigned int resume;
 	unsigned int cpu_feature;
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v10 2/7] cpufreq: amd-pstate: initialize new core precision boost state
  2024-05-08  7:21 [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost Perry Yuan
  2024-05-08  7:21 ` [PATCH v10 1/7] cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h Perry Yuan
@ 2024-05-08  7:21 ` Perry Yuan
  2024-05-08  7:21 ` [PATCH v10 3/7] cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control Perry Yuan
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 23+ messages in thread
From: Perry Yuan @ 2024-05-08  7:21 UTC (permalink / raw)
  To: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

From: Perry Yuan <Perry.Yuan@amd.com>

Add one global `global_params` to represent CPU Performance Boost(cpb)
state for cpu frequency scaling, both active and passive modes all can
support CPU cores frequency boosting control which is based on the BIOS
setting, while BIOS turn on the "Core Performance Boost", it will
allow OS control each core highest perf limitation from OS side.

The active, guided and passive modes of the amd-pstate driver can
support frequency boost control when the "Core Performance Boost"
(CPB) feature is enabled in the BIOS.  When enabled in BIOS, the user
has an option at runtime to allow/disallow the cores from operating in
the boost frequency range.

Add an amd_pstate_global_params object to record whether CPB is
enabled in BIOS, and if it has been activated by the user

Reported-by: Artem S. Tashkinov" <aros@gmx.com>
Cc: Oleksandr Natalenko <oleksandr@natalenko.name>
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217931
Signed-off-by: Perry Yuan <Perry.Yuan@amd.com>
---
 drivers/cpufreq/amd-pstate.c | 45 +++++++++++++++++++++++++++---------
 include/linux/amd-pstate.h   | 13 +++++++++++
 2 files changed, 47 insertions(+), 11 deletions(-)

diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
index 2db095867d03..f7dab0f7b452 100644
--- a/drivers/cpufreq/amd-pstate.c
+++ b/drivers/cpufreq/amd-pstate.c
@@ -68,6 +68,8 @@ static int cppc_state = AMD_PSTATE_UNDEFINED;
 static bool cppc_enabled;
 static bool amd_pstate_prefcore = true;
 static struct quirk_entry *quirks;
+struct amd_pstate_global_params amd_pstate_global_params;
+EXPORT_SYMBOL_GPL(amd_pstate_global_params);
 
 /*
  * AMD Energy Preference Performance (EPP)
@@ -647,7 +649,7 @@ static int amd_pstate_set_boost(struct cpufreq_policy *policy, int state)
 
 	if (!cpudata->boost_supported) {
 		pr_err("Boost mode is not supported by this processor or SBIOS\n");
-		return -EINVAL;
+		return -ENOTSUPP;
 	}
 
 	if (state)
@@ -665,18 +667,31 @@ static int amd_pstate_set_boost(struct cpufreq_policy *policy, int state)
 	return 0;
 }
 
-static void amd_pstate_boost_init(struct amd_cpudata *cpudata)
+static int amd_pstate_boost_init(struct amd_cpudata *cpudata)
 {
-	u32 highest_perf, nominal_perf;
+	u64 boost_val;
+	int ret;
 
-	highest_perf = READ_ONCE(cpudata->highest_perf);
-	nominal_perf = READ_ONCE(cpudata->nominal_perf);
+	if (!cpu_feature_enabled(X86_FEATURE_CPB)) {
+		cpudata->boost_supported = false;
+		current_pstate_driver->boost_enabled = false;
+		pr_debug_once("Boost CPB capabilities not present in the processor\n");
+		return -ENOTSUPP;
+	}
 
-	if (highest_perf <= nominal_perf)
-		return;
+	ret = rdmsrl_on_cpu(cpudata->cpu, MSR_K7_HWCR, &boost_val);
+	if (ret) {
+		pr_err_once("failed to read initial CPU boost state!\n");
+		return ret;
+	}
 
-	cpudata->boost_supported = true;
-	current_pstate_driver->boost_enabled = true;
+	amd_pstate_global_params.cpb_supported = !(boost_val & MSR_K7_HWCR_CPB_DIS);
+	if (amd_pstate_global_params.cpb_supported)
+		current_pstate_driver->boost_enabled = true;
+
+	amd_pstate_global_params.cpb_boost = amd_pstate_global_params.cpb_supported;
+
+	return ret;
 }
 
 static void amd_perf_ctl_reset(unsigned int cpu)
@@ -899,6 +914,11 @@ static int amd_pstate_cpu_init(struct cpufreq_policy *policy)
 
 	amd_pstate_init_prefcore(cpudata);
 
+	/* initialize cpu cores boot state */
+	ret = amd_pstate_boost_init(cpudata);
+	if (ret)
+		goto free_cpudata1;
+
 	ret = amd_pstate_init_perf(cpudata);
 	if (ret)
 		goto free_cpudata1;
@@ -954,7 +974,6 @@ static int amd_pstate_cpu_init(struct cpufreq_policy *policy)
 
 	policy->driver_data = cpudata;
 
-	amd_pstate_boost_init(cpudata);
 	if (!current_pstate_driver->adjust_perf)
 		current_pstate_driver->adjust_perf = amd_pstate_adjust_perf;
 
@@ -1361,6 +1380,11 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy)
 
 	amd_pstate_init_prefcore(cpudata);
 
+	/* initialize cpu cores boot state */
+	ret = amd_pstate_boost_init(cpudata);
+	if (ret)
+		goto free_cpudata1;
+
 	ret = amd_pstate_init_perf(cpudata);
 	if (ret)
 		goto free_cpudata1;
@@ -1414,7 +1438,6 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy)
 			return ret;
 		WRITE_ONCE(cpudata->cppc_cap1_cached, value);
 	}
-	amd_pstate_boost_init(cpudata);
 
 	return 0;
 
diff --git a/include/linux/amd-pstate.h b/include/linux/amd-pstate.h
index d58fc022ec46..8ba5dd4d3405 100644
--- a/include/linux/amd-pstate.h
+++ b/include/linux/amd-pstate.h
@@ -134,4 +134,17 @@ struct quirk_entry {
 	u32 lowest_freq;
 };
 
+/**
+ * struct amd_pstate_global_params - Global parameters, mostly tunable via sysfs.
+ * @cpb_boost:		Whether or not to use boost CPU P-states.
+ * @cpb_supported:	Whether or not CPU boost P-states are available
+ *			based on the MSR_K7_HWCR bit[25] state
+ */
+struct amd_pstate_global_params {
+	bool cpb_boost;
+	bool cpb_supported;
+};
+
+extern struct amd_pstate_global_params amd_pstate_global_params;
+
 #endif /* _LINUX_AMD_PSTATE_H */
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v10 3/7] cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control
  2024-05-08  7:21 [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost Perry Yuan
  2024-05-08  7:21 ` [PATCH v10 1/7] cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h Perry Yuan
  2024-05-08  7:21 ` [PATCH v10 2/7] cpufreq: amd-pstate: initialize new core precision boost state Perry Yuan
@ 2024-05-08  7:21 ` Perry Yuan
  2024-05-08  9:39   ` Oleksandr Natalenko
  2024-05-08  7:21 ` [PATCH v10 4/7] cpufreq: amd-pstate: fix the MSR highest perf will be reset issue while cpb boost off Perry Yuan
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 23+ messages in thread
From: Perry Yuan @ 2024-05-08  7:21 UTC (permalink / raw)
  To: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

From: Perry Yuan <Perry.Yuan@amd.com>

With this new sysfs entry `cpb_boost`created, user can change CPU boost
state dynamically under `active`, `guided` and `passive` modes.
And the highest perf and frequency will also be updated as the boost
state changing.

0): check current boost state
cat /sys/devices/system/cpu/amd_pstate/cpb_boost

1): disable CPU boost
sudo bash -c "echo 0 > /sys/devices/system/cpu/amd_pstate/cpb_boost"

2): enable CPU boost
sudo bash -c "echo 1 > /sys/devices/system/cpu/amd_pstate/cpb_boost"

Link: https://bugzilla.kernel.org/show_bug.cgi?id=217931
Link: https://bugzilla.kernel.org/show_bug.cgi?id=217618
Signed-off-by: Perry Yuan <Perry.Yuan@amd.com>
---
 drivers/cpufreq/amd-pstate-ut.c |   2 +-
 drivers/cpufreq/amd-pstate.c    | 114 +++++++++++++++++++++++++++++++-
 include/linux/amd-pstate.h      |   1 +
 3 files changed, 115 insertions(+), 2 deletions(-)

diff --git a/drivers/cpufreq/amd-pstate-ut.c b/drivers/cpufreq/amd-pstate-ut.c
index f04ae67dda37..b3601b0e6dd3 100644
--- a/drivers/cpufreq/amd-pstate-ut.c
+++ b/drivers/cpufreq/amd-pstate-ut.c
@@ -226,7 +226,7 @@ static void amd_pstate_ut_check_freq(u32 index)
 			goto skip_test;
 		}
 
-		if (cpudata->boost_supported) {
+		if (amd_pstate_global_params.cpb_boost) {
 			if ((policy->max == cpudata->max_freq) ||
 					(policy->max == cpudata->nominal_freq))
 				amd_pstate_ut_cases[index].result = AMD_PSTATE_UT_RESULT_PASS;
diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
index f7dab0f7b452..f81fd61dd2a9 100644
--- a/drivers/cpufreq/amd-pstate.c
+++ b/drivers/cpufreq/amd-pstate.c
@@ -686,8 +686,10 @@ static int amd_pstate_boost_init(struct amd_cpudata *cpudata)
 	}
 
 	amd_pstate_global_params.cpb_supported = !(boost_val & MSR_K7_HWCR_CPB_DIS);
-	if (amd_pstate_global_params.cpb_supported)
+	if (amd_pstate_global_params.cpb_supported) {
 		current_pstate_driver->boost_enabled = true;
+		cpudata->boost_state = true;
+	}
 
 	amd_pstate_global_params.cpb_boost = amd_pstate_global_params.cpb_supported;
 
@@ -1293,6 +1295,114 @@ static ssize_t prefcore_show(struct device *dev,
 	return sysfs_emit(buf, "%s\n", str_enabled_disabled(amd_pstate_prefcore));
 }
 
+static int amd_pstate_cpu_boost_update(struct cpufreq_policy *policy, bool on)
+{
+	struct amd_cpudata *cpudata = policy->driver_data;
+	struct cppc_perf_ctrls perf_ctrls;
+	u32 highest_perf, nominal_perf, nominal_freq, max_freq;
+	int ret;
+
+	if (!policy) {
+		pr_err("policy is null\n");
+		return -ENODATA;
+	}
+
+	highest_perf = READ_ONCE(cpudata->highest_perf);
+	nominal_perf = READ_ONCE(cpudata->nominal_perf);
+	nominal_freq = READ_ONCE(cpudata->nominal_freq);
+	max_freq = READ_ONCE(cpudata->max_freq);
+
+	if (boot_cpu_has(X86_FEATURE_CPPC)) {
+		u64 value = READ_ONCE(cpudata->cppc_req_cached);
+
+		value &= ~GENMASK_ULL(7, 0);
+		value |= on ? highest_perf : nominal_perf;
+		WRITE_ONCE(cpudata->cppc_req_cached, value);
+
+		wrmsrl_on_cpu(cpudata->cpu, MSR_AMD_CPPC_REQ, value);
+	} else {
+		perf_ctrls.max_perf = on ? highest_perf : nominal_perf;
+		ret = cppc_set_epp_perf(cpudata->cpu, &perf_ctrls, 1);
+		if (ret) {
+			cpufreq_cpu_release(policy);
+			pr_debug("failed to set energy perf value (%d)\n", ret);
+			return ret;
+		}
+	}
+
+	if (on)
+		policy->cpuinfo.max_freq = max_freq;
+	else
+		policy->cpuinfo.max_freq = nominal_freq * 1000;
+
+	policy->max = policy->cpuinfo.max_freq;
+
+	if (cppc_state == AMD_PSTATE_PASSIVE) {
+		ret = freq_qos_update_request(&cpudata->req[1],
+				      policy->cpuinfo.max_freq);
+	}
+
+	return ret;
+}
+
+static int amd_pstate_cpu_boost(int cpu, bool state)
+{
+	int ret;
+	struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
+	struct amd_cpudata *cpudata = policy->driver_data;
+
+	if (!policy) {
+		pr_err("policy is NULL\n");
+		ret = -ENODATA;
+		goto err_exit;
+	}
+
+	ret = amd_pstate_cpu_boost_update(policy, state);
+	refresh_frequency_limits(policy);
+	cpudata->boost_state = !!state;
+
+err_exit:
+	cpufreq_cpu_put(policy);
+	return ret < 0 ? ret : 0;
+}
+
+static ssize_t cpb_boost_show(struct device *dev,
+			   struct device_attribute *attr, char *buf)
+{
+	return sysfs_emit(buf, "%u\n", amd_pstate_global_params.cpb_boost);
+}
+
+static ssize_t cpb_boost_store(struct device *dev, struct device_attribute *b,
+			    const char *buf, size_t count)
+{
+	bool new_state;
+	ssize_t ret;
+	int cpu;
+
+	if (!amd_pstate_global_params.cpb_supported) {
+		pr_err("Boost mode is not supported by this processor or SBIOS\n");
+		return -EINVAL;
+	}
+
+	ret = kstrtobool(buf, &new_state);
+	if (ret)
+		return ret;
+
+	mutex_lock(&amd_pstate_driver_lock);
+	for_each_present_cpu(cpu) {
+		ret = amd_pstate_cpu_boost(cpu, new_state);
+		if (ret < 0) {
+			pr_warn("failed to update cpu boost for CPU%d (%d)\n", cpu, ret);
+			goto err_exit;
+		}
+	}
+	amd_pstate_global_params.cpb_boost = !!new_state;
+
+err_exit:
+	mutex_unlock(&amd_pstate_driver_lock);
+	return ret < 0 ? ret : count;
+}
+
 cpufreq_freq_attr_ro(amd_pstate_max_freq);
 cpufreq_freq_attr_ro(amd_pstate_lowest_nonlinear_freq);
 
@@ -1303,6 +1413,7 @@ cpufreq_freq_attr_rw(energy_performance_preference);
 cpufreq_freq_attr_ro(energy_performance_available_preferences);
 static DEVICE_ATTR_RW(status);
 static DEVICE_ATTR_RO(prefcore);
+static DEVICE_ATTR_RW(cpb_boost);
 
 static struct freq_attr *amd_pstate_attr[] = {
 	&amd_pstate_max_freq,
@@ -1327,6 +1438,7 @@ static struct freq_attr *amd_pstate_epp_attr[] = {
 static struct attribute *pstate_global_attributes[] = {
 	&dev_attr_status.attr,
 	&dev_attr_prefcore.attr,
+	&dev_attr_cpb_boost.attr,
 	NULL
 };
 
diff --git a/include/linux/amd-pstate.h b/include/linux/amd-pstate.h
index 8ba5dd4d3405..56f616a5cd0f 100644
--- a/include/linux/amd-pstate.h
+++ b/include/linux/amd-pstate.h
@@ -106,6 +106,7 @@ struct amd_cpudata {
 	u32	policy;
 	u64	cppc_cap1_cached;
 	bool	suspended;
+	bool	boost_state;
 };
 
 /*
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v10 4/7] cpufreq: amd-pstate: fix the MSR highest perf will be reset issue while cpb boost off
  2024-05-08  7:21 [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost Perry Yuan
                   ` (2 preceding siblings ...)
  2024-05-08  7:21 ` [PATCH v10 3/7] cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control Perry Yuan
@ 2024-05-08  7:21 ` Perry Yuan
  2024-05-08  7:21 ` [PATCH v10 5/7] Documentation: cpufreq: amd-pstate: introduce the new cpu boost control method Perry Yuan
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 23+ messages in thread
From: Perry Yuan @ 2024-05-08  7:21 UTC (permalink / raw)
  To: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

From: Perry Yuan <Perry.Yuan@amd.com>

Select the min perf to fix the highest perf value while update pstate
CPPC request MSR register, here it needs to limit the max perf value when
CPU boost is disabled in case of that highest perf value in the MSR will be
reset to original highest perf value which cause the BOOST control
failed.

Signed-off-by: Perry Yuan <Perry.Yuan@amd.com>
Acked-by: Huang Rui <ray.huang@amd.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
---
 drivers/cpufreq/amd-pstate.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
index f81fd61dd2a9..11bce2c1db32 100644
--- a/drivers/cpufreq/amd-pstate.c
+++ b/drivers/cpufreq/amd-pstate.c
@@ -476,6 +476,7 @@ static void amd_pstate_update(struct amd_cpudata *cpudata, u32 min_perf,
 			      u32 des_perf, u32 max_perf, bool fast_switch, int gov_flags)
 {
 	u64 prev = READ_ONCE(cpudata->cppc_req_cached);
+	u32 nominal_perf = READ_ONCE(cpudata->nominal_perf);
 	u64 value = prev;
 
 	min_perf = clamp_t(unsigned long, min_perf, cpudata->min_limit_perf,
@@ -495,6 +496,10 @@ static void amd_pstate_update(struct amd_cpudata *cpudata, u32 min_perf,
 	value &= ~AMD_CPPC_DES_PERF(~0L);
 	value |= AMD_CPPC_DES_PERF(des_perf);
 
+	/* limit the max perf when core performance boost feature is disabled */
+	if (!amd_pstate_global_params.cpb_boost)
+		max_perf = min_t(unsigned long, nominal_perf, max_perf);
+
 	value &= ~AMD_CPPC_MAX_PERF(~0L);
 	value |= AMD_CPPC_MAX_PERF(max_perf);
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v10 5/7] Documentation: cpufreq: amd-pstate: introduce the new cpu boost control method
  2024-05-08  7:21 [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost Perry Yuan
                   ` (3 preceding siblings ...)
  2024-05-08  7:21 ` [PATCH v10 4/7] cpufreq: amd-pstate: fix the MSR highest perf will be reset issue while cpb boost off Perry Yuan
@ 2024-05-08  7:21 ` Perry Yuan
  2024-05-08  7:21 ` [PATCH v10 6/7] cpufreq: amd-pstate: introduce per CPU frequency boost control Perry Yuan
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 23+ messages in thread
From: Perry Yuan @ 2024-05-08  7:21 UTC (permalink / raw)
  To: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

From: Perry Yuan <Perry.Yuan@amd.com>

Introduce AMD CPU frequency boosting control sysfs entry which used for
switching boost on and boost off.

If core performance boost is disabled while a core is in a boosted P-state,
the core automatically transitions to the highest performance non-boosted P-state
The highest perf and frequency will be limited by the setting value.

Signed-off-by: Perry Yuan <Perry.Yuan@amd.com>
---
 Documentation/admin-guide/pm/amd-pstate.rst | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/Documentation/admin-guide/pm/amd-pstate.rst b/Documentation/admin-guide/pm/amd-pstate.rst
index 1e0d101b020a..bcc0d9404c18 100644
--- a/Documentation/admin-guide/pm/amd-pstate.rst
+++ b/Documentation/admin-guide/pm/amd-pstate.rst
@@ -440,6 +440,16 @@ control its functionality at the system level.  They are located in the
         This attribute is read-only to check the state of preferred core set
         by the kernel parameter.
 
+``cpb_boost``
+        Specifies whether core performance boost is requested to be enabled or disabled
+        If core performance boost is disabled while a core is in a boosted P-state, the
+        core automatically transitions to the highest performance non-boosted P-state.
+        AMD Core Performance Boost(CPB) is controlled by this attribute file which allows
+        user to change all cores frequency boosting state. It supports all amd-pstate modes.
+
+        "0" Disable Core Performance Boosting
+        "1" Enable  Core Performance Boosting
+
 ``cpupower`` tool support for ``amd-pstate``
 ===============================================
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v10 6/7] cpufreq: amd-pstate: introduce per CPU frequency boost control
  2024-05-08  7:21 [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost Perry Yuan
                   ` (4 preceding siblings ...)
  2024-05-08  7:21 ` [PATCH v10 5/7] Documentation: cpufreq: amd-pstate: introduce the new cpu boost control method Perry Yuan
@ 2024-05-08  7:21 ` Perry Yuan
  2024-05-08  9:34   ` Oleksandr Natalenko
  2024-05-08  7:21 ` [PATCH v10 7/7] Documentation: cpufreq: amd-pstate: update doc for Per CPU boost control method Perry Yuan
                   ` (2 subsequent siblings)
  8 siblings, 1 reply; 23+ messages in thread
From: Perry Yuan @ 2024-05-08  7:21 UTC (permalink / raw)
  To: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

Add a new sysfs attribute file to support per CPU frequency boost
control, allowing individual CPUs to enable or disable CPB separately.

The new sysfs attribute file is located at below path,
`/sys/devices/system/cpu/cpuX/cpufreq/boost`,
where `X` represents the CPU number.

To disable CPB for a specific CPU, you can use the following command:
$ sudo bash -c "echo 0 > /sys/devices/system/cpu/cpuX/cpufreq/boost"

After disabling CPB, the CPU frequency will no longer boost beyond
the base frequency for that particular CPU.

for example:
----------------------------------------------------------------------
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
  0    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1666.7740
  1    0      0    0 0:0:0:0          yes 4208.0000 400.0000  400.0000

----------------------------------------------------------------------
$ sudo bash -c "echo 0 > /sys/devices/system/cpu/cpu0/cpufreq/boost"

CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
  0    0      0    0 0:0:0:0          yes 3501.0000 400.0000 4154.3140
  1    0      0    0 0:0:0:0          yes 4208.0000 400.0000  400.0000

Please be aware that modifying the global variable
`amd_pstate_global_params.cpb_boost` will overwrite the individual CPU settings.

Signed-off-by: Perry Yuan <perry.yuan@amd.com>
---
 drivers/cpufreq/amd-pstate.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
index 11bce2c1db32..cb0055e7c842 100644
--- a/drivers/cpufreq/amd-pstate.c
+++ b/drivers/cpufreq/amd-pstate.c
@@ -1371,6 +1371,30 @@ static int amd_pstate_cpu_boost(int cpu, bool state)
 	return ret < 0 ? ret : 0;
 }
 
+static ssize_t show_boost(struct cpufreq_policy *policy, char *buf)
+{
+	struct amd_cpudata *cpudata = policy->driver_data;
+	bool boost_val;
+
+	boost_val = READ_ONCE(cpudata->boost_state);
+
+	return sysfs_emit(buf, "%u\n", boost_val);
+}
+
+static ssize_t store_boost(
+		struct cpufreq_policy *policy, const char *buf, size_t count)
+{
+	bool boost_val;
+	int ret;
+
+	if (sscanf(buf, "%d", &boost_val) != 1)
+		return -EINVAL;
+
+	ret = amd_pstate_cpu_boost(policy->cpu, boost_val);
+
+	return ret < 0 ? ret : count;
+}
+
 static ssize_t cpb_boost_show(struct device *dev,
 			   struct device_attribute *attr, char *buf)
 {
@@ -1416,6 +1440,7 @@ cpufreq_freq_attr_ro(amd_pstate_prefcore_ranking);
 cpufreq_freq_attr_ro(amd_pstate_hw_prefcore);
 cpufreq_freq_attr_rw(energy_performance_preference);
 cpufreq_freq_attr_ro(energy_performance_available_preferences);
+cpufreq_freq_attr_rw(boost);
 static DEVICE_ATTR_RW(status);
 static DEVICE_ATTR_RO(prefcore);
 static DEVICE_ATTR_RW(cpb_boost);
@@ -1426,6 +1451,7 @@ static struct freq_attr *amd_pstate_attr[] = {
 	&amd_pstate_highest_perf,
 	&amd_pstate_prefcore_ranking,
 	&amd_pstate_hw_prefcore,
+	&boost,
 	NULL,
 };
 
@@ -1437,6 +1463,7 @@ static struct freq_attr *amd_pstate_epp_attr[] = {
 	&amd_pstate_hw_prefcore,
 	&energy_performance_preference,
 	&energy_performance_available_preferences,
+	&boost,
 	NULL,
 };
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v10 7/7] Documentation: cpufreq: amd-pstate: update doc for Per CPU boost control method
  2024-05-08  7:21 [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost Perry Yuan
                   ` (5 preceding siblings ...)
  2024-05-08  7:21 ` [PATCH v10 6/7] cpufreq: amd-pstate: introduce per CPU frequency boost control Perry Yuan
@ 2024-05-08  7:21 ` Perry Yuan
  2024-05-08  8:18 ` [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost Borislav Petkov
  2024-05-08 15:11 ` Oleksandr Natalenko
  8 siblings, 0 replies; 23+ messages in thread
From: Perry Yuan @ 2024-05-08  7:21 UTC (permalink / raw)
  To: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

Updates the documentation in `amd-pstate.rst` to include information about the
per CPU boost control feature. Users can now enable or disable the Core Performance
Boost (CPB) feature on individual CPUs using the `boost` sysfs attribute.

Signed-off-by: Perry Yuan <perry.yuan@amd.com>
---
 Documentation/admin-guide/pm/amd-pstate.rst | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/Documentation/admin-guide/pm/amd-pstate.rst b/Documentation/admin-guide/pm/amd-pstate.rst
index bcc0d9404c18..98e43c53c387 100644
--- a/Documentation/admin-guide/pm/amd-pstate.rst
+++ b/Documentation/admin-guide/pm/amd-pstate.rst
@@ -281,6 +281,26 @@ integer values defined between 0 to 255 when EPP feature is enabled by platform
 firmware, if EPP feature is disabled, driver will ignore the written value
 This attribute is read-write.
 
+``boost``
+The `boost` sysfs attribute provides control over the CPU core
+performance boost, allowing users to manage the maximum frequency limitation
+of the CPU. This attribute can be used to enable or disable the boost feature
+on individual CPUs.
+
+When the boost feature is enabled, the CPU can dynamically increase its frequency
+beyond the base frequency, providing enhanced performance for demanding workloads.
+On the other hand, disabling the boost feature restricts the CPU to operate at the
+base frequency, which may be desirable in certain scenarios to prioritize power
+efficiency or manage temperature.
+
+To manipulate the `boost` attribute, users can write a value of `0` to disable the
+boost or `1` to enable it, for the respective CPU using the sysfs path
+`/sys/devices/system/cpu/cpuX/cpufreq/boost`, where `X` represents the CPU number.
+
+It is important to note that modifying the global variable
+`amd_pstate_global_params.cpb_boost` will override the individual CPU settings.
+
+
 Other performance and frequency values can be read back from
 ``/sys/devices/system/cpu/cpuX/acpi_cppc/``, see :ref:`cppc_sysfs`.
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost
  2024-05-08  7:21 [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost Perry Yuan
                   ` (6 preceding siblings ...)
  2024-05-08  7:21 ` [PATCH v10 7/7] Documentation: cpufreq: amd-pstate: update doc for Per CPU boost control method Perry Yuan
@ 2024-05-08  8:18 ` Borislav Petkov
  2024-05-09 16:01   ` Yuan, Perry
  2024-05-08 15:11 ` Oleksandr Natalenko
  8 siblings, 1 reply; 23+ messages in thread
From: Borislav Petkov @ 2024-05-08  8:18 UTC (permalink / raw)
  To: Perry Yuan
  Cc: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Alexander.Deucher, Xinmei.Huang, Xiaojian.Du,
	Li.Meng, linux-pm, linux-kernel

On Wed, May 08, 2024 at 03:21:05PM +0800, Perry Yuan wrote:
> The patchset series add core performance boost feature for AMD pstate
> driver including passisve ,guide and active mode support.

Can you please slow down, wait to collect as much feedback as possible
and only *then* spam again with your patchset?

https://kernel.org/doc/html/latest/process/submitting-patches.html#don-t-get-discouraged-or-impatient

"You should receive comments within a few weeks (typically 2-3); if that
does not happen, make sure that you have sent your patches to the right
place. Wait for a minimum of one week before resubmitting or pinging
reviewers - possibly longer during busy times like merge windows."

Maintainers are not a shooting gallery.

While waiting, you can read this:

https://kernel.org/doc/html/latest/process/development-process.html

Thanks.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v10 6/7] cpufreq: amd-pstate: introduce per CPU frequency boost control
  2024-05-08  7:21 ` [PATCH v10 6/7] cpufreq: amd-pstate: introduce per CPU frequency boost control Perry Yuan
@ 2024-05-08  9:34   ` Oleksandr Natalenko
  2024-05-08  9:43     ` Oleksandr Natalenko
  0 siblings, 1 reply; 23+ messages in thread
From: Oleksandr Natalenko @ 2024-05-08  9:34 UTC (permalink / raw)
  To: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov, Perry Yuan
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 3716 bytes --]

Hello.

On středa 8. května 2024 9:21:11, SELČ Perry Yuan wrote:
> Add a new sysfs attribute file to support per CPU frequency boost
> control, allowing individual CPUs to enable or disable CPB separately.
> 
> The new sysfs attribute file is located at below path,
> `/sys/devices/system/cpu/cpuX/cpufreq/boost`,
> where `X` represents the CPU number.
> 
> To disable CPB for a specific CPU, you can use the following command:
> $ sudo bash -c "echo 0 > /sys/devices/system/cpu/cpuX/cpufreq/boost"
> 
> After disabling CPB, the CPU frequency will no longer boost beyond
> the base frequency for that particular CPU.
> 
> for example:
> ----------------------------------------------------------------------
> CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
>   0    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1666.7740
>   1    0      0    0 0:0:0:0          yes 4208.0000 400.0000  400.0000
> 
> ----------------------------------------------------------------------
> $ sudo bash -c "echo 0 > /sys/devices/system/cpu/cpu0/cpufreq/boost"
> 
> CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
>   0    0      0    0 0:0:0:0          yes 3501.0000 400.0000 4154.3140
>   1    0      0    0 0:0:0:0          yes 4208.0000 400.0000  400.0000
> 
> Please be aware that modifying the global variable
> `amd_pstate_global_params.cpb_boost` will overwrite the individual CPU settings.
> 
> Signed-off-by: Perry Yuan <perry.yuan@amd.com>
> ---
>  drivers/cpufreq/amd-pstate.c | 27 +++++++++++++++++++++++++++
>  1 file changed, 27 insertions(+)
> 
> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
> index 11bce2c1db32..cb0055e7c842 100644
> --- a/drivers/cpufreq/amd-pstate.c
> +++ b/drivers/cpufreq/amd-pstate.c
> @@ -1371,6 +1371,30 @@ static int amd_pstate_cpu_boost(int cpu, bool state)
>  	return ret < 0 ? ret : 0;
>  }
>  
> +static ssize_t show_boost(struct cpufreq_policy *policy, char *buf)
> +{
> +	struct amd_cpudata *cpudata = policy->driver_data;
> +	bool boost_val;
> +
> +	boost_val = READ_ONCE(cpudata->boost_state);
> +
> +	return sysfs_emit(buf, "%u\n", boost_val);
> +}
> +
> +static ssize_t store_boost(
> +		struct cpufreq_policy *policy, const char *buf, size_t count)
> +{
> +	bool boost_val;
> +	int ret;
> +
> +	if (sscanf(buf, "%d", &boost_val) != 1)

This will generate warning. IIUC, sscanf() doesn't work with booleans directly, so you'd probably want to read the value into an (unsigned) integer, and then cast it to bool.

> +		return -EINVAL;
> +
> +	ret = amd_pstate_cpu_boost(policy->cpu, boost_val);
> +
> +	return ret < 0 ? ret : count;
> +}
> +
>  static ssize_t cpb_boost_show(struct device *dev,
>  			   struct device_attribute *attr, char *buf)
>  {
> @@ -1416,6 +1440,7 @@ cpufreq_freq_attr_ro(amd_pstate_prefcore_ranking);
>  cpufreq_freq_attr_ro(amd_pstate_hw_prefcore);
>  cpufreq_freq_attr_rw(energy_performance_preference);
>  cpufreq_freq_attr_ro(energy_performance_available_preferences);
> +cpufreq_freq_attr_rw(boost);
>  static DEVICE_ATTR_RW(status);
>  static DEVICE_ATTR_RO(prefcore);
>  static DEVICE_ATTR_RW(cpb_boost);
> @@ -1426,6 +1451,7 @@ static struct freq_attr *amd_pstate_attr[] = {
>  	&amd_pstate_highest_perf,
>  	&amd_pstate_prefcore_ranking,
>  	&amd_pstate_hw_prefcore,
> +	&boost,
>  	NULL,
>  };
>  
> @@ -1437,6 +1463,7 @@ static struct freq_attr *amd_pstate_epp_attr[] = {
>  	&amd_pstate_hw_prefcore,
>  	&energy_performance_preference,
>  	&energy_performance_available_preferences,
> +	&boost,
>  	NULL,
>  };
>  
> 


-- 
Oleksandr Natalenko (post-factum)

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v10 3/7] cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control
  2024-05-08  7:21 ` [PATCH v10 3/7] cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control Perry Yuan
@ 2024-05-08  9:39   ` Oleksandr Natalenko
  2024-05-08 11:42     ` Yuan, Perry
  0 siblings, 1 reply; 23+ messages in thread
From: Oleksandr Natalenko @ 2024-05-08  9:39 UTC (permalink / raw)
  To: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov, Perry Yuan
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 6681 bytes --]

Hello.

On středa 8. května 2024 9:21:08, SELČ Perry Yuan wrote:
> From: Perry Yuan <Perry.Yuan@amd.com>
> 
> With this new sysfs entry `cpb_boost`created, user can change CPU boost
> state dynamically under `active`, `guided` and `passive` modes.
> And the highest perf and frequency will also be updated as the boost
> state changing.
> 
> 0): check current boost state
> cat /sys/devices/system/cpu/amd_pstate/cpb_boost
> 
> 1): disable CPU boost
> sudo bash -c "echo 0 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
> 
> 2): enable CPU boost
> sudo bash -c "echo 1 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
> 
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=217931
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=217618
> Signed-off-by: Perry Yuan <Perry.Yuan@amd.com>
> ---
>  drivers/cpufreq/amd-pstate-ut.c |   2 +-
>  drivers/cpufreq/amd-pstate.c    | 114 +++++++++++++++++++++++++++++++-
>  include/linux/amd-pstate.h      |   1 +
>  3 files changed, 115 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/cpufreq/amd-pstate-ut.c b/drivers/cpufreq/amd-pstate-ut.c
> index f04ae67dda37..b3601b0e6dd3 100644
> --- a/drivers/cpufreq/amd-pstate-ut.c
> +++ b/drivers/cpufreq/amd-pstate-ut.c
> @@ -226,7 +226,7 @@ static void amd_pstate_ut_check_freq(u32 index)
>  			goto skip_test;
>  		}
>  
> -		if (cpudata->boost_supported) {
> +		if (amd_pstate_global_params.cpb_boost) {
>  			if ((policy->max == cpudata->max_freq) ||
>  					(policy->max == cpudata->nominal_freq))
>  				amd_pstate_ut_cases[index].result = AMD_PSTATE_UT_RESULT_PASS;
> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
> index f7dab0f7b452..f81fd61dd2a9 100644
> --- a/drivers/cpufreq/amd-pstate.c
> +++ b/drivers/cpufreq/amd-pstate.c
> @@ -686,8 +686,10 @@ static int amd_pstate_boost_init(struct amd_cpudata *cpudata)
>  	}
>  
>  	amd_pstate_global_params.cpb_supported = !(boost_val & MSR_K7_HWCR_CPB_DIS);
> -	if (amd_pstate_global_params.cpb_supported)
> +	if (amd_pstate_global_params.cpb_supported) {
>  		current_pstate_driver->boost_enabled = true;
> +		cpudata->boost_state = true;
> +	}
>  
>  	amd_pstate_global_params.cpb_boost = amd_pstate_global_params.cpb_supported;
>  
> @@ -1293,6 +1295,114 @@ static ssize_t prefcore_show(struct device *dev,
>  	return sysfs_emit(buf, "%s\n", str_enabled_disabled(amd_pstate_prefcore));
>  }
>  
> +static int amd_pstate_cpu_boost_update(struct cpufreq_policy *policy, bool on)
> +{
> +	struct amd_cpudata *cpudata = policy->driver_data;
> +	struct cppc_perf_ctrls perf_ctrls;
> +	u32 highest_perf, nominal_perf, nominal_freq, max_freq;
> +	int ret;
> +
> +	if (!policy) {
> +		pr_err("policy is null\n");
> +		return -ENODATA;
> +	}
> +
> +	highest_perf = READ_ONCE(cpudata->highest_perf);
> +	nominal_perf = READ_ONCE(cpudata->nominal_perf);
> +	nominal_freq = READ_ONCE(cpudata->nominal_freq);
> +	max_freq = READ_ONCE(cpudata->max_freq);
> +
> +	if (boot_cpu_has(X86_FEATURE_CPPC)) {
> +		u64 value = READ_ONCE(cpudata->cppc_req_cached);
> +
> +		value &= ~GENMASK_ULL(7, 0);
> +		value |= on ? highest_perf : nominal_perf;
> +		WRITE_ONCE(cpudata->cppc_req_cached, value);
> +
> +		wrmsrl_on_cpu(cpudata->cpu, MSR_AMD_CPPC_REQ, value);
> +	} else {
> +		perf_ctrls.max_perf = on ? highest_perf : nominal_perf;
> +		ret = cppc_set_epp_perf(cpudata->cpu, &perf_ctrls, 1);
> +		if (ret) {
> +			cpufreq_cpu_release(policy);
> +			pr_debug("failed to set energy perf value (%d)\n", ret);
> +			return ret;
> +		}
> +	}
> +
> +	if (on)
> +		policy->cpuinfo.max_freq = max_freq;
> +	else
> +		policy->cpuinfo.max_freq = nominal_freq * 1000;
> +
> +	policy->max = policy->cpuinfo.max_freq;
> +
> +	if (cppc_state == AMD_PSTATE_PASSIVE) {
> +		ret = freq_qos_update_request(&cpudata->req[1],
> +				      policy->cpuinfo.max_freq);
> +	}
> +
> +	return ret;
> +}
> +
> +static int amd_pstate_cpu_boost(int cpu, bool state)
> +{
> +	int ret;
> +	struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
> +	struct amd_cpudata *cpudata = policy->driver_data;
> +
> +	if (!policy) {
> +		pr_err("policy is NULL\n");
> +		ret = -ENODATA;
> +		goto err_exit;
> +	}
> +
> +	ret = amd_pstate_cpu_boost_update(policy, state);
> +	refresh_frequency_limits(policy);
> +	cpudata->boost_state = !!state;
> +
> +err_exit:
> +	cpufreq_cpu_put(policy);
> +	return ret < 0 ? ret : 0;
> +}
> +
> +static ssize_t cpb_boost_show(struct device *dev,
> +			   struct device_attribute *attr, char *buf)
> +{
> +	return sysfs_emit(buf, "%u\n", amd_pstate_global_params.cpb_boost);
> +}
> +
> +static ssize_t cpb_boost_store(struct device *dev, struct device_attribute *b,
> +			    const char *buf, size_t count)
> +{
> +	bool new_state;
> +	ssize_t ret;
> +	int cpu;
> +
> +	if (!amd_pstate_global_params.cpb_supported) {
> +		pr_err("Boost mode is not supported by this processor or SBIOS\n");
> +		return -EINVAL;
> +	}
> +
> +	ret = kstrtobool(buf, &new_state);
> +	if (ret)
> +		return ret;
> +
> +	mutex_lock(&amd_pstate_driver_lock);
> +	for_each_present_cpu(cpu) {
> +		ret = amd_pstate_cpu_boost(cpu, new_state);
> +		if (ret < 0) {
> +			pr_warn("failed to update cpu boost for CPU%d (%d)\n", cpu, ret);

Note ret is ssize_t, so %d should be %ld (or %z/%zd/%zi?) instead.

> +			goto err_exit;
> +		}
> +	}
> +	amd_pstate_global_params.cpb_boost = !!new_state;
> +
> +err_exit:
> +	mutex_unlock(&amd_pstate_driver_lock);
> +	return ret < 0 ? ret : count;
> +}
> +
>  cpufreq_freq_attr_ro(amd_pstate_max_freq);
>  cpufreq_freq_attr_ro(amd_pstate_lowest_nonlinear_freq);
>  
> @@ -1303,6 +1413,7 @@ cpufreq_freq_attr_rw(energy_performance_preference);
>  cpufreq_freq_attr_ro(energy_performance_available_preferences);
>  static DEVICE_ATTR_RW(status);
>  static DEVICE_ATTR_RO(prefcore);
> +static DEVICE_ATTR_RW(cpb_boost);
>  
>  static struct freq_attr *amd_pstate_attr[] = {
>  	&amd_pstate_max_freq,
> @@ -1327,6 +1438,7 @@ static struct freq_attr *amd_pstate_epp_attr[] = {
>  static struct attribute *pstate_global_attributes[] = {
>  	&dev_attr_status.attr,
>  	&dev_attr_prefcore.attr,
> +	&dev_attr_cpb_boost.attr,
>  	NULL
>  };
>  
> diff --git a/include/linux/amd-pstate.h b/include/linux/amd-pstate.h
> index 8ba5dd4d3405..56f616a5cd0f 100644
> --- a/include/linux/amd-pstate.h
> +++ b/include/linux/amd-pstate.h
> @@ -106,6 +106,7 @@ struct amd_cpudata {
>  	u32	policy;
>  	u64	cppc_cap1_cached;
>  	bool	suspended;
> +	bool	boost_state;
>  };
>  
>  /*
> 


-- 
Oleksandr Natalenko (post-factum)

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v10 6/7] cpufreq: amd-pstate: introduce per CPU frequency boost control
  2024-05-08  9:34   ` Oleksandr Natalenko
@ 2024-05-08  9:43     ` Oleksandr Natalenko
  2024-05-08 12:20       ` Yuan, Perry
  0 siblings, 1 reply; 23+ messages in thread
From: Oleksandr Natalenko @ 2024-05-08  9:43 UTC (permalink / raw)
  To: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov, Perry Yuan
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 4039 bytes --]

On středa 8. května 2024 11:34:21, SELČ Oleksandr Natalenko wrote:
> Hello.
> 
> On středa 8. května 2024 9:21:11, SELČ Perry Yuan wrote:
> > Add a new sysfs attribute file to support per CPU frequency boost
> > control, allowing individual CPUs to enable or disable CPB separately.
> > 
> > The new sysfs attribute file is located at below path,
> > `/sys/devices/system/cpu/cpuX/cpufreq/boost`,
> > where `X` represents the CPU number.
> > 
> > To disable CPB for a specific CPU, you can use the following command:
> > $ sudo bash -c "echo 0 > /sys/devices/system/cpu/cpuX/cpufreq/boost"
> > 
> > After disabling CPB, the CPU frequency will no longer boost beyond
> > the base frequency for that particular CPU.
> > 
> > for example:
> > ----------------------------------------------------------------------
> > CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
> >   0    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1666.7740
> >   1    0      0    0 0:0:0:0          yes 4208.0000 400.0000  400.0000
> > 
> > ----------------------------------------------------------------------
> > $ sudo bash -c "echo 0 > /sys/devices/system/cpu/cpu0/cpufreq/boost"
> > 
> > CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
> >   0    0      0    0 0:0:0:0          yes 3501.0000 400.0000 4154.3140
> >   1    0      0    0 0:0:0:0          yes 4208.0000 400.0000  400.0000
> > 
> > Please be aware that modifying the global variable
> > `amd_pstate_global_params.cpb_boost` will overwrite the individual CPU settings.
> > 
> > Signed-off-by: Perry Yuan <perry.yuan@amd.com>
> > ---
> >  drivers/cpufreq/amd-pstate.c | 27 +++++++++++++++++++++++++++
> >  1 file changed, 27 insertions(+)
> > 
> > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
> > index 11bce2c1db32..cb0055e7c842 100644
> > --- a/drivers/cpufreq/amd-pstate.c
> > +++ b/drivers/cpufreq/amd-pstate.c
> > @@ -1371,6 +1371,30 @@ static int amd_pstate_cpu_boost(int cpu, bool state)
> >  	return ret < 0 ? ret : 0;
> >  }
> >  
> > +static ssize_t show_boost(struct cpufreq_policy *policy, char *buf)
> > +{
> > +	struct amd_cpudata *cpudata = policy->driver_data;
> > +	bool boost_val;
> > +
> > +	boost_val = READ_ONCE(cpudata->boost_state);
> > +
> > +	return sysfs_emit(buf, "%u\n", boost_val);
> > +}
> > +
> > +static ssize_t store_boost(
> > +		struct cpufreq_policy *policy, const char *buf, size_t count)
> > +{
> > +	bool boost_val;
> > +	int ret;
> > +
> > +	if (sscanf(buf, "%d", &boost_val) != 1)
> 
> This will generate warning. IIUC, sscanf() doesn't work with booleans directly, so you'd probably want to read the value into an (unsigned) integer, and then cast it to bool.

…or maybe just use kstrtobool()?

> 
> > +		return -EINVAL;
> > +
> > +	ret = amd_pstate_cpu_boost(policy->cpu, boost_val);
> > +
> > +	return ret < 0 ? ret : count;
> > +}
> > +
> >  static ssize_t cpb_boost_show(struct device *dev,
> >  			   struct device_attribute *attr, char *buf)
> >  {
> > @@ -1416,6 +1440,7 @@ cpufreq_freq_attr_ro(amd_pstate_prefcore_ranking);
> >  cpufreq_freq_attr_ro(amd_pstate_hw_prefcore);
> >  cpufreq_freq_attr_rw(energy_performance_preference);
> >  cpufreq_freq_attr_ro(energy_performance_available_preferences);
> > +cpufreq_freq_attr_rw(boost);
> >  static DEVICE_ATTR_RW(status);
> >  static DEVICE_ATTR_RO(prefcore);
> >  static DEVICE_ATTR_RW(cpb_boost);
> > @@ -1426,6 +1451,7 @@ static struct freq_attr *amd_pstate_attr[] = {
> >  	&amd_pstate_highest_perf,
> >  	&amd_pstate_prefcore_ranking,
> >  	&amd_pstate_hw_prefcore,
> > +	&boost,
> >  	NULL,
> >  };
> >  
> > @@ -1437,6 +1463,7 @@ static struct freq_attr *amd_pstate_epp_attr[] = {
> >  	&amd_pstate_hw_prefcore,
> >  	&energy_performance_preference,
> >  	&energy_performance_available_preferences,
> > +	&boost,
> >  	NULL,
> >  };
> >  
> > 
> 
> 
> 


-- 
Oleksandr Natalenko (post-factum)

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* RE: [PATCH v10 3/7] cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control
  2024-05-08  9:39   ` Oleksandr Natalenko
@ 2024-05-08 11:42     ` Yuan, Perry
  0 siblings, 0 replies; 23+ messages in thread
From: Yuan, Perry @ 2024-05-08 11:42 UTC (permalink / raw)
  To: Oleksandr Natalenko, rafael.j.wysocki, Limonciello, Mario,
	viresh.kumar, Huang, Ray, Shenoy, Gautham Ranjal, Petkov,
	Borislav
  Cc: Deucher, Alexander, Huang, Shimmer, Du, Xiaojian, Meng,
	Li (Jassmine),
	linux-pm, linux-kernel

[AMD Official Use Only - General]

 Hi Oleksandr

> -----Original Message-----
> From: Oleksandr Natalenko <oleksandr@natalenko.name>
> Sent: Wednesday, May 8, 2024 5:39 PM
> To: rafael.j.wysocki@intel.com; Limonciello, Mario
> <Mario.Limonciello@amd.com>; viresh.kumar@linaro.org; Huang, Ray
> <Ray.Huang@amd.com>; Shenoy, Gautham Ranjal
> <gautham.shenoy@amd.com>; Petkov, Borislav
> <Borislav.Petkov@amd.com>; Yuan, Perry <Perry.Yuan@amd.com>
> Cc: Deucher, Alexander <Alexander.Deucher@amd.com>; Huang, Shimmer
> <Shimmer.Huang@amd.com>; Du, Xiaojian <Xiaojian.Du@amd.com>; Meng,
> Li (Jassmine) <Li.Meng@amd.com>; linux-pm@vger.kernel.org; linux-
> kernel@vger.kernel.org
> Subject: Re: [PATCH v10 3/7] cpufreq: amd-pstate: implement cpb_boost
> sysfs entry for boost control
>
> Hello.
>
> On středa 8. května 2024 9:21:08, SELČ Perry Yuan wrote:
> > From: Perry Yuan <Perry.Yuan@amd.com>
> >
> > With this new sysfs entry `cpb_boost`created, user can change CPU
> > boost state dynamically under `active`, `guided` and `passive` modes.
> > And the highest perf and frequency will also be updated as the boost
> > state changing.
> >
> > 0): check current boost state
> > cat /sys/devices/system/cpu/amd_pstate/cpb_boost
> >
> > 1): disable CPU boost
> > sudo bash -c "echo 0 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
> >
> > 2): enable CPU boost
> > sudo bash -c "echo 1 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
> >
> > Link: https://bugzilla.kernel.org/show_bug.cgi?id=217931
> > Link: https://bugzilla.kernel.org/show_bug.cgi?id=217618
> > Signed-off-by: Perry Yuan <Perry.Yuan@amd.com>
> > ---
> >  drivers/cpufreq/amd-pstate-ut.c |   2 +-
> >  drivers/cpufreq/amd-pstate.c    | 114
> +++++++++++++++++++++++++++++++-
> >  include/linux/amd-pstate.h      |   1 +
> >  3 files changed, 115 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/cpufreq/amd-pstate-ut.c
> > b/drivers/cpufreq/amd-pstate-ut.c index f04ae67dda37..b3601b0e6dd3
> > 100644
> > --- a/drivers/cpufreq/amd-pstate-ut.c
> > +++ b/drivers/cpufreq/amd-pstate-ut.c
> > @@ -226,7 +226,7 @@ static void amd_pstate_ut_check_freq(u32 index)
> >                     goto skip_test;
> >             }
> >
> > -           if (cpudata->boost_supported) {
> > +           if (amd_pstate_global_params.cpb_boost) {
> >                     if ((policy->max == cpudata->max_freq) ||
> >                                     (policy->max == cpudata-
> >nominal_freq))
> >                             amd_pstate_ut_cases[index].result =
> AMD_PSTATE_UT_RESULT_PASS;
> > diff --git a/drivers/cpufreq/amd-pstate.c
> > b/drivers/cpufreq/amd-pstate.c index f7dab0f7b452..f81fd61dd2a9 100644
> > --- a/drivers/cpufreq/amd-pstate.c
> > +++ b/drivers/cpufreq/amd-pstate.c
> > @@ -686,8 +686,10 @@ static int amd_pstate_boost_init(struct
> amd_cpudata *cpudata)
> >     }
> >
> >     amd_pstate_global_params.cpb_supported = !(boost_val &
> MSR_K7_HWCR_CPB_DIS);
> > -   if (amd_pstate_global_params.cpb_supported)
> > +   if (amd_pstate_global_params.cpb_supported) {
> >             current_pstate_driver->boost_enabled = true;
> > +           cpudata->boost_state = true;
> > +   }
> >
> >     amd_pstate_global_params.cpb_boost =
> > amd_pstate_global_params.cpb_supported;
> >
> > @@ -1293,6 +1295,114 @@ static ssize_t prefcore_show(struct device
> *dev,
> >     return sysfs_emit(buf, "%s\n",
> > str_enabled_disabled(amd_pstate_prefcore));
> >  }
> >
> > +static int amd_pstate_cpu_boost_update(struct cpufreq_policy *policy,
> > +bool on) {
> > +   struct amd_cpudata *cpudata = policy->driver_data;
> > +   struct cppc_perf_ctrls perf_ctrls;
> > +   u32 highest_perf, nominal_perf, nominal_freq, max_freq;
> > +   int ret;
> > +
> > +   if (!policy) {
> > +           pr_err("policy is null\n");
> > +           return -ENODATA;
> > +   }
> > +
> > +   highest_perf = READ_ONCE(cpudata->highest_perf);
> > +   nominal_perf = READ_ONCE(cpudata->nominal_perf);
> > +   nominal_freq = READ_ONCE(cpudata->nominal_freq);
> > +   max_freq = READ_ONCE(cpudata->max_freq);
> > +
> > +   if (boot_cpu_has(X86_FEATURE_CPPC)) {
> > +           u64 value = READ_ONCE(cpudata->cppc_req_cached);
> > +
> > +           value &= ~GENMASK_ULL(7, 0);
> > +           value |= on ? highest_perf : nominal_perf;
> > +           WRITE_ONCE(cpudata->cppc_req_cached, value);
> > +
> > +           wrmsrl_on_cpu(cpudata->cpu, MSR_AMD_CPPC_REQ,
> value);
> > +   } else {
> > +           perf_ctrls.max_perf = on ? highest_perf : nominal_perf;
> > +           ret = cppc_set_epp_perf(cpudata->cpu, &perf_ctrls, 1);
> > +           if (ret) {
> > +                   cpufreq_cpu_release(policy);
> > +                   pr_debug("failed to set energy perf value (%d)\n",
> ret);
> > +                   return ret;
> > +           }
> > +   }
> > +
> > +   if (on)
> > +           policy->cpuinfo.max_freq = max_freq;
> > +   else
> > +           policy->cpuinfo.max_freq = nominal_freq * 1000;
> > +
> > +   policy->max = policy->cpuinfo.max_freq;
> > +
> > +   if (cppc_state == AMD_PSTATE_PASSIVE) {
> > +           ret = freq_qos_update_request(&cpudata->req[1],
> > +                                 policy->cpuinfo.max_freq);
> > +   }
> > +
> > +   return ret;
> > +}
> > +
> > +static int amd_pstate_cpu_boost(int cpu, bool state) {
> > +   int ret;
> > +   struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
> > +   struct amd_cpudata *cpudata = policy->driver_data;
> > +
> > +   if (!policy) {
> > +           pr_err("policy is NULL\n");
> > +           ret = -ENODATA;
> > +           goto err_exit;
> > +   }
> > +
> > +   ret = amd_pstate_cpu_boost_update(policy, state);
> > +   refresh_frequency_limits(policy);
> > +   cpudata->boost_state = !!state;
> > +
> > +err_exit:
> > +   cpufreq_cpu_put(policy);
> > +   return ret < 0 ? ret : 0;
> > +}
> > +
> > +static ssize_t cpb_boost_show(struct device *dev,
> > +                      struct device_attribute *attr, char *buf) {
> > +   return sysfs_emit(buf, "%u\n",
> amd_pstate_global_params.cpb_boost);
> > +}
> > +
> > +static ssize_t cpb_boost_store(struct device *dev, struct device_attribute
> *b,
> > +                       const char *buf, size_t count) {
> > +   bool new_state;
> > +   ssize_t ret;
> > +   int cpu;
> > +
> > +   if (!amd_pstate_global_params.cpb_supported) {
> > +           pr_err("Boost mode is not supported by this processor or
> SBIOS\n");
> > +           return -EINVAL;
> > +   }
> > +
> > +   ret = kstrtobool(buf, &new_state);
> > +   if (ret)
> > +           return ret;
> > +
> > +   mutex_lock(&amd_pstate_driver_lock);
> > +   for_each_present_cpu(cpu) {
> > +           ret = amd_pstate_cpu_boost(cpu, new_state);
> > +           if (ret < 0) {
> > +                   pr_warn("failed to update cpu boost for CPU%d
> (%d)\n", cpu, ret);
>
> Note ret is ssize_t, so %d should be %ld (or %z/%zd/%zi?) instead.

Yes, it should be %ld,  looks like the ret is less than zero,  it is not needed to print out looks like.
Will remove it in v11 otherwise it will cause build warning.

Thanks for the review!

Perry.

>
> > +                   goto err_exit;
> > +           }
> > +   }
> > +   amd_pstate_global_params.cpb_boost = !!new_state;
> > +
> > +err_exit:
> > +   mutex_unlock(&amd_pstate_driver_lock);
> > +   return ret < 0 ? ret : count;
> > +}
> > +
> >  cpufreq_freq_attr_ro(amd_pstate_max_freq);
> >  cpufreq_freq_attr_ro(amd_pstate_lowest_nonlinear_freq);
> >
> > @@ -1303,6 +1413,7 @@
> > cpufreq_freq_attr_rw(energy_performance_preference);
> >  cpufreq_freq_attr_ro(energy_performance_available_preferences);
> >  static DEVICE_ATTR_RW(status);
> >  static DEVICE_ATTR_RO(prefcore);
> > +static DEVICE_ATTR_RW(cpb_boost);
> >
> >  static struct freq_attr *amd_pstate_attr[] = {
> >     &amd_pstate_max_freq,
> > @@ -1327,6 +1438,7 @@ static struct freq_attr *amd_pstate_epp_attr[] =
> > {  static struct attribute *pstate_global_attributes[] = {
> >     &dev_attr_status.attr,
> >     &dev_attr_prefcore.attr,
> > +   &dev_attr_cpb_boost.attr,
> >     NULL
> >  };
> >
> > diff --git a/include/linux/amd-pstate.h b/include/linux/amd-pstate.h
> > index 8ba5dd4d3405..56f616a5cd0f 100644
> > --- a/include/linux/amd-pstate.h
> > +++ b/include/linux/amd-pstate.h
> > @@ -106,6 +106,7 @@ struct amd_cpudata {
> >     u32     policy;
> >     u64     cppc_cap1_cached;
> >     bool    suspended;
> > +   bool    boost_state;
> >  };
> >
> >  /*
> >
>
>
> --
> Oleksandr Natalenko (post-factum)

^ permalink raw reply	[flat|nested] 23+ messages in thread

* RE: [PATCH v10 6/7] cpufreq: amd-pstate: introduce per CPU frequency boost control
  2024-05-08  9:43     ` Oleksandr Natalenko
@ 2024-05-08 12:20       ` Yuan, Perry
  0 siblings, 0 replies; 23+ messages in thread
From: Yuan, Perry @ 2024-05-08 12:20 UTC (permalink / raw)
  To: Oleksandr Natalenko, rafael.j.wysocki, Limonciello, Mario,
	viresh.kumar, Huang, Ray, Shenoy, Gautham Ranjal, Petkov,
	Borislav
  Cc: Deucher, Alexander, Huang, Shimmer, Du, Xiaojian, Meng,
	Li (Jassmine),
	linux-pm, linux-kernel

[AMD Official Use Only - General]

Regards.
Perry

> -----Original Message-----
> From: Oleksandr Natalenko <oleksandr@natalenko.name>
> Sent: Wednesday, May 8, 2024 5:43 PM
> To: rafael.j.wysocki@intel.com; Limonciello, Mario
> <Mario.Limonciello@amd.com>; viresh.kumar@linaro.org; Huang, Ray
> <Ray.Huang@amd.com>; Shenoy, Gautham Ranjal
> <gautham.shenoy@amd.com>; Petkov, Borislav
> <Borislav.Petkov@amd.com>; Yuan, Perry <Perry.Yuan@amd.com>
> Cc: Deucher, Alexander <Alexander.Deucher@amd.com>; Huang, Shimmer
> <Shimmer.Huang@amd.com>; Du, Xiaojian <Xiaojian.Du@amd.com>; Meng,
> Li (Jassmine) <Li.Meng@amd.com>; linux-pm@vger.kernel.org; linux-
> kernel@vger.kernel.org
> Subject: Re: [PATCH v10 6/7] cpufreq: amd-pstate: introduce per CPU
> frequency boost control
>
> On středa 8. května 2024 11:34:21, SELČ Oleksandr Natalenko wrote:
> > Hello.
> >
> > On středa 8. května 2024 9:21:11, SELČ Perry Yuan wrote:
> > > Add a new sysfs attribute file to support per CPU frequency boost
> > > control, allowing individual CPUs to enable or disable CPB separately.
> > >
> > > The new sysfs attribute file is located at below path,
> > > `/sys/devices/system/cpu/cpuX/cpufreq/boost`,
> > > where `X` represents the CPU number.
> > >
> > > To disable CPB for a specific CPU, you can use the following command:
> > > $ sudo bash -c "echo 0 > /sys/devices/system/cpu/cpuX/cpufreq/boost"
> > >
> > > After disabling CPB, the CPU frequency will no longer boost beyond
> > > the base frequency for that particular CPU.
> > >
> > > for example:
> > > ----------------------------------------------------------------------
> > > CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ
> MHZ
> > >   0    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1666.7740
> > >   1    0      0    0 0:0:0:0          yes 4208.0000 400.0000  400.0000
> > >
> > > --------------------------------------------------------------------
> > > -- $ sudo bash -c "echo 0 >
> > > /sys/devices/system/cpu/cpu0/cpufreq/boost"
> > >
> > > CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ
> MHZ
> > >   0    0      0    0 0:0:0:0          yes 3501.0000 400.0000 4154.3140
> > >   1    0      0    0 0:0:0:0          yes 4208.0000 400.0000  400.0000
> > >
> > > Please be aware that modifying the global variable
> > > `amd_pstate_global_params.cpb_boost` will overwrite the individual CPU
> settings.
> > >
> > > Signed-off-by: Perry Yuan <perry.yuan@amd.com>
> > > ---
> > >  drivers/cpufreq/amd-pstate.c | 27 +++++++++++++++++++++++++++
> > >  1 file changed, 27 insertions(+)
> > >
> > > diff --git a/drivers/cpufreq/amd-pstate.c
> > > b/drivers/cpufreq/amd-pstate.c index 11bce2c1db32..cb0055e7c842
> > > 100644
> > > --- a/drivers/cpufreq/amd-pstate.c
> > > +++ b/drivers/cpufreq/amd-pstate.c
> > > @@ -1371,6 +1371,30 @@ static int amd_pstate_cpu_boost(int cpu, bool
> state)
> > >   return ret < 0 ? ret : 0;
> > >  }
> > >
> > > +static ssize_t show_boost(struct cpufreq_policy *policy, char *buf)
> > > +{
> > > + struct amd_cpudata *cpudata = policy->driver_data;
> > > + bool boost_val;
> > > +
> > > + boost_val = READ_ONCE(cpudata->boost_state);
> > > +
> > > + return sysfs_emit(buf, "%u\n", boost_val); }
> > > +
> > > +static ssize_t store_boost(
> > > +         struct cpufreq_policy *policy, const char *buf, size_t count) {
> > > + bool boost_val;
> > > + int ret;
> > > +
> > > + if (sscanf(buf, "%d", &boost_val) != 1)
> >
> > This will generate warning. IIUC, sscanf() doesn't work with booleans
> directly, so you'd probably want to read the value into an (unsigned) integer,
> and then cast it to bool.
>
> …or maybe just use kstrtobool()?

Yes,  the kstrtobool is the function I need to use,  will change it in next.
Thanks
Perry.

>
> >
> > > +         return -EINVAL;
> > > +
> > > + ret = amd_pstate_cpu_boost(policy->cpu, boost_val);
> > > +
> > > + return ret < 0 ? ret : count;
> > > +}
> > > +
> > >  static ssize_t cpb_boost_show(struct device *dev,
> > >                      struct device_attribute *attr, char *buf)  { @@ -
> 1416,6
> > > +1440,7 @@ cpufreq_freq_attr_ro(amd_pstate_prefcore_ranking);
> > >  cpufreq_freq_attr_ro(amd_pstate_hw_prefcore);
> > >  cpufreq_freq_attr_rw(energy_performance_preference);
> > >  cpufreq_freq_attr_ro(energy_performance_available_preferences);
> > > +cpufreq_freq_attr_rw(boost);
> > >  static DEVICE_ATTR_RW(status);
> > >  static DEVICE_ATTR_RO(prefcore);
> > >  static DEVICE_ATTR_RW(cpb_boost);
> > > @@ -1426,6 +1451,7 @@ static struct freq_attr *amd_pstate_attr[] = {
> > >   &amd_pstate_highest_perf,
> > >   &amd_pstate_prefcore_ranking,
> > >   &amd_pstate_hw_prefcore,
> > > + &boost,
> > >   NULL,
> > >  };
> > >
> > > @@ -1437,6 +1463,7 @@ static struct freq_attr *amd_pstate_epp_attr[]
> = {
> > >   &amd_pstate_hw_prefcore,
> > >   &energy_performance_preference,
> > >   &energy_performance_available_preferences,
> > > + &boost,
> > >   NULL,
> > >  };
> > >
> > >
> >
> >
> >
>
>
> --
> Oleksandr Natalenko (post-factum)

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost
  2024-05-08  7:21 [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost Perry Yuan
                   ` (7 preceding siblings ...)
  2024-05-08  8:18 ` [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost Borislav Petkov
@ 2024-05-08 15:11 ` Oleksandr Natalenko
  2024-05-08 19:13   ` Oleksandr Natalenko
  8 siblings, 1 reply; 23+ messages in thread
From: Oleksandr Natalenko @ 2024-05-08 15:11 UTC (permalink / raw)
  To: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov, Perry Yuan
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 10212 bytes --]

Hello.

On středa 8. května 2024 9:21:05, SELČ Perry Yuan wrote:
> Hi all,
> The patchset series add core performance boost feature for AMD pstate
> driver including passisve ,guide and active mode support.
> 
> User can change core frequency boost control with a new sysfs entry:
> 
> "/sys/devices/system/cpu/amd_pstate/cpb_boost"
> 
> 
> 1) globally disable core boost:
> $ sudo bash -c "echo 0 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
> $ lscpu -ae
> CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ      MHZ
>   0    0      0    0 0:0:0:0          yes 4201.0000 400.0000 2983.578
>   1    0      0    1 1:1:1:0          yes 4201.0000 400.0000 2983.578
>   2    0      0    2 2:2:2:0          yes 4201.0000 400.0000 2583.855
>   3    0      0    3 3:3:3:0          yes 4201.0000 400.0000 2983.578
>   4    0      0    4 4:4:4:0          yes 4201.0000 400.0000 2983.578
> 
> 2) globally enable core boost:
> $ sudo bash -c "echo 1 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
> $ lscpu -ae
>    0    0      0    0 0:0:0:0          yes 5759.0000 400.0000 2983.578
>   1    0      0    1 1:1:1:0          yes 5759.0000 400.0000 2983.578
>   2    0      0    2 2:2:2:0          yes 5759.0000 400.0000 2983.578
>   3    0      0    3 3:3:3:0          yes 5759.0000 400.0000 2983.578
>   4    0      0    4 4:4:4:0          yes 5759.0000 400.0000 2983.578
> 
> 
> ============================================================================
> The V9 patches add per CPU boost control, user can enable/disable CPUs boost
> as the below command tested on a laptop system.
> # before
>   CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
>   0    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1666.7740
>   1    0      0    0 0:0:0:0          yes 4208.0000 400.0000  400.0000
>   2    0      0    1 1:1:1:0          yes 4208.0000 400.0000 3386.1260
>   3    0      0    1 1:1:1:0          yes 4208.0000 400.0000  400.0000
> $ sudo rdmsr 0xc00102b3 -p 0
> 10a6
> 
> $ sudo bash -c "echo 1 > /sys/devices/system/cpu/cpu0/cpufreq/boost"
> # after
>   CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
>     0    0      0    0 0:0:0:0          yes 3501.0000 400.0000  400.0000
>     1    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1391.0690
>     2    0      0    1 1:1:1:0          yes 4208.0000 400.0000 3654.4541
>     3    0      0    1 1:1:1:0          yes 4208.0000 400.0000  400.0000
> $ sudo rdmsr 0xc00102b3 -p 0
> 108a
> 
> 
> The patches have been tested with the AMD 7950X processor and many users
> would like to get core boost control enabled for power saving.
> 
> Perry.
> 
> 
> Changes from v9:
>  * change per CPU boost sysfs file name to `boost` (Mario)
>  * rebased to latest linux-pm/bleeding-edge
> 
> Changes from v8:
>  * pick RB flag for patch 4 (Mario)
>  * change boot_cpu_has to cpu_feature_enabled for patch 2 (Boris)
>  * merge patch 6 into patch 3 (Mario)
>  * add two patch for per CPU boost control patch 6 & 7(Mario)
>  * rebased to latest linux-pm/bleeding-edge
> 
> Changes from v7:
>  * fix the mutext locking issue in the sysfs file update(Ray, Mario)
>  * pick ack flag from Ray
>  * use X86_FEATURE_CPB to verify the CPB function in Patch #2(Ray)
>  * rerun the testing to check function works well
>  * rebased to linux-pm/bleeding-edge latest
> 
> Changes from v6:
>  * reword patch 2 commit log (Gautham)
>  * update cover letter description(Gautham)
>  * rebase to kernel v6.9-rc5
> 
> Changes from v4:
>  * drop the legacy boost remove patch, let us keep the legacy interface
>    in case some applications break.
>  * rebase to linux-pm/bleeding-edge branch
>  * rework the patchset base on [PATCH v8 0/8] AMD Pstate Fixes And
>    Enhancements which has some intial work done there.
> 
> Changes from v4:
>  * move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
>  * pick RB flag from Gautham R. Shenoy
>  * add Cc Oleksandr Natalenko <oleksandr@natalenko.name>
>  * rebase to latest linux-pm/bleeding-edge branch
>  * rebase the patch set on top of [PATCH v7 0/6] AMD Pstate Fixes And Enhancements
>  * update  [PATCH v7 2/6] to use MSR_K7_HWCR_CPB_DIS_BIT
> 
> Changes from v3:
>  * rebased to linux-pm/bleeding-edge v6.8
>  * rename global to amd_pstate_global_params(Oleksandr Natalenko)
>  * remove comments for boot_supported in amd_pstate.h
>  * fix the compiler warning for amd-pstate-ut.ko
>  * use for_each_online_cpu in cpb_boost_store which fix the null pointer
>    error during testing
>  * fix the max frequency value to be KHz when cpb boost disabled(Gautham R. Shenoy)
> 
> Changes from v2:
>  * move global struct to amd-pstate.h
>  * fix the amd-pstate-ut with new cpb control interface
> 
> Changes from v1:
>  * drop suspend/resume fix patch 6/7 because of the fix should be in
>    another fix series instead of CPB feature
>  * move the set_boost remove patch to the last(Mario)
>  * Fix commit info with "Closes:" (Mario)
>  * simplified global.cpb_supported initialization(Mario)
>  * Add guide mode support for CPB control
>  * Fixed some Doc typos and add guide mode info to Doc as well.
> 
> v1: https://lore.kernel.org/all/cover.1706255676.git.perry.yuan@amd.com/
> v2: https://lore.kernel.org/lkml/cover.1707047943.git.perry.yuan@amd.com/
> v3: https://lore.kernel.org/lkml/cover.1707297581.git.perry.yuan@amd.com/
> v4: https://lore.kernel.org/lkml/cover.1710322310.git.perry.yuan@amd.com/
> v5: https://lore.kernel.org/lkml/cover.1710473712.git.perry.yuan@amd.com/
> v6: https://lore.kernel.org/lkml/cover.1710754236.git.perry.yuan@amd.com/
> v7: https://lore.kernel.org/lkml/cover.1713861200.git.perry.yuan@amd.com/
> v8: https://lore.kernel.org/lkml/cover.1714112854.git.perry.yuan@amd.com/
> v9: https://lore.kernel.org/lkml/cover.1714989803.git.perry.yuan@amd.com/
> 
> Perry Yuan (7):
>   cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
>   cpufreq: amd-pstate: initialize new core precision boost state
>   cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control
>   cpufreq: amd-pstate: fix the MSR highest perf will be reset issue
>     while cpb boost off
>   Documentation: cpufreq: amd-pstate: introduce the new cpu boost
>     control method
>   cpufreq: amd-pstate: introduce per CPU frequency boost control
>   Documentation: cpufreq: amd-pstate: update doc for Per CPU boost
>     control method
> 
>  Documentation/admin-guide/pm/amd-pstate.rst |  30 ++++
>  arch/x86/include/asm/msr-index.h            |   2 +
>  drivers/cpufreq/acpi-cpufreq.c              |   2 -
>  drivers/cpufreq/amd-pstate-ut.c             |   2 +-
>  drivers/cpufreq/amd-pstate.c                | 189 ++++++++++++++++++--
>  include/linux/amd-pstate.h                  |  14 ++
>  6 files changed, 225 insertions(+), 14 deletions(-)

I've applied this series along with fixes and improvements [1], and I cannot get guided mode to work with my CPU any more.

The CPU is:

```
Vendor ID:                AuthenticAMD
  Model name:             AMD Ryzen 9 5950X 16-Core Processor
    CPU family:           25
    Model:                33
    Thread(s) per core:   2
    Core(s) per socket:   16
    Socket(s):            1
    Stepping:             2
```

I've got `amd_pstate=guided` set in the kernel cmdline, but `amd-pstate-epp` gets loaded anyway. When I try to set `guided` manually via `echo guided | sudo tee /sys/devices/system/cpu/amd_pstate/status`, the status gets dropped to `disable`, `tee` errors out with `-ENODEV`, and there's this in the kernel log:

```
$ jctl -kb | grep sysfs: | cut -d ' ' -f 5-
kernel: sysfs: cannot create duplicate filename '/devices/system/cpu/cpufreq/policy0/boost'
…
kernel: sysfs: cannot create duplicate filename '/devices/system/cpu/cpufreq/policy31/boost'
```

The following is applied on top of v6.9-rc7:

```
cpufreq: amd-pstate: automatically load pstate driver by default
cpufreq: amd-pstate: fix the highest frequency issue which limit performance
cpufreq: amd-pstate: implement heterogeneous core topology for highest performance initialization
x86/cpufeatures: Add feature bits for AMD heterogeneous processor
cpufreq: amd-pstate: switch boot_cpu_has() to cpu_feature_enabled()
Documentation: PM: amd-pstate: add guide mode to the Operation mode
Documentation: PM: amd-pstate: add debugging section for driver loading failure
Documentation: PM: amd-pstate: introducing recommended reboot requirement during driver switch
cpufreq: amd-pstate: add debug message while CPPC is supported and disabled by SBIOS
cpufreq: amd-pstate: show CPPC debug message if CPPC is not supported
cpufreq: amd-pstate: optimiza the initial frequency values verification
Documentation: cpufreq: amd-pstate: update doc for Per CPU boost control method
cpufreq: amd-pstate: introduce per CPU frequency boost control
Documentation: cpufreq: amd-pstate: introduce the new cpu boost control method
cpufreq: amd-pstate: fix the MSR highest perf will be reset issue while cpb boost off
cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control
cpufreq: amd-pstate: initialize new core precision boost state
cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
cpufreq: amd-pstate: remove unused variable lowest_nonlinear_freq
cpufreq: amd-pstate: fix code format problems
cpufreq: amd-pstate: Add quirk for the pstate CPPC capabilities missing
cpufreq: amd-pstate: get transition delay and latency value from ACPI tables
cpufreq: amd-pstate: Bail out if min/max/nominal_freq is 0
cpufreq: amd-pstate: Remove amd_get_{min,max,nominal,lowest_nonlinear}_freq()
cpufreq: amd-pstate: Unify computation of {max,min,nominal,lowest_nonlinear}_freq
cpufreq: amd-pstate: Document the units for freq variables in amd_cpudata
cpufreq: amd-pstate: Document *_limit_* fields in struct amd_cpudata
```

Previously, with your submissions, it was possible to use `guided` mode with my Zen 3.

[1] https://lore.kernel.org/lkml/cover.1715065568.git.perry.yuan@amd.com/

-- 
Oleksandr Natalenko (post-factum)

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost
  2024-05-08 15:11 ` Oleksandr Natalenko
@ 2024-05-08 19:13   ` Oleksandr Natalenko
  2024-05-08 19:21     ` Oleksandr Natalenko
  0 siblings, 1 reply; 23+ messages in thread
From: Oleksandr Natalenko @ 2024-05-08 19:13 UTC (permalink / raw)
  To: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov, Perry Yuan
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 12960 bytes --]

On středa 8. května 2024 17:11:42, SELČ Oleksandr Natalenko wrote:
> Hello.
> 
> On středa 8. května 2024 9:21:05, SELČ Perry Yuan wrote:
> > Hi all,
> > The patchset series add core performance boost feature for AMD pstate
> > driver including passisve ,guide and active mode support.
> > 
> > User can change core frequency boost control with a new sysfs entry:
> > 
> > "/sys/devices/system/cpu/amd_pstate/cpb_boost"
> > 
> > 
> > 1) globally disable core boost:
> > $ sudo bash -c "echo 0 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
> > $ lscpu -ae
> > CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ      MHZ
> >   0    0      0    0 0:0:0:0          yes 4201.0000 400.0000 2983.578
> >   1    0      0    1 1:1:1:0          yes 4201.0000 400.0000 2983.578
> >   2    0      0    2 2:2:2:0          yes 4201.0000 400.0000 2583.855
> >   3    0      0    3 3:3:3:0          yes 4201.0000 400.0000 2983.578
> >   4    0      0    4 4:4:4:0          yes 4201.0000 400.0000 2983.578
> > 
> > 2) globally enable core boost:
> > $ sudo bash -c "echo 1 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
> > $ lscpu -ae
> >    0    0      0    0 0:0:0:0          yes 5759.0000 400.0000 2983.578
> >   1    0      0    1 1:1:1:0          yes 5759.0000 400.0000 2983.578
> >   2    0      0    2 2:2:2:0          yes 5759.0000 400.0000 2983.578
> >   3    0      0    3 3:3:3:0          yes 5759.0000 400.0000 2983.578
> >   4    0      0    4 4:4:4:0          yes 5759.0000 400.0000 2983.578
> > 
> > 
> > ============================================================================
> > The V9 patches add per CPU boost control, user can enable/disable CPUs boost
> > as the below command tested on a laptop system.
> > # before
> >   CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
> >   0    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1666.7740
> >   1    0      0    0 0:0:0:0          yes 4208.0000 400.0000  400.0000
> >   2    0      0    1 1:1:1:0          yes 4208.0000 400.0000 3386.1260
> >   3    0      0    1 1:1:1:0          yes 4208.0000 400.0000  400.0000
> > $ sudo rdmsr 0xc00102b3 -p 0
> > 10a6
> > 
> > $ sudo bash -c "echo 1 > /sys/devices/system/cpu/cpu0/cpufreq/boost"
> > # after
> >   CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
> >     0    0      0    0 0:0:0:0          yes 3501.0000 400.0000  400.0000
> >     1    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1391.0690
> >     2    0      0    1 1:1:1:0          yes 4208.0000 400.0000 3654.4541
> >     3    0      0    1 1:1:1:0          yes 4208.0000 400.0000  400.0000
> > $ sudo rdmsr 0xc00102b3 -p 0
> > 108a
> > 
> > 
> > The patches have been tested with the AMD 7950X processor and many users
> > would like to get core boost control enabled for power saving.
> > 
> > Perry.
> > 
> > 
> > Changes from v9:
> >  * change per CPU boost sysfs file name to `boost` (Mario)
> >  * rebased to latest linux-pm/bleeding-edge
> > 
> > Changes from v8:
> >  * pick RB flag for patch 4 (Mario)
> >  * change boot_cpu_has to cpu_feature_enabled for patch 2 (Boris)
> >  * merge patch 6 into patch 3 (Mario)
> >  * add two patch for per CPU boost control patch 6 & 7(Mario)
> >  * rebased to latest linux-pm/bleeding-edge
> > 
> > Changes from v7:
> >  * fix the mutext locking issue in the sysfs file update(Ray, Mario)
> >  * pick ack flag from Ray
> >  * use X86_FEATURE_CPB to verify the CPB function in Patch #2(Ray)
> >  * rerun the testing to check function works well
> >  * rebased to linux-pm/bleeding-edge latest
> > 
> > Changes from v6:
> >  * reword patch 2 commit log (Gautham)
> >  * update cover letter description(Gautham)
> >  * rebase to kernel v6.9-rc5
> > 
> > Changes from v4:
> >  * drop the legacy boost remove patch, let us keep the legacy interface
> >    in case some applications break.
> >  * rebase to linux-pm/bleeding-edge branch
> >  * rework the patchset base on [PATCH v8 0/8] AMD Pstate Fixes And
> >    Enhancements which has some intial work done there.
> > 
> > Changes from v4:
> >  * move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
> >  * pick RB flag from Gautham R. Shenoy
> >  * add Cc Oleksandr Natalenko <oleksandr@natalenko.name>
> >  * rebase to latest linux-pm/bleeding-edge branch
> >  * rebase the patch set on top of [PATCH v7 0/6] AMD Pstate Fixes And Enhancements
> >  * update  [PATCH v7 2/6] to use MSR_K7_HWCR_CPB_DIS_BIT
> > 
> > Changes from v3:
> >  * rebased to linux-pm/bleeding-edge v6.8
> >  * rename global to amd_pstate_global_params(Oleksandr Natalenko)
> >  * remove comments for boot_supported in amd_pstate.h
> >  * fix the compiler warning for amd-pstate-ut.ko
> >  * use for_each_online_cpu in cpb_boost_store which fix the null pointer
> >    error during testing
> >  * fix the max frequency value to be KHz when cpb boost disabled(Gautham R. Shenoy)
> > 
> > Changes from v2:
> >  * move global struct to amd-pstate.h
> >  * fix the amd-pstate-ut with new cpb control interface
> > 
> > Changes from v1:
> >  * drop suspend/resume fix patch 6/7 because of the fix should be in
> >    another fix series instead of CPB feature
> >  * move the set_boost remove patch to the last(Mario)
> >  * Fix commit info with "Closes:" (Mario)
> >  * simplified global.cpb_supported initialization(Mario)
> >  * Add guide mode support for CPB control
> >  * Fixed some Doc typos and add guide mode info to Doc as well.
> > 
> > v1: https://lore.kernel.org/all/cover.1706255676.git.perry.yuan@amd.com/
> > v2: https://lore.kernel.org/lkml/cover.1707047943.git.perry.yuan@amd.com/
> > v3: https://lore.kernel.org/lkml/cover.1707297581.git.perry.yuan@amd.com/
> > v4: https://lore.kernel.org/lkml/cover.1710322310.git.perry.yuan@amd.com/
> > v5: https://lore.kernel.org/lkml/cover.1710473712.git.perry.yuan@amd.com/
> > v6: https://lore.kernel.org/lkml/cover.1710754236.git.perry.yuan@amd.com/
> > v7: https://lore.kernel.org/lkml/cover.1713861200.git.perry.yuan@amd.com/
> > v8: https://lore.kernel.org/lkml/cover.1714112854.git.perry.yuan@amd.com/
> > v9: https://lore.kernel.org/lkml/cover.1714989803.git.perry.yuan@amd.com/
> > 
> > Perry Yuan (7):
> >   cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
> >   cpufreq: amd-pstate: initialize new core precision boost state
> >   cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control
> >   cpufreq: amd-pstate: fix the MSR highest perf will be reset issue
> >     while cpb boost off
> >   Documentation: cpufreq: amd-pstate: introduce the new cpu boost
> >     control method
> >   cpufreq: amd-pstate: introduce per CPU frequency boost control
> >   Documentation: cpufreq: amd-pstate: update doc for Per CPU boost
> >     control method
> > 
> >  Documentation/admin-guide/pm/amd-pstate.rst |  30 ++++
> >  arch/x86/include/asm/msr-index.h            |   2 +
> >  drivers/cpufreq/acpi-cpufreq.c              |   2 -
> >  drivers/cpufreq/amd-pstate-ut.c             |   2 +-
> >  drivers/cpufreq/amd-pstate.c                | 189 ++++++++++++++++++--
> >  include/linux/amd-pstate.h                  |  14 ++
> >  6 files changed, 225 insertions(+), 14 deletions(-)
> 
> I've applied this series along with fixes and improvements [1], and I cannot get guided mode to work with my CPU any more.
> 
> The CPU is:
> 
> ```
> Vendor ID:                AuthenticAMD
>   Model name:             AMD Ryzen 9 5950X 16-Core Processor
>     CPU family:           25
>     Model:                33
>     Thread(s) per core:   2
>     Core(s) per socket:   16
>     Socket(s):            1
>     Stepping:             2
> ```
> 
> I've got `amd_pstate=guided` set in the kernel cmdline, but `amd-pstate-epp` gets loaded anyway.

OK, this part is solved like below:

```
diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
index aafa4466e5ced..5aee7d2b8cfd7 100644
--- a/drivers/cpufreq/amd-pstate.c
+++ b/drivers/cpufreq/amd-pstate.c
@@ -66,7 +66,7 @@
 static struct cpufreq_driver *current_pstate_driver;
 static struct cpufreq_driver amd_pstate_driver;
 static struct cpufreq_driver amd_pstate_epp_driver;
-static int cppc_state;
+static int cppc_state = CONFIG_X86_AMD_PSTATE_DEFAULT_MODE;
 static bool cppc_enabled;
 static bool amd_pstate_prefcore = true;
 static struct quirk_entry *quirks;
@@ -1958,10 +1958,6 @@ static int __init amd_pstate_init(void)
 	/* check if this machine need CPPC quirks */
 	dmi_check_system(amd_pstate_quirks_table);
 
-	/* get default driver mode for loading*/
-	cppc_state = CONFIG_X86_AMD_PSTATE_DEFAULT_MODE;
-	pr_debug("cppc working state set to mode:%d\n", cppc_state);
-
 	switch (cppc_state) {
 	case AMD_PSTATE_DISABLE:
 		pr_info("driver load is disabled, boot with specific mode to enable this\n");
```

as we have discussed here [1].

[1] https://lore.kernel.org/lkml/CYYPR12MB865554562BE018D46FF0108C9CE52@CYYPR12MB8655.namprd12.prod.outlook.com/

But this part:

> When I try to set `guided` manually via `echo guided | sudo tee /sys/devices/system/cpu/amd_pstate/status`, the status gets dropped to `disable`, `tee` errors out with `-ENODEV`, and there's this in the kernel log:
> 
> ```
> $ jctl -kb | grep sysfs: | cut -d ' ' -f 5-
> kernel: sysfs: cannot create duplicate filename '/devices/system/cpu/cpufreq/policy0/boost'
> …
> kernel: sysfs: cannot create duplicate filename '/devices/system/cpu/cpufreq/policy31/boost'
> ```

is not. I've successfully booted with `amd_pstate=guided`, then did this:

```
$ echo active | sudo tee /sys/devices/system/cpu/amd_pstate/status
```

just for the sake of test, and got this:

```
tee: /sys/devices/system/cpu/amd_pstate/status: File exists
```

and this:

```
kernel: WARNING: CPU: 9 PID: 8528 at drivers/cpufreq/cpufreq.c:2961 cpufreq_unregister_driver+0x1a/0xc0
```

which corresponds to:

```
2957 void cpufreq_unregister_driver(struct cpufreq_driver *driver)
2958 {
2959         unsigned long flags;
2960
2961         if (WARN_ON(!cpufreq_driver || (driver != cpufreq_driver)))
2962                 return;
```

I haven't conducted this test before, so I don't know whether this behaviour is new, or it was present in older iterations. I also don't know if this belongs to the "boost" series or the "fixes", and just letting you know so that you can test the runtime switching yourself and see if it is reproducible in your environment as well or not.

> The following is applied on top of v6.9-rc7:
> 
> ```
> cpufreq: amd-pstate: automatically load pstate driver by default
> cpufreq: amd-pstate: fix the highest frequency issue which limit performance
> cpufreq: amd-pstate: implement heterogeneous core topology for highest performance initialization
> x86/cpufeatures: Add feature bits for AMD heterogeneous processor
> cpufreq: amd-pstate: switch boot_cpu_has() to cpu_feature_enabled()
> Documentation: PM: amd-pstate: add guide mode to the Operation mode
> Documentation: PM: amd-pstate: add debugging section for driver loading failure
> Documentation: PM: amd-pstate: introducing recommended reboot requirement during driver switch
> cpufreq: amd-pstate: add debug message while CPPC is supported and disabled by SBIOS
> cpufreq: amd-pstate: show CPPC debug message if CPPC is not supported
> cpufreq: amd-pstate: optimiza the initial frequency values verification
> Documentation: cpufreq: amd-pstate: update doc for Per CPU boost control method
> cpufreq: amd-pstate: introduce per CPU frequency boost control
> Documentation: cpufreq: amd-pstate: introduce the new cpu boost control method
> cpufreq: amd-pstate: fix the MSR highest perf will be reset issue while cpb boost off
> cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control
> cpufreq: amd-pstate: initialize new core precision boost state
> cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
> cpufreq: amd-pstate: remove unused variable lowest_nonlinear_freq
> cpufreq: amd-pstate: fix code format problems
> cpufreq: amd-pstate: Add quirk for the pstate CPPC capabilities missing
> cpufreq: amd-pstate: get transition delay and latency value from ACPI tables
> cpufreq: amd-pstate: Bail out if min/max/nominal_freq is 0
> cpufreq: amd-pstate: Remove amd_get_{min,max,nominal,lowest_nonlinear}_freq()
> cpufreq: amd-pstate: Unify computation of {max,min,nominal,lowest_nonlinear}_freq
> cpufreq: amd-pstate: Document the units for freq variables in amd_cpudata
> cpufreq: amd-pstate: Document *_limit_* fields in struct amd_cpudata
> ```
> 
> Previously, with your submissions, it was possible to use `guided` mode with my Zen 3.
> 
> [1] https://lore.kernel.org/lkml/cover.1715065568.git.perry.yuan@amd.com/
> 
> 


-- 
Oleksandr Natalenko (post-factum)

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost
  2024-05-08 19:13   ` Oleksandr Natalenko
@ 2024-05-08 19:21     ` Oleksandr Natalenko
  2024-05-08 21:31       ` Oleksandr Natalenko
  0 siblings, 1 reply; 23+ messages in thread
From: Oleksandr Natalenko @ 2024-05-08 19:21 UTC (permalink / raw)
  To: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov, Perry Yuan
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 14565 bytes --]

On středa 8. května 2024 21:13:40, SELČ Oleksandr Natalenko wrote:
> On středa 8. května 2024 17:11:42, SELČ Oleksandr Natalenko wrote:
> > Hello.
> > 
> > On středa 8. května 2024 9:21:05, SELČ Perry Yuan wrote:
> > > Hi all,
> > > The patchset series add core performance boost feature for AMD pstate
> > > driver including passisve ,guide and active mode support.
> > > 
> > > User can change core frequency boost control with a new sysfs entry:
> > > 
> > > "/sys/devices/system/cpu/amd_pstate/cpb_boost"
> > > 
> > > 
> > > 1) globally disable core boost:
> > > $ sudo bash -c "echo 0 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
> > > $ lscpu -ae
> > > CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ      MHZ
> > >   0    0      0    0 0:0:0:0          yes 4201.0000 400.0000 2983.578
> > >   1    0      0    1 1:1:1:0          yes 4201.0000 400.0000 2983.578
> > >   2    0      0    2 2:2:2:0          yes 4201.0000 400.0000 2583.855
> > >   3    0      0    3 3:3:3:0          yes 4201.0000 400.0000 2983.578
> > >   4    0      0    4 4:4:4:0          yes 4201.0000 400.0000 2983.578
> > > 
> > > 2) globally enable core boost:
> > > $ sudo bash -c "echo 1 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
> > > $ lscpu -ae
> > >    0    0      0    0 0:0:0:0          yes 5759.0000 400.0000 2983.578
> > >   1    0      0    1 1:1:1:0          yes 5759.0000 400.0000 2983.578
> > >   2    0      0    2 2:2:2:0          yes 5759.0000 400.0000 2983.578
> > >   3    0      0    3 3:3:3:0          yes 5759.0000 400.0000 2983.578
> > >   4    0      0    4 4:4:4:0          yes 5759.0000 400.0000 2983.578
> > > 
> > > 
> > > ============================================================================
> > > The V9 patches add per CPU boost control, user can enable/disable CPUs boost
> > > as the below command tested on a laptop system.
> > > # before
> > >   CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
> > >   0    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1666.7740
> > >   1    0      0    0 0:0:0:0          yes 4208.0000 400.0000  400.0000
> > >   2    0      0    1 1:1:1:0          yes 4208.0000 400.0000 3386.1260
> > >   3    0      0    1 1:1:1:0          yes 4208.0000 400.0000  400.0000
> > > $ sudo rdmsr 0xc00102b3 -p 0
> > > 10a6
> > > 
> > > $ sudo bash -c "echo 1 > /sys/devices/system/cpu/cpu0/cpufreq/boost"
> > > # after
> > >   CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
> > >     0    0      0    0 0:0:0:0          yes 3501.0000 400.0000  400.0000
> > >     1    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1391.0690
> > >     2    0      0    1 1:1:1:0          yes 4208.0000 400.0000 3654.4541
> > >     3    0      0    1 1:1:1:0          yes 4208.0000 400.0000  400.0000
> > > $ sudo rdmsr 0xc00102b3 -p 0
> > > 108a
> > > 
> > > 
> > > The patches have been tested with the AMD 7950X processor and many users
> > > would like to get core boost control enabled for power saving.
> > > 
> > > Perry.
> > > 
> > > 
> > > Changes from v9:
> > >  * change per CPU boost sysfs file name to `boost` (Mario)
> > >  * rebased to latest linux-pm/bleeding-edge
> > > 
> > > Changes from v8:
> > >  * pick RB flag for patch 4 (Mario)
> > >  * change boot_cpu_has to cpu_feature_enabled for patch 2 (Boris)
> > >  * merge patch 6 into patch 3 (Mario)
> > >  * add two patch for per CPU boost control patch 6 & 7(Mario)
> > >  * rebased to latest linux-pm/bleeding-edge
> > > 
> > > Changes from v7:
> > >  * fix the mutext locking issue in the sysfs file update(Ray, Mario)
> > >  * pick ack flag from Ray
> > >  * use X86_FEATURE_CPB to verify the CPB function in Patch #2(Ray)
> > >  * rerun the testing to check function works well
> > >  * rebased to linux-pm/bleeding-edge latest
> > > 
> > > Changes from v6:
> > >  * reword patch 2 commit log (Gautham)
> > >  * update cover letter description(Gautham)
> > >  * rebase to kernel v6.9-rc5
> > > 
> > > Changes from v4:
> > >  * drop the legacy boost remove patch, let us keep the legacy interface
> > >    in case some applications break.
> > >  * rebase to linux-pm/bleeding-edge branch
> > >  * rework the patchset base on [PATCH v8 0/8] AMD Pstate Fixes And
> > >    Enhancements which has some intial work done there.
> > > 
> > > Changes from v4:
> > >  * move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
> > >  * pick RB flag from Gautham R. Shenoy
> > >  * add Cc Oleksandr Natalenko <oleksandr@natalenko.name>
> > >  * rebase to latest linux-pm/bleeding-edge branch
> > >  * rebase the patch set on top of [PATCH v7 0/6] AMD Pstate Fixes And Enhancements
> > >  * update  [PATCH v7 2/6] to use MSR_K7_HWCR_CPB_DIS_BIT
> > > 
> > > Changes from v3:
> > >  * rebased to linux-pm/bleeding-edge v6.8
> > >  * rename global to amd_pstate_global_params(Oleksandr Natalenko)
> > >  * remove comments for boot_supported in amd_pstate.h
> > >  * fix the compiler warning for amd-pstate-ut.ko
> > >  * use for_each_online_cpu in cpb_boost_store which fix the null pointer
> > >    error during testing
> > >  * fix the max frequency value to be KHz when cpb boost disabled(Gautham R. Shenoy)
> > > 
> > > Changes from v2:
> > >  * move global struct to amd-pstate.h
> > >  * fix the amd-pstate-ut with new cpb control interface
> > > 
> > > Changes from v1:
> > >  * drop suspend/resume fix patch 6/7 because of the fix should be in
> > >    another fix series instead of CPB feature
> > >  * move the set_boost remove patch to the last(Mario)
> > >  * Fix commit info with "Closes:" (Mario)
> > >  * simplified global.cpb_supported initialization(Mario)
> > >  * Add guide mode support for CPB control
> > >  * Fixed some Doc typos and add guide mode info to Doc as well.
> > > 
> > > v1: https://lore.kernel.org/all/cover.1706255676.git.perry.yuan@amd.com/
> > > v2: https://lore.kernel.org/lkml/cover.1707047943.git.perry.yuan@amd.com/
> > > v3: https://lore.kernel.org/lkml/cover.1707297581.git.perry.yuan@amd.com/
> > > v4: https://lore.kernel.org/lkml/cover.1710322310.git.perry.yuan@amd.com/
> > > v5: https://lore.kernel.org/lkml/cover.1710473712.git.perry.yuan@amd.com/
> > > v6: https://lore.kernel.org/lkml/cover.1710754236.git.perry.yuan@amd.com/
> > > v7: https://lore.kernel.org/lkml/cover.1713861200.git.perry.yuan@amd.com/
> > > v8: https://lore.kernel.org/lkml/cover.1714112854.git.perry.yuan@amd.com/
> > > v9: https://lore.kernel.org/lkml/cover.1714989803.git.perry.yuan@amd.com/
> > > 
> > > Perry Yuan (7):
> > >   cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
> > >   cpufreq: amd-pstate: initialize new core precision boost state
> > >   cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control
> > >   cpufreq: amd-pstate: fix the MSR highest perf will be reset issue
> > >     while cpb boost off
> > >   Documentation: cpufreq: amd-pstate: introduce the new cpu boost
> > >     control method
> > >   cpufreq: amd-pstate: introduce per CPU frequency boost control
> > >   Documentation: cpufreq: amd-pstate: update doc for Per CPU boost
> > >     control method
> > > 
> > >  Documentation/admin-guide/pm/amd-pstate.rst |  30 ++++
> > >  arch/x86/include/asm/msr-index.h            |   2 +
> > >  drivers/cpufreq/acpi-cpufreq.c              |   2 -
> > >  drivers/cpufreq/amd-pstate-ut.c             |   2 +-
> > >  drivers/cpufreq/amd-pstate.c                | 189 ++++++++++++++++++--
> > >  include/linux/amd-pstate.h                  |  14 ++
> > >  6 files changed, 225 insertions(+), 14 deletions(-)
> > 
> > I've applied this series along with fixes and improvements [1], and I cannot get guided mode to work with my CPU any more.
> > 
> > The CPU is:
> > 
> > ```
> > Vendor ID:                AuthenticAMD
> >   Model name:             AMD Ryzen 9 5950X 16-Core Processor
> >     CPU family:           25
> >     Model:                33
> >     Thread(s) per core:   2
> >     Core(s) per socket:   16
> >     Socket(s):            1
> >     Stepping:             2
> > ```
> > 
> > I've got `amd_pstate=guided` set in the kernel cmdline, but `amd-pstate-epp` gets loaded anyway.
> 
> OK, this part is solved like below:
> 
> ```
> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
> index aafa4466e5ced..5aee7d2b8cfd7 100644
> --- a/drivers/cpufreq/amd-pstate.c
> +++ b/drivers/cpufreq/amd-pstate.c
> @@ -66,7 +66,7 @@
>  static struct cpufreq_driver *current_pstate_driver;
>  static struct cpufreq_driver amd_pstate_driver;
>  static struct cpufreq_driver amd_pstate_epp_driver;
> -static int cppc_state;
> +static int cppc_state = CONFIG_X86_AMD_PSTATE_DEFAULT_MODE;
>  static bool cppc_enabled;
>  static bool amd_pstate_prefcore = true;
>  static struct quirk_entry *quirks;
> @@ -1958,10 +1958,6 @@ static int __init amd_pstate_init(void)
>  	/* check if this machine need CPPC quirks */
>  	dmi_check_system(amd_pstate_quirks_table);
>  
> -	/* get default driver mode for loading*/
> -	cppc_state = CONFIG_X86_AMD_PSTATE_DEFAULT_MODE;
> -	pr_debug("cppc working state set to mode:%d\n", cppc_state);
> -
>  	switch (cppc_state) {
>  	case AMD_PSTATE_DISABLE:
>  		pr_info("driver load is disabled, boot with specific mode to enable this\n");
> ```
> 
> as we have discussed here [1].
> 
> [1] https://lore.kernel.org/lkml/CYYPR12MB865554562BE018D46FF0108C9CE52@CYYPR12MB8655.namprd12.prod.outlook.com/

Ah no, scratch it, it's not solved. With `amd_pstate=guided` the driver fails to register during the boottime with the same `sysfs` error:

```
kernel: sysfs: cannot create duplicate filename '/devices/system/cpu/cpufreq/policy0/boost'
kernel: Hardware name: ASUS System Product Name/Pro WS X570-ACE, BIOS 4805 03/18/2024
kernel: Call Trace:
kernel:  <TASK>
kernel:  dump_stack_lvl+0x47/0x60
kernel:  sysfs_warn_dup+0x5a/0x70
kernel:  sysfs_create_file_ns+0x196/0x1b0
kernel:  cpufreq_online+0x244/0xde0
kernel:  cpufreq_add_dev+0x7b/0x90
kernel:  subsys_interface_register+0x19e/0x1d0
kernel:  cpufreq_register_driver+0x177/0x2f0
kernel:  amd_pstate_init+0x1b8/0x2c0
kernel:  do_one_initcall+0x5b/0x320
kernel:  kernel_init_freeable+0x1dc/0x380
kernel:  kernel_init+0x1a/0x1c0
kernel:  ret_from_fork+0x34/0x50
kernel:  ret_from_fork_asm+0x1b/0x30
kernel:  </TASK>
```

and things revert to `acpi_cpufreq` instead.

What's wrong?

> 
> But this part:
> 
> > When I try to set `guided` manually via `echo guided | sudo tee /sys/devices/system/cpu/amd_pstate/status`, the status gets dropped to `disable`, `tee` errors out with `-ENODEV`, and there's this in the kernel log:
> > 
> > ```
> > $ jctl -kb | grep sysfs: | cut -d ' ' -f 5-
> > kernel: sysfs: cannot create duplicate filename '/devices/system/cpu/cpufreq/policy0/boost'
> > …
> > kernel: sysfs: cannot create duplicate filename '/devices/system/cpu/cpufreq/policy31/boost'
> > ```
> 
> is not. I've successfully booted with `amd_pstate=guided`, then did this:
> 
> ```
> $ echo active | sudo tee /sys/devices/system/cpu/amd_pstate/status
> ```
> 
> just for the sake of test, and got this:
> 
> ```
> tee: /sys/devices/system/cpu/amd_pstate/status: File exists
> ```
> 
> and this:
> 
> ```
> kernel: WARNING: CPU: 9 PID: 8528 at drivers/cpufreq/cpufreq.c:2961 cpufreq_unregister_driver+0x1a/0xc0
> ```
> 
> which corresponds to:
> 
> ```
> 2957 void cpufreq_unregister_driver(struct cpufreq_driver *driver)
> 2958 {
> 2959         unsigned long flags;
> 2960
> 2961         if (WARN_ON(!cpufreq_driver || (driver != cpufreq_driver)))
> 2962                 return;
> ```
> 
> I haven't conducted this test before, so I don't know whether this behaviour is new, or it was present in older iterations. I also don't know if this belongs to the "boost" series or the "fixes", and just letting you know so that you can test the runtime switching yourself and see if it is reproducible in your environment as well or not.
> 
> > The following is applied on top of v6.9-rc7:
> > 
> > ```
> > cpufreq: amd-pstate: automatically load pstate driver by default
> > cpufreq: amd-pstate: fix the highest frequency issue which limit performance
> > cpufreq: amd-pstate: implement heterogeneous core topology for highest performance initialization
> > x86/cpufeatures: Add feature bits for AMD heterogeneous processor
> > cpufreq: amd-pstate: switch boot_cpu_has() to cpu_feature_enabled()
> > Documentation: PM: amd-pstate: add guide mode to the Operation mode
> > Documentation: PM: amd-pstate: add debugging section for driver loading failure
> > Documentation: PM: amd-pstate: introducing recommended reboot requirement during driver switch
> > cpufreq: amd-pstate: add debug message while CPPC is supported and disabled by SBIOS
> > cpufreq: amd-pstate: show CPPC debug message if CPPC is not supported
> > cpufreq: amd-pstate: optimiza the initial frequency values verification
> > Documentation: cpufreq: amd-pstate: update doc for Per CPU boost control method
> > cpufreq: amd-pstate: introduce per CPU frequency boost control
> > Documentation: cpufreq: amd-pstate: introduce the new cpu boost control method
> > cpufreq: amd-pstate: fix the MSR highest perf will be reset issue while cpb boost off
> > cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control
> > cpufreq: amd-pstate: initialize new core precision boost state
> > cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
> > cpufreq: amd-pstate: remove unused variable lowest_nonlinear_freq
> > cpufreq: amd-pstate: fix code format problems
> > cpufreq: amd-pstate: Add quirk for the pstate CPPC capabilities missing
> > cpufreq: amd-pstate: get transition delay and latency value from ACPI tables
> > cpufreq: amd-pstate: Bail out if min/max/nominal_freq is 0
> > cpufreq: amd-pstate: Remove amd_get_{min,max,nominal,lowest_nonlinear}_freq()
> > cpufreq: amd-pstate: Unify computation of {max,min,nominal,lowest_nonlinear}_freq
> > cpufreq: amd-pstate: Document the units for freq variables in amd_cpudata
> > cpufreq: amd-pstate: Document *_limit_* fields in struct amd_cpudata
> > ```
> > 
> > Previously, with your submissions, it was possible to use `guided` mode with my Zen 3.
> > 
> > [1] https://lore.kernel.org/lkml/cover.1715065568.git.perry.yuan@amd.com/
> > 
> > 
> 
> 
> 


-- 
Oleksandr Natalenko (post-factum)

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost
  2024-05-08 19:21     ` Oleksandr Natalenko
@ 2024-05-08 21:31       ` Oleksandr Natalenko
  2024-05-08 22:13         ` Mario Limonciello
  0 siblings, 1 reply; 23+ messages in thread
From: Oleksandr Natalenko @ 2024-05-08 21:31 UTC (permalink / raw)
  To: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov, Perry Yuan
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 15577 bytes --]

On středa 8. května 2024 21:21:39, SELČ Oleksandr Natalenko wrote:
> On středa 8. května 2024 21:13:40, SELČ Oleksandr Natalenko wrote:
> > On středa 8. května 2024 17:11:42, SELČ Oleksandr Natalenko wrote:
> > > Hello.
> > > 
> > > On středa 8. května 2024 9:21:05, SELČ Perry Yuan wrote:
> > > > Hi all,
> > > > The patchset series add core performance boost feature for AMD pstate
> > > > driver including passisve ,guide and active mode support.
> > > > 
> > > > User can change core frequency boost control with a new sysfs entry:
> > > > 
> > > > "/sys/devices/system/cpu/amd_pstate/cpb_boost"
> > > > 
> > > > 
> > > > 1) globally disable core boost:
> > > > $ sudo bash -c "echo 0 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
> > > > $ lscpu -ae
> > > > CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ      MHZ
> > > >   0    0      0    0 0:0:0:0          yes 4201.0000 400.0000 2983.578
> > > >   1    0      0    1 1:1:1:0          yes 4201.0000 400.0000 2983.578
> > > >   2    0      0    2 2:2:2:0          yes 4201.0000 400.0000 2583.855
> > > >   3    0      0    3 3:3:3:0          yes 4201.0000 400.0000 2983.578
> > > >   4    0      0    4 4:4:4:0          yes 4201.0000 400.0000 2983.578
> > > > 
> > > > 2) globally enable core boost:
> > > > $ sudo bash -c "echo 1 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
> > > > $ lscpu -ae
> > > >    0    0      0    0 0:0:0:0          yes 5759.0000 400.0000 2983.578
> > > >   1    0      0    1 1:1:1:0          yes 5759.0000 400.0000 2983.578
> > > >   2    0      0    2 2:2:2:0          yes 5759.0000 400.0000 2983.578
> > > >   3    0      0    3 3:3:3:0          yes 5759.0000 400.0000 2983.578
> > > >   4    0      0    4 4:4:4:0          yes 5759.0000 400.0000 2983.578
> > > > 
> > > > 
> > > > ============================================================================
> > > > The V9 patches add per CPU boost control, user can enable/disable CPUs boost
> > > > as the below command tested on a laptop system.
> > > > # before
> > > >   CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
> > > >   0    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1666.7740
> > > >   1    0      0    0 0:0:0:0          yes 4208.0000 400.0000  400.0000
> > > >   2    0      0    1 1:1:1:0          yes 4208.0000 400.0000 3386.1260
> > > >   3    0      0    1 1:1:1:0          yes 4208.0000 400.0000  400.0000
> > > > $ sudo rdmsr 0xc00102b3 -p 0
> > > > 10a6
> > > > 
> > > > $ sudo bash -c "echo 1 > /sys/devices/system/cpu/cpu0/cpufreq/boost"
> > > > # after
> > > >   CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
> > > >     0    0      0    0 0:0:0:0          yes 3501.0000 400.0000  400.0000
> > > >     1    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1391.0690
> > > >     2    0      0    1 1:1:1:0          yes 4208.0000 400.0000 3654.4541
> > > >     3    0      0    1 1:1:1:0          yes 4208.0000 400.0000  400.0000
> > > > $ sudo rdmsr 0xc00102b3 -p 0
> > > > 108a
> > > > 
> > > > 
> > > > The patches have been tested with the AMD 7950X processor and many users
> > > > would like to get core boost control enabled for power saving.
> > > > 
> > > > Perry.
> > > > 
> > > > 
> > > > Changes from v9:
> > > >  * change per CPU boost sysfs file name to `boost` (Mario)
> > > >  * rebased to latest linux-pm/bleeding-edge
> > > > 
> > > > Changes from v8:
> > > >  * pick RB flag for patch 4 (Mario)
> > > >  * change boot_cpu_has to cpu_feature_enabled for patch 2 (Boris)
> > > >  * merge patch 6 into patch 3 (Mario)
> > > >  * add two patch for per CPU boost control patch 6 & 7(Mario)
> > > >  * rebased to latest linux-pm/bleeding-edge
> > > > 
> > > > Changes from v7:
> > > >  * fix the mutext locking issue in the sysfs file update(Ray, Mario)
> > > >  * pick ack flag from Ray
> > > >  * use X86_FEATURE_CPB to verify the CPB function in Patch #2(Ray)
> > > >  * rerun the testing to check function works well
> > > >  * rebased to linux-pm/bleeding-edge latest
> > > > 
> > > > Changes from v6:
> > > >  * reword patch 2 commit log (Gautham)
> > > >  * update cover letter description(Gautham)
> > > >  * rebase to kernel v6.9-rc5
> > > > 
> > > > Changes from v4:
> > > >  * drop the legacy boost remove patch, let us keep the legacy interface
> > > >    in case some applications break.
> > > >  * rebase to linux-pm/bleeding-edge branch
> > > >  * rework the patchset base on [PATCH v8 0/8] AMD Pstate Fixes And
> > > >    Enhancements which has some intial work done there.
> > > > 
> > > > Changes from v4:
> > > >  * move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
> > > >  * pick RB flag from Gautham R. Shenoy
> > > >  * add Cc Oleksandr Natalenko <oleksandr@natalenko.name>
> > > >  * rebase to latest linux-pm/bleeding-edge branch
> > > >  * rebase the patch set on top of [PATCH v7 0/6] AMD Pstate Fixes And Enhancements
> > > >  * update  [PATCH v7 2/6] to use MSR_K7_HWCR_CPB_DIS_BIT
> > > > 
> > > > Changes from v3:
> > > >  * rebased to linux-pm/bleeding-edge v6.8
> > > >  * rename global to amd_pstate_global_params(Oleksandr Natalenko)
> > > >  * remove comments for boot_supported in amd_pstate.h
> > > >  * fix the compiler warning for amd-pstate-ut.ko
> > > >  * use for_each_online_cpu in cpb_boost_store which fix the null pointer
> > > >    error during testing
> > > >  * fix the max frequency value to be KHz when cpb boost disabled(Gautham R. Shenoy)
> > > > 
> > > > Changes from v2:
> > > >  * move global struct to amd-pstate.h
> > > >  * fix the amd-pstate-ut with new cpb control interface
> > > > 
> > > > Changes from v1:
> > > >  * drop suspend/resume fix patch 6/7 because of the fix should be in
> > > >    another fix series instead of CPB feature
> > > >  * move the set_boost remove patch to the last(Mario)
> > > >  * Fix commit info with "Closes:" (Mario)
> > > >  * simplified global.cpb_supported initialization(Mario)
> > > >  * Add guide mode support for CPB control
> > > >  * Fixed some Doc typos and add guide mode info to Doc as well.
> > > > 
> > > > v1: https://lore.kernel.org/all/cover.1706255676.git.perry.yuan@amd.com/
> > > > v2: https://lore.kernel.org/lkml/cover.1707047943.git.perry.yuan@amd.com/
> > > > v3: https://lore.kernel.org/lkml/cover.1707297581.git.perry.yuan@amd.com/
> > > > v4: https://lore.kernel.org/lkml/cover.1710322310.git.perry.yuan@amd.com/
> > > > v5: https://lore.kernel.org/lkml/cover.1710473712.git.perry.yuan@amd.com/
> > > > v6: https://lore.kernel.org/lkml/cover.1710754236.git.perry.yuan@amd.com/
> > > > v7: https://lore.kernel.org/lkml/cover.1713861200.git.perry.yuan@amd.com/
> > > > v8: https://lore.kernel.org/lkml/cover.1714112854.git.perry.yuan@amd.com/
> > > > v9: https://lore.kernel.org/lkml/cover.1714989803.git.perry.yuan@amd.com/
> > > > 
> > > > Perry Yuan (7):
> > > >   cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
> > > >   cpufreq: amd-pstate: initialize new core precision boost state
> > > >   cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control
> > > >   cpufreq: amd-pstate: fix the MSR highest perf will be reset issue
> > > >     while cpb boost off
> > > >   Documentation: cpufreq: amd-pstate: introduce the new cpu boost
> > > >     control method
> > > >   cpufreq: amd-pstate: introduce per CPU frequency boost control
> > > >   Documentation: cpufreq: amd-pstate: update doc for Per CPU boost
> > > >     control method
> > > > 
> > > >  Documentation/admin-guide/pm/amd-pstate.rst |  30 ++++
> > > >  arch/x86/include/asm/msr-index.h            |   2 +
> > > >  drivers/cpufreq/acpi-cpufreq.c              |   2 -
> > > >  drivers/cpufreq/amd-pstate-ut.c             |   2 +-
> > > >  drivers/cpufreq/amd-pstate.c                | 189 ++++++++++++++++++--
> > > >  include/linux/amd-pstate.h                  |  14 ++
> > > >  6 files changed, 225 insertions(+), 14 deletions(-)
> > > 
> > > I've applied this series along with fixes and improvements [1], and I cannot get guided mode to work with my CPU any more.
> > > 
> > > The CPU is:
> > > 
> > > ```
> > > Vendor ID:                AuthenticAMD
> > >   Model name:             AMD Ryzen 9 5950X 16-Core Processor
> > >     CPU family:           25
> > >     Model:                33
> > >     Thread(s) per core:   2
> > >     Core(s) per socket:   16
> > >     Socket(s):            1
> > >     Stepping:             2
> > > ```
> > > 
> > > I've got `amd_pstate=guided` set in the kernel cmdline, but `amd-pstate-epp` gets loaded anyway.
> > 
> > OK, this part is solved like below:
> > 
> > ```
> > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
> > index aafa4466e5ced..5aee7d2b8cfd7 100644
> > --- a/drivers/cpufreq/amd-pstate.c
> > +++ b/drivers/cpufreq/amd-pstate.c
> > @@ -66,7 +66,7 @@
> >  static struct cpufreq_driver *current_pstate_driver;
> >  static struct cpufreq_driver amd_pstate_driver;
> >  static struct cpufreq_driver amd_pstate_epp_driver;
> > -static int cppc_state;
> > +static int cppc_state = CONFIG_X86_AMD_PSTATE_DEFAULT_MODE;
> >  static bool cppc_enabled;
> >  static bool amd_pstate_prefcore = true;
> >  static struct quirk_entry *quirks;
> > @@ -1958,10 +1958,6 @@ static int __init amd_pstate_init(void)
> >  	/* check if this machine need CPPC quirks */
> >  	dmi_check_system(amd_pstate_quirks_table);
> >  
> > -	/* get default driver mode for loading*/
> > -	cppc_state = CONFIG_X86_AMD_PSTATE_DEFAULT_MODE;
> > -	pr_debug("cppc working state set to mode:%d\n", cppc_state);
> > -
> >  	switch (cppc_state) {
> >  	case AMD_PSTATE_DISABLE:
> >  		pr_info("driver load is disabled, boot with specific mode to enable this\n");
> > ```
> > 
> > as we have discussed here [1].
> > 
> > [1] https://lore.kernel.org/lkml/CYYPR12MB865554562BE018D46FF0108C9CE52@CYYPR12MB8655.namprd12.prod.outlook.com/
> 
> Ah no, scratch it, it's not solved. With `amd_pstate=guided` the driver fails to register during the boottime with the same `sysfs` error:
> 
> ```
> kernel: sysfs: cannot create duplicate filename '/devices/system/cpu/cpufreq/policy0/boost'
> kernel: Hardware name: ASUS System Product Name/Pro WS X570-ACE, BIOS 4805 03/18/2024
> kernel: Call Trace:
> kernel:  <TASK>
> kernel:  dump_stack_lvl+0x47/0x60
> kernel:  sysfs_warn_dup+0x5a/0x70
> kernel:  sysfs_create_file_ns+0x196/0x1b0
> kernel:  cpufreq_online+0x244/0xde0
> kernel:  cpufreq_add_dev+0x7b/0x90
> kernel:  subsys_interface_register+0x19e/0x1d0
> kernel:  cpufreq_register_driver+0x177/0x2f0
> kernel:  amd_pstate_init+0x1b8/0x2c0
> kernel:  do_one_initcall+0x5b/0x320
> kernel:  kernel_init_freeable+0x1dc/0x380
> kernel:  kernel_init+0x1a/0x1c0
> kernel:  ret_from_fork+0x34/0x50
> kernel:  ret_from_fork_asm+0x1b/0x30
> kernel:  </TASK>
> ```
> 
> and things revert to `acpi_cpufreq` instead.
> 
> What's wrong?

This happens with both `amd_pstate=guided` and `amd_pstate=passive`, while with `amd_pstate=active` it works. Also note I've got:

```
CONFIG_X86_AMD_PSTATE=y
CONFIG_X86_AMD_PSTATE_DEFAULT_MODE=3
```

aka "active" by default.

It seems I miss to understand something in the init sequence.

> 
> > 
> > But this part:
> > 
> > > When I try to set `guided` manually via `echo guided | sudo tee /sys/devices/system/cpu/amd_pstate/status`, the status gets dropped to `disable`, `tee` errors out with `-ENODEV`, and there's this in the kernel log:
> > > 
> > > ```
> > > $ jctl -kb | grep sysfs: | cut -d ' ' -f 5-
> > > kernel: sysfs: cannot create duplicate filename '/devices/system/cpu/cpufreq/policy0/boost'
> > > …
> > > kernel: sysfs: cannot create duplicate filename '/devices/system/cpu/cpufreq/policy31/boost'
> > > ```
> > 
> > is not. I've successfully booted with `amd_pstate=guided`, then did this:
> > 
> > ```
> > $ echo active | sudo tee /sys/devices/system/cpu/amd_pstate/status
> > ```
> > 
> > just for the sake of test, and got this:
> > 
> > ```
> > tee: /sys/devices/system/cpu/amd_pstate/status: File exists
> > ```
> > 
> > and this:
> > 
> > ```
> > kernel: WARNING: CPU: 9 PID: 8528 at drivers/cpufreq/cpufreq.c:2961 cpufreq_unregister_driver+0x1a/0xc0
> > ```
> > 
> > which corresponds to:
> > 
> > ```
> > 2957 void cpufreq_unregister_driver(struct cpufreq_driver *driver)
> > 2958 {
> > 2959         unsigned long flags;
> > 2960
> > 2961         if (WARN_ON(!cpufreq_driver || (driver != cpufreq_driver)))
> > 2962                 return;
> > ```
> > 
> > I haven't conducted this test before, so I don't know whether this behaviour is new, or it was present in older iterations. I also don't know if this belongs to the "boost" series or the "fixes", and just letting you know so that you can test the runtime switching yourself and see if it is reproducible in your environment as well or not.
> > 
> > > The following is applied on top of v6.9-rc7:
> > > 
> > > ```
> > > cpufreq: amd-pstate: automatically load pstate driver by default
> > > cpufreq: amd-pstate: fix the highest frequency issue which limit performance
> > > cpufreq: amd-pstate: implement heterogeneous core topology for highest performance initialization
> > > x86/cpufeatures: Add feature bits for AMD heterogeneous processor
> > > cpufreq: amd-pstate: switch boot_cpu_has() to cpu_feature_enabled()
> > > Documentation: PM: amd-pstate: add guide mode to the Operation mode
> > > Documentation: PM: amd-pstate: add debugging section for driver loading failure
> > > Documentation: PM: amd-pstate: introducing recommended reboot requirement during driver switch
> > > cpufreq: amd-pstate: add debug message while CPPC is supported and disabled by SBIOS
> > > cpufreq: amd-pstate: show CPPC debug message if CPPC is not supported
> > > cpufreq: amd-pstate: optimiza the initial frequency values verification
> > > Documentation: cpufreq: amd-pstate: update doc for Per CPU boost control method
> > > cpufreq: amd-pstate: introduce per CPU frequency boost control
> > > Documentation: cpufreq: amd-pstate: introduce the new cpu boost control method
> > > cpufreq: amd-pstate: fix the MSR highest perf will be reset issue while cpb boost off
> > > cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control
> > > cpufreq: amd-pstate: initialize new core precision boost state
> > > cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
> > > cpufreq: amd-pstate: remove unused variable lowest_nonlinear_freq
> > > cpufreq: amd-pstate: fix code format problems
> > > cpufreq: amd-pstate: Add quirk for the pstate CPPC capabilities missing
> > > cpufreq: amd-pstate: get transition delay and latency value from ACPI tables
> > > cpufreq: amd-pstate: Bail out if min/max/nominal_freq is 0
> > > cpufreq: amd-pstate: Remove amd_get_{min,max,nominal,lowest_nonlinear}_freq()
> > > cpufreq: amd-pstate: Unify computation of {max,min,nominal,lowest_nonlinear}_freq
> > > cpufreq: amd-pstate: Document the units for freq variables in amd_cpudata
> > > cpufreq: amd-pstate: Document *_limit_* fields in struct amd_cpudata
> > > ```
> > > 
> > > Previously, with your submissions, it was possible to use `guided` mode with my Zen 3.
> > > 
> > > [1] https://lore.kernel.org/lkml/cover.1715065568.git.perry.yuan@amd.com/
> > > 
> > > 
> > 
> > 
> > 
> 
> 
> 


-- 
Oleksandr Natalenko (post-factum)

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost
  2024-05-08 21:31       ` Oleksandr Natalenko
@ 2024-05-08 22:13         ` Mario Limonciello
  2024-05-09 12:01           ` Oleksandr Natalenko
  0 siblings, 1 reply; 23+ messages in thread
From: Mario Limonciello @ 2024-05-08 22:13 UTC (permalink / raw)
  To: Oleksandr Natalenko, rafael.j.wysocki, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov, Perry Yuan
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

On 5/8/2024 16:31, Oleksandr Natalenko wrote:
> On středa 8. května 2024 21:21:39, SELČ Oleksandr Natalenko wrote:
>> On středa 8. května 2024 21:13:40, SELČ Oleksandr Natalenko wrote:
>>> On středa 8. května 2024 17:11:42, SELČ Oleksandr Natalenko wrote:
>>>> Hello.
>>>>
>>>> On středa 8. května 2024 9:21:05, SELČ Perry Yuan wrote:
>>>>> Hi all,
>>>>> The patchset series add core performance boost feature for AMD pstate
>>>>> driver including passisve ,guide and active mode support.
>>>>>
>>>>> User can change core frequency boost control with a new sysfs entry:
>>>>>
>>>>> "/sys/devices/system/cpu/amd_pstate/cpb_boost"
>>>>>
>>>>>
>>>>> 1) globally disable core boost:
>>>>> $ sudo bash -c "echo 0 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
>>>>> $ lscpu -ae
>>>>> CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ      MHZ
>>>>>    0    0      0    0 0:0:0:0          yes 4201.0000 400.0000 2983.578
>>>>>    1    0      0    1 1:1:1:0          yes 4201.0000 400.0000 2983.578
>>>>>    2    0      0    2 2:2:2:0          yes 4201.0000 400.0000 2583.855
>>>>>    3    0      0    3 3:3:3:0          yes 4201.0000 400.0000 2983.578
>>>>>    4    0      0    4 4:4:4:0          yes 4201.0000 400.0000 2983.578
>>>>>
>>>>> 2) globally enable core boost:
>>>>> $ sudo bash -c "echo 1 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
>>>>> $ lscpu -ae
>>>>>     0    0      0    0 0:0:0:0          yes 5759.0000 400.0000 2983.578
>>>>>    1    0      0    1 1:1:1:0          yes 5759.0000 400.0000 2983.578
>>>>>    2    0      0    2 2:2:2:0          yes 5759.0000 400.0000 2983.578
>>>>>    3    0      0    3 3:3:3:0          yes 5759.0000 400.0000 2983.578
>>>>>    4    0      0    4 4:4:4:0          yes 5759.0000 400.0000 2983.578
>>>>>
>>>>>
>>>>> ============================================================================
>>>>> The V9 patches add per CPU boost control, user can enable/disable CPUs boost
>>>>> as the below command tested on a laptop system.
>>>>> # before
>>>>>    CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
>>>>>    0    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1666.7740
>>>>>    1    0      0    0 0:0:0:0          yes 4208.0000 400.0000  400.0000
>>>>>    2    0      0    1 1:1:1:0          yes 4208.0000 400.0000 3386.1260
>>>>>    3    0      0    1 1:1:1:0          yes 4208.0000 400.0000  400.0000
>>>>> $ sudo rdmsr 0xc00102b3 -p 0
>>>>> 10a6
>>>>>
>>>>> $ sudo bash -c "echo 1 > /sys/devices/system/cpu/cpu0/cpufreq/boost"
>>>>> # after
>>>>>    CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
>>>>>      0    0      0    0 0:0:0:0          yes 3501.0000 400.0000  400.0000
>>>>>      1    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1391.0690
>>>>>      2    0      0    1 1:1:1:0          yes 4208.0000 400.0000 3654.4541
>>>>>      3    0      0    1 1:1:1:0          yes 4208.0000 400.0000  400.0000
>>>>> $ sudo rdmsr 0xc00102b3 -p 0
>>>>> 108a
>>>>>
>>>>>
>>>>> The patches have been tested with the AMD 7950X processor and many users
>>>>> would like to get core boost control enabled for power saving.
>>>>>
>>>>> Perry.
>>>>>
>>>>>
>>>>> Changes from v9:
>>>>>   * change per CPU boost sysfs file name to `boost` (Mario)
>>>>>   * rebased to latest linux-pm/bleeding-edge
>>>>>
>>>>> Changes from v8:
>>>>>   * pick RB flag for patch 4 (Mario)
>>>>>   * change boot_cpu_has to cpu_feature_enabled for patch 2 (Boris)
>>>>>   * merge patch 6 into patch 3 (Mario)
>>>>>   * add two patch for per CPU boost control patch 6 & 7(Mario)
>>>>>   * rebased to latest linux-pm/bleeding-edge
>>>>>
>>>>> Changes from v7:
>>>>>   * fix the mutext locking issue in the sysfs file update(Ray, Mario)
>>>>>   * pick ack flag from Ray
>>>>>   * use X86_FEATURE_CPB to verify the CPB function in Patch #2(Ray)
>>>>>   * rerun the testing to check function works well
>>>>>   * rebased to linux-pm/bleeding-edge latest
>>>>>
>>>>> Changes from v6:
>>>>>   * reword patch 2 commit log (Gautham)
>>>>>   * update cover letter description(Gautham)
>>>>>   * rebase to kernel v6.9-rc5
>>>>>
>>>>> Changes from v4:
>>>>>   * drop the legacy boost remove patch, let us keep the legacy interface
>>>>>     in case some applications break.
>>>>>   * rebase to linux-pm/bleeding-edge branch
>>>>>   * rework the patchset base on [PATCH v8 0/8] AMD Pstate Fixes And
>>>>>     Enhancements which has some intial work done there.
>>>>>
>>>>> Changes from v4:
>>>>>   * move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
>>>>>   * pick RB flag from Gautham R. Shenoy
>>>>>   * add Cc Oleksandr Natalenko <oleksandr@natalenko.name>
>>>>>   * rebase to latest linux-pm/bleeding-edge branch
>>>>>   * rebase the patch set on top of [PATCH v7 0/6] AMD Pstate Fixes And Enhancements
>>>>>   * update  [PATCH v7 2/6] to use MSR_K7_HWCR_CPB_DIS_BIT
>>>>>
>>>>> Changes from v3:
>>>>>   * rebased to linux-pm/bleeding-edge v6.8
>>>>>   * rename global to amd_pstate_global_params(Oleksandr Natalenko)
>>>>>   * remove comments for boot_supported in amd_pstate.h
>>>>>   * fix the compiler warning for amd-pstate-ut.ko
>>>>>   * use for_each_online_cpu in cpb_boost_store which fix the null pointer
>>>>>     error during testing
>>>>>   * fix the max frequency value to be KHz when cpb boost disabled(Gautham R. Shenoy)
>>>>>
>>>>> Changes from v2:
>>>>>   * move global struct to amd-pstate.h
>>>>>   * fix the amd-pstate-ut with new cpb control interface
>>>>>
>>>>> Changes from v1:
>>>>>   * drop suspend/resume fix patch 6/7 because of the fix should be in
>>>>>     another fix series instead of CPB feature
>>>>>   * move the set_boost remove patch to the last(Mario)
>>>>>   * Fix commit info with "Closes:" (Mario)
>>>>>   * simplified global.cpb_supported initialization(Mario)
>>>>>   * Add guide mode support for CPB control
>>>>>   * Fixed some Doc typos and add guide mode info to Doc as well.
>>>>>
>>>>> v1: https://lore.kernel.org/all/cover.1706255676.git.perry.yuan@amd.com/
>>>>> v2: https://lore.kernel.org/lkml/cover.1707047943.git.perry.yuan@amd.com/
>>>>> v3: https://lore.kernel.org/lkml/cover.1707297581.git.perry.yuan@amd.com/
>>>>> v4: https://lore.kernel.org/lkml/cover.1710322310.git.perry.yuan@amd.com/
>>>>> v5: https://lore.kernel.org/lkml/cover.1710473712.git.perry.yuan@amd.com/
>>>>> v6: https://lore.kernel.org/lkml/cover.1710754236.git.perry.yuan@amd.com/
>>>>> v7: https://lore.kernel.org/lkml/cover.1713861200.git.perry.yuan@amd.com/
>>>>> v8: https://lore.kernel.org/lkml/cover.1714112854.git.perry.yuan@amd.com/
>>>>> v9: https://lore.kernel.org/lkml/cover.1714989803.git.perry.yuan@amd.com/
>>>>>
>>>>> Perry Yuan (7):
>>>>>    cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
>>>>>    cpufreq: amd-pstate: initialize new core precision boost state
>>>>>    cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control
>>>>>    cpufreq: amd-pstate: fix the MSR highest perf will be reset issue
>>>>>      while cpb boost off
>>>>>    Documentation: cpufreq: amd-pstate: introduce the new cpu boost
>>>>>      control method
>>>>>    cpufreq: amd-pstate: introduce per CPU frequency boost control
>>>>>    Documentation: cpufreq: amd-pstate: update doc for Per CPU boost
>>>>>      control method
>>>>>
>>>>>   Documentation/admin-guide/pm/amd-pstate.rst |  30 ++++
>>>>>   arch/x86/include/asm/msr-index.h            |   2 +
>>>>>   drivers/cpufreq/acpi-cpufreq.c              |   2 -
>>>>>   drivers/cpufreq/amd-pstate-ut.c             |   2 +-
>>>>>   drivers/cpufreq/amd-pstate.c                | 189 ++++++++++++++++++--
>>>>>   include/linux/amd-pstate.h                  |  14 ++
>>>>>   6 files changed, 225 insertions(+), 14 deletions(-)
>>>>
>>>> I've applied this series along with fixes and improvements [1], and I cannot get guided mode to work with my CPU any more.
>>>>
>>>> The CPU is:
>>>>
>>>> ```
>>>> Vendor ID:                AuthenticAMD
>>>>    Model name:             AMD Ryzen 9 5950X 16-Core Processor
>>>>      CPU family:           25
>>>>      Model:                33
>>>>      Thread(s) per core:   2
>>>>      Core(s) per socket:   16
>>>>      Socket(s):            1
>>>>      Stepping:             2
>>>> ```
>>>>
>>>> I've got `amd_pstate=guided` set in the kernel cmdline, but `amd-pstate-epp` gets loaded anyway.
>>>
>>> OK, this part is solved like below:
>>>
>>> ```
>>> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
>>> index aafa4466e5ced..5aee7d2b8cfd7 100644
>>> --- a/drivers/cpufreq/amd-pstate.c
>>> +++ b/drivers/cpufreq/amd-pstate.c
>>> @@ -66,7 +66,7 @@
>>>   static struct cpufreq_driver *current_pstate_driver;
>>>   static struct cpufreq_driver amd_pstate_driver;
>>>   static struct cpufreq_driver amd_pstate_epp_driver;
>>> -static int cppc_state;
>>> +static int cppc_state = CONFIG_X86_AMD_PSTATE_DEFAULT_MODE;
>>>   static bool cppc_enabled;
>>>   static bool amd_pstate_prefcore = true;
>>>   static struct quirk_entry *quirks;
>>> @@ -1958,10 +1958,6 @@ static int __init amd_pstate_init(void)
>>>   	/* check if this machine need CPPC quirks */
>>>   	dmi_check_system(amd_pstate_quirks_table);
>>>   
>>> -	/* get default driver mode for loading*/
>>> -	cppc_state = CONFIG_X86_AMD_PSTATE_DEFAULT_MODE;
>>> -	pr_debug("cppc working state set to mode:%d\n", cppc_state);
>>> -
>>>   	switch (cppc_state) {
>>>   	case AMD_PSTATE_DISABLE:
>>>   		pr_info("driver load is disabled, boot with specific mode to enable this\n");
>>> ```
>>>
>>> as we have discussed here [1].
>>>
>>> [1] https://lore.kernel.org/lkml/CYYPR12MB865554562BE018D46FF0108C9CE52@CYYPR12MB8655.namprd12.prod.outlook.com/
>>
>> Ah no, scratch it, it's not solved. With `amd_pstate=guided` the driver fails to register during the boottime with the same `sysfs` error:
>>
>> ```
>> kernel: sysfs: cannot create duplicate filename '/devices/system/cpu/cpufreq/policy0/boost'
>> kernel: Hardware name: ASUS System Product Name/Pro WS X570-ACE, BIOS 4805 03/18/2024
>> kernel: Call Trace:
>> kernel:  <TASK>
>> kernel:  dump_stack_lvl+0x47/0x60
>> kernel:  sysfs_warn_dup+0x5a/0x70
>> kernel:  sysfs_create_file_ns+0x196/0x1b0
>> kernel:  cpufreq_online+0x244/0xde0
>> kernel:  cpufreq_add_dev+0x7b/0x90
>> kernel:  subsys_interface_register+0x19e/0x1d0
>> kernel:  cpufreq_register_driver+0x177/0x2f0
>> kernel:  amd_pstate_init+0x1b8/0x2c0
>> kernel:  do_one_initcall+0x5b/0x320
>> kernel:  kernel_init_freeable+0x1dc/0x380
>> kernel:  kernel_init+0x1a/0x1c0
>> kernel:  ret_from_fork+0x34/0x50
>> kernel:  ret_from_fork_asm+0x1b/0x30
>> kernel:  </TASK>
>> ```
>>
>> and things revert to `acpi_cpufreq` instead.
>>
>> What's wrong?
> 
> This happens with both `amd_pstate=guided` and `amd_pstate=passive`, while with `amd_pstate=active` it works. Also note I've got:
> 
> ```
> CONFIG_X86_AMD_PSTATE=y
> CONFIG_X86_AMD_PSTATE_DEFAULT_MODE=3
> ```
> 
> aka "active" by default.
> 
> It seems I miss to understand something in the init sequence.
> 

I think what's going on is that by reusing the same name as acpi_cppc 
does for sysfs when amd pstate is changing modes the sysfs file from 
amd-pstate isn't cleared and so acpi_cppc tries to make it.

Don't get me wrong - I do think that we should keep the same sysfs name 
for both, it's easier for users.

But if we're going to keep mode switching from amd-pstate at runtime we 
really need to make sure that amd-pstate-ut explicitly tests all these 
combinations to catch these types of problems.

>>
>>>
>>> But this part:
>>>
>>>> When I try to set `guided` manually via `echo guided | sudo tee /sys/devices/system/cpu/amd_pstate/status`, the status gets dropped to `disable`, `tee` errors out with `-ENODEV`, and there's this in the kernel log:
>>>>
>>>> ```
>>>> $ jctl -kb | grep sysfs: | cut -d ' ' -f 5-
>>>> kernel: sysfs: cannot create duplicate filename '/devices/system/cpu/cpufreq/policy0/boost'
>>>> …
>>>> kernel: sysfs: cannot create duplicate filename '/devices/system/cpu/cpufreq/policy31/boost'
>>>> ```
>>>
>>> is not. I've successfully booted with `amd_pstate=guided`, then did this:
>>>
>>> ```
>>> $ echo active | sudo tee /sys/devices/system/cpu/amd_pstate/status
>>> ```
>>>
>>> just for the sake of test, and got this:
>>>
>>> ```
>>> tee: /sys/devices/system/cpu/amd_pstate/status: File exists
>>> ```
>>>
>>> and this:
>>>
>>> ```
>>> kernel: WARNING: CPU: 9 PID: 8528 at drivers/cpufreq/cpufreq.c:2961 cpufreq_unregister_driver+0x1a/0xc0
>>> ```
>>>
>>> which corresponds to:
>>>
>>> ```
>>> 2957 void cpufreq_unregister_driver(struct cpufreq_driver *driver)
>>> 2958 {
>>> 2959         unsigned long flags;
>>> 2960
>>> 2961         if (WARN_ON(!cpufreq_driver || (driver != cpufreq_driver)))
>>> 2962                 return;
>>> ```
>>>
>>> I haven't conducted this test before, so I don't know whether this behaviour is new, or it was present in older iterations. I also don't know if this belongs to the "boost" series or the "fixes", and just letting you know so that you can test the runtime switching yourself and see if it is reproducible in your environment as well or not.
>>>
>>>> The following is applied on top of v6.9-rc7:
>>>>
>>>> ```
>>>> cpufreq: amd-pstate: automatically load pstate driver by default
>>>> cpufreq: amd-pstate: fix the highest frequency issue which limit performance
>>>> cpufreq: amd-pstate: implement heterogeneous core topology for highest performance initialization
>>>> x86/cpufeatures: Add feature bits for AMD heterogeneous processor
>>>> cpufreq: amd-pstate: switch boot_cpu_has() to cpu_feature_enabled()
>>>> Documentation: PM: amd-pstate: add guide mode to the Operation mode
>>>> Documentation: PM: amd-pstate: add debugging section for driver loading failure
>>>> Documentation: PM: amd-pstate: introducing recommended reboot requirement during driver switch
>>>> cpufreq: amd-pstate: add debug message while CPPC is supported and disabled by SBIOS
>>>> cpufreq: amd-pstate: show CPPC debug message if CPPC is not supported
>>>> cpufreq: amd-pstate: optimiza the initial frequency values verification
>>>> Documentation: cpufreq: amd-pstate: update doc for Per CPU boost control method
>>>> cpufreq: amd-pstate: introduce per CPU frequency boost control
>>>> Documentation: cpufreq: amd-pstate: introduce the new cpu boost control method
>>>> cpufreq: amd-pstate: fix the MSR highest perf will be reset issue while cpb boost off
>>>> cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control
>>>> cpufreq: amd-pstate: initialize new core precision boost state
>>>> cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
>>>> cpufreq: amd-pstate: remove unused variable lowest_nonlinear_freq
>>>> cpufreq: amd-pstate: fix code format problems
>>>> cpufreq: amd-pstate: Add quirk for the pstate CPPC capabilities missing
>>>> cpufreq: amd-pstate: get transition delay and latency value from ACPI tables
>>>> cpufreq: amd-pstate: Bail out if min/max/nominal_freq is 0
>>>> cpufreq: amd-pstate: Remove amd_get_{min,max,nominal,lowest_nonlinear}_freq()
>>>> cpufreq: amd-pstate: Unify computation of {max,min,nominal,lowest_nonlinear}_freq
>>>> cpufreq: amd-pstate: Document the units for freq variables in amd_cpudata
>>>> cpufreq: amd-pstate: Document *_limit_* fields in struct amd_cpudata
>>>> ```
>>>>
>>>> Previously, with your submissions, it was possible to use `guided` mode with my Zen 3.
>>>>
>>>> [1] https://lore.kernel.org/lkml/cover.1715065568.git.perry.yuan@amd.com/
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>>
> 
> 


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost
  2024-05-08 22:13         ` Mario Limonciello
@ 2024-05-09 12:01           ` Oleksandr Natalenko
  2024-05-09 16:03             ` Yuan, Perry
  0 siblings, 1 reply; 23+ messages in thread
From: Oleksandr Natalenko @ 2024-05-09 12:01 UTC (permalink / raw)
  To: rafael.j.wysocki, viresh.kumar, Ray.Huang, gautham.shenoy,
	Borislav.Petkov, Perry Yuan, Mario Limonciello
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 17283 bytes --]

On čtvrtek 9. května 2024 0:13:49, SELČ Mario Limonciello wrote:
> On 5/8/2024 16:31, Oleksandr Natalenko wrote:
> > On středa 8. května 2024 21:21:39, SELČ Oleksandr Natalenko wrote:
> >> On středa 8. května 2024 21:13:40, SELČ Oleksandr Natalenko wrote:
> >>> On středa 8. května 2024 17:11:42, SELČ Oleksandr Natalenko wrote:
> >>>> Hello.
> >>>>
> >>>> On středa 8. května 2024 9:21:05, SELČ Perry Yuan wrote:
> >>>>> Hi all,
> >>>>> The patchset series add core performance boost feature for AMD pstate
> >>>>> driver including passisve ,guide and active mode support.
> >>>>>
> >>>>> User can change core frequency boost control with a new sysfs entry:
> >>>>>
> >>>>> "/sys/devices/system/cpu/amd_pstate/cpb_boost"
> >>>>>
> >>>>>
> >>>>> 1) globally disable core boost:
> >>>>> $ sudo bash -c "echo 0 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
> >>>>> $ lscpu -ae
> >>>>> CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ      MHZ
> >>>>>    0    0      0    0 0:0:0:0          yes 4201.0000 400.0000 2983.578
> >>>>>    1    0      0    1 1:1:1:0          yes 4201.0000 400.0000 2983.578
> >>>>>    2    0      0    2 2:2:2:0          yes 4201.0000 400.0000 2583.855
> >>>>>    3    0      0    3 3:3:3:0          yes 4201.0000 400.0000 2983.578
> >>>>>    4    0      0    4 4:4:4:0          yes 4201.0000 400.0000 2983.578
> >>>>>
> >>>>> 2) globally enable core boost:
> >>>>> $ sudo bash -c "echo 1 > /sys/devices/system/cpu/amd_pstate/cpb_boost"
> >>>>> $ lscpu -ae
> >>>>>     0    0      0    0 0:0:0:0          yes 5759.0000 400.0000 2983.578
> >>>>>    1    0      0    1 1:1:1:0          yes 5759.0000 400.0000 2983.578
> >>>>>    2    0      0    2 2:2:2:0          yes 5759.0000 400.0000 2983.578
> >>>>>    3    0      0    3 3:3:3:0          yes 5759.0000 400.0000 2983.578
> >>>>>    4    0      0    4 4:4:4:0          yes 5759.0000 400.0000 2983.578
> >>>>>
> >>>>>
> >>>>> ============================================================================
> >>>>> The V9 patches add per CPU boost control, user can enable/disable CPUs boost
> >>>>> as the below command tested on a laptop system.
> >>>>> # before
> >>>>>    CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
> >>>>>    0    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1666.7740
> >>>>>    1    0      0    0 0:0:0:0          yes 4208.0000 400.0000  400.0000
> >>>>>    2    0      0    1 1:1:1:0          yes 4208.0000 400.0000 3386.1260
> >>>>>    3    0      0    1 1:1:1:0          yes 4208.0000 400.0000  400.0000
> >>>>> $ sudo rdmsr 0xc00102b3 -p 0
> >>>>> 10a6
> >>>>>
> >>>>> $ sudo bash -c "echo 1 > /sys/devices/system/cpu/cpu0/cpufreq/boost"
> >>>>> # after
> >>>>>    CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
> >>>>>      0    0      0    0 0:0:0:0          yes 3501.0000 400.0000  400.0000
> >>>>>      1    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1391.0690
> >>>>>      2    0      0    1 1:1:1:0          yes 4208.0000 400.0000 3654.4541
> >>>>>      3    0      0    1 1:1:1:0          yes 4208.0000 400.0000  400.0000
> >>>>> $ sudo rdmsr 0xc00102b3 -p 0
> >>>>> 108a
> >>>>>
> >>>>>
> >>>>> The patches have been tested with the AMD 7950X processor and many users
> >>>>> would like to get core boost control enabled for power saving.
> >>>>>
> >>>>> Perry.
> >>>>>
> >>>>>
> >>>>> Changes from v9:
> >>>>>   * change per CPU boost sysfs file name to `boost` (Mario)
> >>>>>   * rebased to latest linux-pm/bleeding-edge
> >>>>>
> >>>>> Changes from v8:
> >>>>>   * pick RB flag for patch 4 (Mario)
> >>>>>   * change boot_cpu_has to cpu_feature_enabled for patch 2 (Boris)
> >>>>>   * merge patch 6 into patch 3 (Mario)
> >>>>>   * add two patch for per CPU boost control patch 6 & 7(Mario)
> >>>>>   * rebased to latest linux-pm/bleeding-edge
> >>>>>
> >>>>> Changes from v7:
> >>>>>   * fix the mutext locking issue in the sysfs file update(Ray, Mario)
> >>>>>   * pick ack flag from Ray
> >>>>>   * use X86_FEATURE_CPB to verify the CPB function in Patch #2(Ray)
> >>>>>   * rerun the testing to check function works well
> >>>>>   * rebased to linux-pm/bleeding-edge latest
> >>>>>
> >>>>> Changes from v6:
> >>>>>   * reword patch 2 commit log (Gautham)
> >>>>>   * update cover letter description(Gautham)
> >>>>>   * rebase to kernel v6.9-rc5
> >>>>>
> >>>>> Changes from v4:
> >>>>>   * drop the legacy boost remove patch, let us keep the legacy interface
> >>>>>     in case some applications break.
> >>>>>   * rebase to linux-pm/bleeding-edge branch
> >>>>>   * rework the patchset base on [PATCH v8 0/8] AMD Pstate Fixes And
> >>>>>     Enhancements which has some intial work done there.
> >>>>>
> >>>>> Changes from v4:
> >>>>>   * move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
> >>>>>   * pick RB flag from Gautham R. Shenoy
> >>>>>   * add Cc Oleksandr Natalenko <oleksandr@natalenko.name>
> >>>>>   * rebase to latest linux-pm/bleeding-edge branch
> >>>>>   * rebase the patch set on top of [PATCH v7 0/6] AMD Pstate Fixes And Enhancements
> >>>>>   * update  [PATCH v7 2/6] to use MSR_K7_HWCR_CPB_DIS_BIT
> >>>>>
> >>>>> Changes from v3:
> >>>>>   * rebased to linux-pm/bleeding-edge v6.8
> >>>>>   * rename global to amd_pstate_global_params(Oleksandr Natalenko)
> >>>>>   * remove comments for boot_supported in amd_pstate.h
> >>>>>   * fix the compiler warning for amd-pstate-ut.ko
> >>>>>   * use for_each_online_cpu in cpb_boost_store which fix the null pointer
> >>>>>     error during testing
> >>>>>   * fix the max frequency value to be KHz when cpb boost disabled(Gautham R. Shenoy)
> >>>>>
> >>>>> Changes from v2:
> >>>>>   * move global struct to amd-pstate.h
> >>>>>   * fix the amd-pstate-ut with new cpb control interface
> >>>>>
> >>>>> Changes from v1:
> >>>>>   * drop suspend/resume fix patch 6/7 because of the fix should be in
> >>>>>     another fix series instead of CPB feature
> >>>>>   * move the set_boost remove patch to the last(Mario)
> >>>>>   * Fix commit info with "Closes:" (Mario)
> >>>>>   * simplified global.cpb_supported initialization(Mario)
> >>>>>   * Add guide mode support for CPB control
> >>>>>   * Fixed some Doc typos and add guide mode info to Doc as well.
> >>>>>
> >>>>> v1: https://lore.kernel.org/all/cover.1706255676.git.perry.yuan@amd.com/
> >>>>> v2: https://lore.kernel.org/lkml/cover.1707047943.git.perry.yuan@amd.com/
> >>>>> v3: https://lore.kernel.org/lkml/cover.1707297581.git.perry.yuan@amd.com/
> >>>>> v4: https://lore.kernel.org/lkml/cover.1710322310.git.perry.yuan@amd.com/
> >>>>> v5: https://lore.kernel.org/lkml/cover.1710473712.git.perry.yuan@amd.com/
> >>>>> v6: https://lore.kernel.org/lkml/cover.1710754236.git.perry.yuan@amd.com/
> >>>>> v7: https://lore.kernel.org/lkml/cover.1713861200.git.perry.yuan@amd.com/
> >>>>> v8: https://lore.kernel.org/lkml/cover.1714112854.git.perry.yuan@amd.com/
> >>>>> v9: https://lore.kernel.org/lkml/cover.1714989803.git.perry.yuan@amd.com/
> >>>>>
> >>>>> Perry Yuan (7):
> >>>>>    cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
> >>>>>    cpufreq: amd-pstate: initialize new core precision boost state
> >>>>>    cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control
> >>>>>    cpufreq: amd-pstate: fix the MSR highest perf will be reset issue
> >>>>>      while cpb boost off
> >>>>>    Documentation: cpufreq: amd-pstate: introduce the new cpu boost
> >>>>>      control method
> >>>>>    cpufreq: amd-pstate: introduce per CPU frequency boost control
> >>>>>    Documentation: cpufreq: amd-pstate: update doc for Per CPU boost
> >>>>>      control method
> >>>>>
> >>>>>   Documentation/admin-guide/pm/amd-pstate.rst |  30 ++++
> >>>>>   arch/x86/include/asm/msr-index.h            |   2 +
> >>>>>   drivers/cpufreq/acpi-cpufreq.c              |   2 -
> >>>>>   drivers/cpufreq/amd-pstate-ut.c             |   2 +-
> >>>>>   drivers/cpufreq/amd-pstate.c                | 189 ++++++++++++++++++--
> >>>>>   include/linux/amd-pstate.h                  |  14 ++
> >>>>>   6 files changed, 225 insertions(+), 14 deletions(-)
> >>>>
> >>>> I've applied this series along with fixes and improvements [1], and I cannot get guided mode to work with my CPU any more.
> >>>>
> >>>> The CPU is:
> >>>>
> >>>> ```
> >>>> Vendor ID:                AuthenticAMD
> >>>>    Model name:             AMD Ryzen 9 5950X 16-Core Processor
> >>>>      CPU family:           25
> >>>>      Model:                33
> >>>>      Thread(s) per core:   2
> >>>>      Core(s) per socket:   16
> >>>>      Socket(s):            1
> >>>>      Stepping:             2
> >>>> ```
> >>>>
> >>>> I've got `amd_pstate=guided` set in the kernel cmdline, but `amd-pstate-epp` gets loaded anyway.
> >>>
> >>> OK, this part is solved like below:
> >>>
> >>> ```
> >>> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
> >>> index aafa4466e5ced..5aee7d2b8cfd7 100644
> >>> --- a/drivers/cpufreq/amd-pstate.c
> >>> +++ b/drivers/cpufreq/amd-pstate.c
> >>> @@ -66,7 +66,7 @@
> >>>   static struct cpufreq_driver *current_pstate_driver;
> >>>   static struct cpufreq_driver amd_pstate_driver;
> >>>   static struct cpufreq_driver amd_pstate_epp_driver;
> >>> -static int cppc_state;
> >>> +static int cppc_state = CONFIG_X86_AMD_PSTATE_DEFAULT_MODE;
> >>>   static bool cppc_enabled;
> >>>   static bool amd_pstate_prefcore = true;
> >>>   static struct quirk_entry *quirks;
> >>> @@ -1958,10 +1958,6 @@ static int __init amd_pstate_init(void)
> >>>   	/* check if this machine need CPPC quirks */
> >>>   	dmi_check_system(amd_pstate_quirks_table);
> >>>   
> >>> -	/* get default driver mode for loading*/
> >>> -	cppc_state = CONFIG_X86_AMD_PSTATE_DEFAULT_MODE;
> >>> -	pr_debug("cppc working state set to mode:%d\n", cppc_state);
> >>> -
> >>>   	switch (cppc_state) {
> >>>   	case AMD_PSTATE_DISABLE:
> >>>   		pr_info("driver load is disabled, boot with specific mode to enable this\n");
> >>> ```
> >>>
> >>> as we have discussed here [1].
> >>>
> >>> [1] https://lore.kernel.org/lkml/CYYPR12MB865554562BE018D46FF0108C9CE52@CYYPR12MB8655.namprd12.prod.outlook.com/
> >>
> >> Ah no, scratch it, it's not solved. With `amd_pstate=guided` the driver fails to register during the boottime with the same `sysfs` error:
> >>
> >> ```
> >> kernel: sysfs: cannot create duplicate filename '/devices/system/cpu/cpufreq/policy0/boost'
> >> kernel: Hardware name: ASUS System Product Name/Pro WS X570-ACE, BIOS 4805 03/18/2024
> >> kernel: Call Trace:
> >> kernel:  <TASK>
> >> kernel:  dump_stack_lvl+0x47/0x60
> >> kernel:  sysfs_warn_dup+0x5a/0x70
> >> kernel:  sysfs_create_file_ns+0x196/0x1b0
> >> kernel:  cpufreq_online+0x244/0xde0
> >> kernel:  cpufreq_add_dev+0x7b/0x90
> >> kernel:  subsys_interface_register+0x19e/0x1d0
> >> kernel:  cpufreq_register_driver+0x177/0x2f0
> >> kernel:  amd_pstate_init+0x1b8/0x2c0
> >> kernel:  do_one_initcall+0x5b/0x320
> >> kernel:  kernel_init_freeable+0x1dc/0x380
> >> kernel:  kernel_init+0x1a/0x1c0
> >> kernel:  ret_from_fork+0x34/0x50
> >> kernel:  ret_from_fork_asm+0x1b/0x30
> >> kernel:  </TASK>
> >> ```
> >>
> >> and things revert to `acpi_cpufreq` instead.
> >>
> >> What's wrong?
> > 
> > This happens with both `amd_pstate=guided` and `amd_pstate=passive`, while with `amd_pstate=active` it works. Also note I've got:
> > 
> > ```
> > CONFIG_X86_AMD_PSTATE=y
> > CONFIG_X86_AMD_PSTATE_DEFAULT_MODE=3
> > ```
> > 
> > aka "active" by default.
> > 
> > It seems I miss to understand something in the init sequence.
> > 
> 
> I think what's going on is that by reusing the same name as acpi_cppc 
> does for sysfs when amd pstate is changing modes the sysfs file from 
> amd-pstate isn't cleared and so acpi_cppc tries to make it.

Seems so. I've renamed `amd_pstate`'s `boost` file to `amd_pstate_boost`, and now I'm able to boot with `amd_pstate=guided`, and after boot under `/sys/devices/system/cpu/cpufreq/policyX` I see both `boost` (from `acpi_cppc`, apparently) and `amd_pstate_boost` at the same time.

Not sure the fact both files are present is as intended.

> 
> Don't get me wrong - I do think that we should keep the same sysfs name 
> for both, it's easier for users.
> 
> But if we're going to keep mode switching from amd-pstate at runtime we 
> really need to make sure that amd-pstate-ut explicitly tests all these 
> combinations to catch these types of problems.

Not sure it's runtime switching only that is affected. I guess having `CONFIG_X86_AMD_PSTATE_DEFAULT_MODE` set to `active` and then having `amd_pstate=guided` on the kernel cmdline is not considered to be a runtime switching (or is it?), yet it doesn't work either due to filename conflict.

> >>
> >>>
> >>> But this part:
> >>>
> >>>> When I try to set `guided` manually via `echo guided | sudo tee /sys/devices/system/cpu/amd_pstate/status`, the status gets dropped to `disable`, `tee` errors out with `-ENODEV`, and there's this in the kernel log:
> >>>>
> >>>> ```
> >>>> $ jctl -kb | grep sysfs: | cut -d ' ' -f 5-
> >>>> kernel: sysfs: cannot create duplicate filename '/devices/system/cpu/cpufreq/policy0/boost'
> >>>> …
> >>>> kernel: sysfs: cannot create duplicate filename '/devices/system/cpu/cpufreq/policy31/boost'
> >>>> ```
> >>>
> >>> is not. I've successfully booted with `amd_pstate=guided`, then did this:
> >>>
> >>> ```
> >>> $ echo active | sudo tee /sys/devices/system/cpu/amd_pstate/status
> >>> ```
> >>>
> >>> just for the sake of test, and got this:
> >>>
> >>> ```
> >>> tee: /sys/devices/system/cpu/amd_pstate/status: File exists
> >>> ```
> >>>
> >>> and this:
> >>>
> >>> ```
> >>> kernel: WARNING: CPU: 9 PID: 8528 at drivers/cpufreq/cpufreq.c:2961 cpufreq_unregister_driver+0x1a/0xc0
> >>> ```
> >>>
> >>> which corresponds to:
> >>>
> >>> ```
> >>> 2957 void cpufreq_unregister_driver(struct cpufreq_driver *driver)
> >>> 2958 {
> >>> 2959         unsigned long flags;
> >>> 2960
> >>> 2961         if (WARN_ON(!cpufreq_driver || (driver != cpufreq_driver)))
> >>> 2962                 return;
> >>> ```
> >>>
> >>> I haven't conducted this test before, so I don't know whether this behaviour is new, or it was present in older iterations. I also don't know if this belongs to the "boost" series or the "fixes", and just letting you know so that you can test the runtime switching yourself and see if it is reproducible in your environment as well or not.
> >>>
> >>>> The following is applied on top of v6.9-rc7:
> >>>>
> >>>> ```
> >>>> cpufreq: amd-pstate: automatically load pstate driver by default
> >>>> cpufreq: amd-pstate: fix the highest frequency issue which limit performance
> >>>> cpufreq: amd-pstate: implement heterogeneous core topology for highest performance initialization
> >>>> x86/cpufeatures: Add feature bits for AMD heterogeneous processor
> >>>> cpufreq: amd-pstate: switch boot_cpu_has() to cpu_feature_enabled()
> >>>> Documentation: PM: amd-pstate: add guide mode to the Operation mode
> >>>> Documentation: PM: amd-pstate: add debugging section for driver loading failure
> >>>> Documentation: PM: amd-pstate: introducing recommended reboot requirement during driver switch
> >>>> cpufreq: amd-pstate: add debug message while CPPC is supported and disabled by SBIOS
> >>>> cpufreq: amd-pstate: show CPPC debug message if CPPC is not supported
> >>>> cpufreq: amd-pstate: optimiza the initial frequency values verification
> >>>> Documentation: cpufreq: amd-pstate: update doc for Per CPU boost control method
> >>>> cpufreq: amd-pstate: introduce per CPU frequency boost control
> >>>> Documentation: cpufreq: amd-pstate: introduce the new cpu boost control method
> >>>> cpufreq: amd-pstate: fix the MSR highest perf will be reset issue while cpb boost off
> >>>> cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control
> >>>> cpufreq: amd-pstate: initialize new core precision boost state
> >>>> cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
> >>>> cpufreq: amd-pstate: remove unused variable lowest_nonlinear_freq
> >>>> cpufreq: amd-pstate: fix code format problems
> >>>> cpufreq: amd-pstate: Add quirk for the pstate CPPC capabilities missing
> >>>> cpufreq: amd-pstate: get transition delay and latency value from ACPI tables
> >>>> cpufreq: amd-pstate: Bail out if min/max/nominal_freq is 0
> >>>> cpufreq: amd-pstate: Remove amd_get_{min,max,nominal,lowest_nonlinear}_freq()
> >>>> cpufreq: amd-pstate: Unify computation of {max,min,nominal,lowest_nonlinear}_freq
> >>>> cpufreq: amd-pstate: Document the units for freq variables in amd_cpudata
> >>>> cpufreq: amd-pstate: Document *_limit_* fields in struct amd_cpudata
> >>>> ```
> >>>>
> >>>> Previously, with your submissions, it was possible to use `guided` mode with my Zen 3.
> >>>>
> >>>> [1] https://lore.kernel.org/lkml/cover.1715065568.git.perry.yuan@amd.com/
> >>>>
> >>>>
> >>>
> >>>
> >>>
> >>
> >>
> >>
> > 
> > 
> 
> 


-- 
Oleksandr Natalenko (post-factum)

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* RE: [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost
  2024-05-08  8:18 ` [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost Borislav Petkov
@ 2024-05-09 16:01   ` Yuan, Perry
  2024-05-09 16:12     ` Borislav Petkov
  0 siblings, 1 reply; 23+ messages in thread
From: Yuan, Perry @ 2024-05-09 16:01 UTC (permalink / raw)
  To: Borislav Petkov
  Cc: rafael.j.wysocki, Limonciello, Mario, viresh.kumar, Huang, Ray,
	Shenoy, Gautham Ranjal, Deucher, Alexander, Huang, Shimmer, Du,
	Xiaojian, Meng, Li (Jassmine),
	linux-pm, linux-kernel

[AMD Official Use Only - General]

 Hi Boris,

> -----Original Message-----
> From: Borislav Petkov <bp@alien8.de>
> Sent: Wednesday, May 8, 2024 4:19 PM
> To: Yuan, Perry <Perry.Yuan@amd.com>
> Cc: rafael.j.wysocki@intel.com; Limonciello, Mario
> <Mario.Limonciello@amd.com>; viresh.kumar@linaro.org; Huang, Ray
> <Ray.Huang@amd.com>; Shenoy, Gautham Ranjal
> <gautham.shenoy@amd.com>; Deucher, Alexander
> <Alexander.Deucher@amd.com>; Huang, Shimmer
> <Shimmer.Huang@amd.com>; Du, Xiaojian <Xiaojian.Du@amd.com>; Meng,
> Li (Jassmine) <Li.Meng@amd.com>; linux-pm@vger.kernel.org; linux-
> kernel@vger.kernel.org
> Subject: Re: [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost
>
> On Wed, May 08, 2024 at 03:21:05PM +0800, Perry Yuan wrote:
> > The patchset series add core performance boost feature for AMD pstate
> > driver including passisve ,guide and active mode support.
>
> Can you please slow down, wait to collect as much feedback as possible and
> only *then* spam again with your patchset?
>
> https://kernel.org/doc/html/latest/process/submitting-patches.html#don-t-
> get-discouraged-or-impatient
>
> "You should receive comments within a few weeks (typically 2-3); if that does
> not happen, make sure that you have sent your patches to the right place.
> Wait for a minimum of one week before resubmitting or pinging reviewers -
> possibly longer during busy times like merge windows."
>
> Maintainers are not a shooting gallery.
>
> While waiting, you can read this:
>
> https://kernel.org/doc/html/latest/process/development-process.html
>
> Thanks.
>
> --
> Regards/Gruss,
>     Boris.

I understand your point,  the patch set has taken very long-time review since version 1,
I would like to get this done as soon as possible with reviewers support,  then we can deliver the feature to users who have been waiting long enough.

Perry.

>
> https://people.kernel.org/tglx/notes-about-netiquette

^ permalink raw reply	[flat|nested] 23+ messages in thread

* RE: [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost
  2024-05-09 12:01           ` Oleksandr Natalenko
@ 2024-05-09 16:03             ` Yuan, Perry
  0 siblings, 0 replies; 23+ messages in thread
From: Yuan, Perry @ 2024-05-09 16:03 UTC (permalink / raw)
  To: Oleksandr Natalenko, rafael.j.wysocki, viresh.kumar, Huang, Ray,
	Shenoy, Gautham Ranjal, Petkov, Borislav, Limonciello, Mario
  Cc: Deucher, Alexander, Huang, Shimmer, Du, Xiaojian, Meng,
	Li (Jassmine),
	linux-pm, linux-kernel

[AMD Official Use Only - General]

 Hi Oleksandr

> -----Original Message-----
> From: Oleksandr Natalenko <oleksandr@natalenko.name>
> Sent: Thursday, May 9, 2024 8:01 PM
> To: rafael.j.wysocki@intel.com; viresh.kumar@linaro.org; Huang, Ray
> <Ray.Huang@amd.com>; Shenoy, Gautham Ranjal
> <gautham.shenoy@amd.com>; Petkov, Borislav
> <Borislav.Petkov@amd.com>; Yuan, Perry <Perry.Yuan@amd.com>;
> Limonciello, Mario <Mario.Limonciello@amd.com>
> Cc: Deucher, Alexander <Alexander.Deucher@amd.com>; Huang, Shimmer
> <Shimmer.Huang@amd.com>; Du, Xiaojian <Xiaojian.Du@amd.com>; Meng,
> Li (Jassmine) <Li.Meng@amd.com>; linux-pm@vger.kernel.org; linux-
> kernel@vger.kernel.org
> Subject: Re: [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost
>
> On čtvrtek 9. května 2024 0:13:49, SELČ Mario Limonciello wrote:
> > On 5/8/2024 16:31, Oleksandr Natalenko wrote:
> > > On středa 8. května 2024 21:21:39, SELČ Oleksandr Natalenko wrote:
> > >> On středa 8. května 2024 21:13:40, SELČ Oleksandr Natalenko wrote:
> > >>> On středa 8. května 2024 17:11:42, SELČ Oleksandr Natalenko wrote:
> > >>>> Hello.
> > >>>>
> > >>>> On středa 8. května 2024 9:21:05, SELČ Perry Yuan wrote:
> > >>>>> Hi all,
> > >>>>> The patchset series add core performance boost feature for AMD
> > >>>>> pstate driver including passisve ,guide and active mode support.
> > >>>>>
> > >>>>> User can change core frequency boost control with a new sysfs
> entry:
> > >>>>>
> > >>>>> "/sys/devices/system/cpu/amd_pstate/cpb_boost"
> > >>>>>
> > >>>>>
> > >>>>> 1) globally disable core boost:
> > >>>>> $ sudo bash -c "echo 0 >
> /sys/devices/system/cpu/amd_pstate/cpb_boost"
> > >>>>> $ lscpu -ae
> > >>>>> CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ
> MHZ
> > >>>>>    0    0      0    0 0:0:0:0          yes 4201.0000 400.0000 2983.578
> > >>>>>    1    0      0    1 1:1:1:0          yes 4201.0000 400.0000 2983.578
> > >>>>>    2    0      0    2 2:2:2:0          yes 4201.0000 400.0000 2583.855
> > >>>>>    3    0      0    3 3:3:3:0          yes 4201.0000 400.0000 2983.578
> > >>>>>    4    0      0    4 4:4:4:0          yes 4201.0000 400.0000 2983.578
> > >>>>>
> > >>>>> 2) globally enable core boost:
> > >>>>> $ sudo bash -c "echo 1 >
> /sys/devices/system/cpu/amd_pstate/cpb_boost"
> > >>>>> $ lscpu -ae
> > >>>>>     0    0      0    0 0:0:0:0          yes 5759.0000 400.0000 2983.578
> > >>>>>    1    0      0    1 1:1:1:0          yes 5759.0000 400.0000 2983.578
> > >>>>>    2    0      0    2 2:2:2:0          yes 5759.0000 400.0000 2983.578
> > >>>>>    3    0      0    3 3:3:3:0          yes 5759.0000 400.0000 2983.578
> > >>>>>    4    0      0    4 4:4:4:0          yes 5759.0000 400.0000 2983.578
> > >>>>>
> > >>>>>
> > >>>>>
> ==========================================================
> ======
> > >>>>> ============ The V9 patches add per CPU boost control, user can
> > >>>>> enable/disable CPUs boost as the below command tested on a
> > >>>>> laptop system.
> > >>>>> # before
> > >>>>>    CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ
> MINMHZ       MHZ
> > >>>>>    0    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1666.7740
> > >>>>>    1    0      0    0 0:0:0:0          yes 4208.0000 400.0000  400.0000
> > >>>>>    2    0      0    1 1:1:1:0          yes 4208.0000 400.0000 3386.1260
> > >>>>>    3    0      0    1 1:1:1:0          yes 4208.0000 400.0000  400.0000
> > >>>>> $ sudo rdmsr 0xc00102b3 -p 0
> > >>>>> 10a6
> > >>>>>
> > >>>>> $ sudo bash -c "echo 1 >
> /sys/devices/system/cpu/cpu0/cpufreq/boost"
> > >>>>> # after
> > >>>>>    CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ
> MINMHZ       MHZ
> > >>>>>      0    0      0    0 0:0:0:0          yes 3501.0000 400.0000  400.0000
> > >>>>>      1    0      0    0 0:0:0:0          yes 4208.0000 400.0000 1391.0690
> > >>>>>      2    0      0    1 1:1:1:0          yes 4208.0000 400.0000 3654.4541
> > >>>>>      3    0      0    1 1:1:1:0          yes 4208.0000 400.0000  400.0000
> > >>>>> $ sudo rdmsr 0xc00102b3 -p 0
> > >>>>> 108a
> > >>>>>
> > >>>>>
> > >>>>> The patches have been tested with the AMD 7950X processor and
> > >>>>> many users would like to get core boost control enabled for power
> saving.
> > >>>>>
> > >>>>> Perry.
> > >>>>>
> > >>>>>
> > >>>>> Changes from v9:
> > >>>>>   * change per CPU boost sysfs file name to `boost` (Mario)
> > >>>>>   * rebased to latest linux-pm/bleeding-edge
> > >>>>>
> > >>>>> Changes from v8:
> > >>>>>   * pick RB flag for patch 4 (Mario)
> > >>>>>   * change boot_cpu_has to cpu_feature_enabled for patch 2 (Boris)
> > >>>>>   * merge patch 6 into patch 3 (Mario)
> > >>>>>   * add two patch for per CPU boost control patch 6 & 7(Mario)
> > >>>>>   * rebased to latest linux-pm/bleeding-edge
> > >>>>>
> > >>>>> Changes from v7:
> > >>>>>   * fix the mutext locking issue in the sysfs file update(Ray, Mario)
> > >>>>>   * pick ack flag from Ray
> > >>>>>   * use X86_FEATURE_CPB to verify the CPB function in Patch #2(Ray)
> > >>>>>   * rerun the testing to check function works well
> > >>>>>   * rebased to linux-pm/bleeding-edge latest
> > >>>>>
> > >>>>> Changes from v6:
> > >>>>>   * reword patch 2 commit log (Gautham)
> > >>>>>   * update cover letter description(Gautham)
> > >>>>>   * rebase to kernel v6.9-rc5
> > >>>>>
> > >>>>> Changes from v4:
> > >>>>>   * drop the legacy boost remove patch, let us keep the legacy
> interface
> > >>>>>     in case some applications break.
> > >>>>>   * rebase to linux-pm/bleeding-edge branch
> > >>>>>   * rework the patchset base on [PATCH v8 0/8] AMD Pstate Fixes
> And
> > >>>>>     Enhancements which has some intial work done there.
> > >>>>>
> > >>>>> Changes from v4:
> > >>>>>   * move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
> > >>>>>   * pick RB flag from Gautham R. Shenoy
> > >>>>>   * add Cc Oleksandr Natalenko <oleksandr@natalenko.name>
> > >>>>>   * rebase to latest linux-pm/bleeding-edge branch
> > >>>>>   * rebase the patch set on top of [PATCH v7 0/6] AMD Pstate Fixes
> And Enhancements
> > >>>>>   * update  [PATCH v7 2/6] to use MSR_K7_HWCR_CPB_DIS_BIT
> > >>>>>
> > >>>>> Changes from v3:
> > >>>>>   * rebased to linux-pm/bleeding-edge v6.8
> > >>>>>   * rename global to amd_pstate_global_params(Oleksandr
> Natalenko)
> > >>>>>   * remove comments for boot_supported in amd_pstate.h
> > >>>>>   * fix the compiler warning for amd-pstate-ut.ko
> > >>>>>   * use for_each_online_cpu in cpb_boost_store which fix the null
> pointer
> > >>>>>     error during testing
> > >>>>>   * fix the max frequency value to be KHz when cpb boost
> > >>>>> disabled(Gautham R. Shenoy)
> > >>>>>
> > >>>>> Changes from v2:
> > >>>>>   * move global struct to amd-pstate.h
> > >>>>>   * fix the amd-pstate-ut with new cpb control interface
> > >>>>>
> > >>>>> Changes from v1:
> > >>>>>   * drop suspend/resume fix patch 6/7 because of the fix should be
> in
> > >>>>>     another fix series instead of CPB feature
> > >>>>>   * move the set_boost remove patch to the last(Mario)
> > >>>>>   * Fix commit info with "Closes:" (Mario)
> > >>>>>   * simplified global.cpb_supported initialization(Mario)
> > >>>>>   * Add guide mode support for CPB control
> > >>>>>   * Fixed some Doc typos and add guide mode info to Doc as well.
> > >>>>>
> > >>>>> v1:
> > >>>>> https://lore.kernel.org/all/cover.1706255676.git.perry.yuan@amd.
> > >>>>> com/
> > >>>>> v2:
> > >>>>> https://lore.kernel.org/lkml/cover.1707047943.git.perry.yuan@amd
> > >>>>> .com/
> > >>>>> v3:
> > >>>>> https://lore.kernel.org/lkml/cover.1707297581.git.perry.yuan@amd
> > >>>>> .com/
> > >>>>> v4:
> > >>>>> https://lore.kernel.org/lkml/cover.1710322310.git.perry.yuan@amd
> > >>>>> .com/
> > >>>>> v5:
> > >>>>> https://lore.kernel.org/lkml/cover.1710473712.git.perry.yuan@amd
> > >>>>> .com/
> > >>>>> v6:
> > >>>>> https://lore.kernel.org/lkml/cover.1710754236.git.perry.yuan@amd
> > >>>>> .com/
> > >>>>> v7:
> > >>>>> https://lore.kernel.org/lkml/cover.1713861200.git.perry.yuan@amd
> > >>>>> .com/
> > >>>>> v8:
> > >>>>> https://lore.kernel.org/lkml/cover.1714112854.git.perry.yuan@amd
> > >>>>> .com/
> > >>>>> v9:
> > >>>>> https://lore.kernel.org/lkml/cover.1714989803.git.perry.yuan@amd
> > >>>>> .com/
> > >>>>>
> > >>>>> Perry Yuan (7):
> > >>>>>    cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-
> index.h
> > >>>>>    cpufreq: amd-pstate: initialize new core precision boost state
> > >>>>>    cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost
> control
> > >>>>>    cpufreq: amd-pstate: fix the MSR highest perf will be reset issue
> > >>>>>      while cpb boost off
> > >>>>>    Documentation: cpufreq: amd-pstate: introduce the new cpu
> boost
> > >>>>>      control method
> > >>>>>    cpufreq: amd-pstate: introduce per CPU frequency boost control
> > >>>>>    Documentation: cpufreq: amd-pstate: update doc for Per CPU
> boost
> > >>>>>      control method
> > >>>>>
> > >>>>>   Documentation/admin-guide/pm/amd-pstate.rst |  30 ++++
> > >>>>>   arch/x86/include/asm/msr-index.h            |   2 +
> > >>>>>   drivers/cpufreq/acpi-cpufreq.c              |   2 -
> > >>>>>   drivers/cpufreq/amd-pstate-ut.c             |   2 +-
> > >>>>>   drivers/cpufreq/amd-pstate.c                | 189
> ++++++++++++++++++--
> > >>>>>   include/linux/amd-pstate.h                  |  14 ++
> > >>>>>   6 files changed, 225 insertions(+), 14 deletions(-)
> > >>>>
> > >>>> I've applied this series along with fixes and improvements [1], and I
> cannot get guided mode to work with my CPU any more.
> > >>>>
> > >>>> The CPU is:
> > >>>>
> > >>>> ```
> > >>>> Vendor ID:                AuthenticAMD
> > >>>>    Model name:             AMD Ryzen 9 5950X 16-Core Processor
> > >>>>      CPU family:           25
> > >>>>      Model:                33
> > >>>>      Thread(s) per core:   2
> > >>>>      Core(s) per socket:   16
> > >>>>      Socket(s):            1
> > >>>>      Stepping:             2
> > >>>> ```
> > >>>>
> > >>>> I've got `amd_pstate=guided` set in the kernel cmdline, but `amd-
> pstate-epp` gets loaded anyway.
> > >>>
> > >>> OK, this part is solved like below:
> > >>>
> > >>> ```
> > >>> diff --git a/drivers/cpufreq/amd-pstate.c
> > >>> b/drivers/cpufreq/amd-pstate.c index aafa4466e5ced..5aee7d2b8cfd7
> > >>> 100644
> > >>> --- a/drivers/cpufreq/amd-pstate.c
> > >>> +++ b/drivers/cpufreq/amd-pstate.c
> > >>> @@ -66,7 +66,7 @@
> > >>>   static struct cpufreq_driver *current_pstate_driver;
> > >>>   static struct cpufreq_driver amd_pstate_driver;
> > >>>   static struct cpufreq_driver amd_pstate_epp_driver; -static int
> > >>> cppc_state;
> > >>> +static int cppc_state = CONFIG_X86_AMD_PSTATE_DEFAULT_MODE;
> > >>>   static bool cppc_enabled;
> > >>>   static bool amd_pstate_prefcore = true;
> > >>>   static struct quirk_entry *quirks; @@ -1958,10 +1958,6 @@ static
> > >>> int __init amd_pstate_init(void)
> > >>>         /* check if this machine need CPPC quirks */
> > >>>         dmi_check_system(amd_pstate_quirks_table);
> > >>>
> > >>> -       /* get default driver mode for loading*/
> > >>> -       cppc_state = CONFIG_X86_AMD_PSTATE_DEFAULT_MODE;
> > >>> -       pr_debug("cppc working state set to mode:%d\n", cppc_state);
> > >>> -
> > >>>         switch (cppc_state) {
> > >>>         case AMD_PSTATE_DISABLE:
> > >>>                 pr_info("driver load is disabled, boot with specific mode to
> > >>> enable this\n"); ```
> > >>>
> > >>> as we have discussed here [1].
> > >>>
> > >>> [1]
> > >>>
> https://lore.kernel.org/lkml/CYYPR12MB865554562BE018D46FF0108C9CE5
> > >>> 2@CYYPR12MB8655.namprd12.prod.outlook.com/
> > >>
> > >> Ah no, scratch it, it's not solved. With `amd_pstate=guided` the driver
> fails to register during the boottime with the same `sysfs` error:
> > >>
> > >> ```
> > >> kernel: sysfs: cannot create duplicate filename
> '/devices/system/cpu/cpufreq/policy0/boost'
> > >> kernel: Hardware name: ASUS System Product Name/Pro WS X570-ACE,
> > >> BIOS 4805 03/18/2024
> > >> kernel: Call Trace:
> > >> kernel:  <TASK>
> > >> kernel:  dump_stack_lvl+0x47/0x60
> > >> kernel:  sysfs_warn_dup+0x5a/0x70
> > >> kernel:  sysfs_create_file_ns+0x196/0x1b0
> > >> kernel:  cpufreq_online+0x244/0xde0
> > >> kernel:  cpufreq_add_dev+0x7b/0x90
> > >> kernel:  subsys_interface_register+0x19e/0x1d0
> > >> kernel:  cpufreq_register_driver+0x177/0x2f0
> > >> kernel:  amd_pstate_init+0x1b8/0x2c0
> > >> kernel:  do_one_initcall+0x5b/0x320
> > >> kernel:  kernel_init_freeable+0x1dc/0x380
> > >> kernel:  kernel_init+0x1a/0x1c0
> > >> kernel:  ret_from_fork+0x34/0x50
> > >> kernel:  ret_from_fork_asm+0x1b/0x30
> > >> kernel:  </TASK>
> > >> ```
> > >>
> > >> and things revert to `acpi_cpufreq` instead.
> > >>
> > >> What's wrong?
> > >
> > > This happens with both `amd_pstate=guided` and `amd_pstate=passive`,
> while with `amd_pstate=active` it works. Also note I've got:
> > >
> > > ```
> > > CONFIG_X86_AMD_PSTATE=y
> > > CONFIG_X86_AMD_PSTATE_DEFAULT_MODE=3
> > > ```
> > >
> > > aka "active" by default.
> > >
> > > It seems I miss to understand something in the init sequence.
> > >
> >
> > I think what's going on is that by reusing the same name as acpi_cppc
> > does for sysfs when amd pstate is changing modes the sysfs file from
> > amd-pstate isn't cleared and so acpi_cppc tries to make it.
>
> Seems so. I've renamed `amd_pstate`'s `boost` file to `amd_pstate_boost`,
> and now I'm able to boot with `amd_pstate=guided`, and after boot under
> `/sys/devices/system/cpu/cpufreq/policyX` I see both `boost` (from
> `acpi_cppc`, apparently) and `amd_pstate_boost` at the same time.
>
> Not sure the fact both files are present is as intended.
>
> >
> > Don't get me wrong - I do think that we should keep the same sysfs
> > name for both, it's easier for users.
> >
> > But if we're going to keep mode switching from amd-pstate at runtime
> > we really need to make sure that amd-pstate-ut explicitly tests all
> > these combinations to catch these types of problems.
>
> Not sure it's runtime switching only that is affected. I guess having
> `CONFIG_X86_AMD_PSTATE_DEFAULT_MODE` set to `active` and then
> having `amd_pstate=guided` on the kernel cmdline is not considered to be a
> runtime switching (or is it?), yet it doesn't work either due to filename
> conflict.
>
> > >>
> > >>>
> > >>> But this part:
> > >>>
> > >>>> When I try to set `guided` manually via `echo guided | sudo tee
> /sys/devices/system/cpu/amd_pstate/status`, the status gets dropped to
> `disable`, `tee` errors out with `-ENODEV`, and there's this in the kernel log:
> > >>>>
> > >>>> ```
> > >>>> $ jctl -kb | grep sysfs: | cut -d ' ' -f 5-
> > >>>> kernel: sysfs: cannot create duplicate filename
> '/devices/system/cpu/cpufreq/policy0/boost'
> > >>>> …
> > >>>> kernel: sysfs: cannot create duplicate filename
> '/devices/system/cpu/cpufreq/policy31/boost'
> > >>>> ```
> > >>>
> > >>> is not. I've successfully booted with `amd_pstate=guided`, then did
> this:
> > >>>
> > >>> ```
> > >>> $ echo active | sudo tee /sys/devices/system/cpu/amd_pstate/status
> > >>> ```
> > >>>
> > >>> just for the sake of test, and got this:
> > >>>
> > >>> ```
> > >>> tee: /sys/devices/system/cpu/amd_pstate/status: File exists ```
> > >>>
> > >>> and this:
> > >>>
> > >>> ```
> > >>> kernel: WARNING: CPU: 9 PID: 8528 at
> > >>> drivers/cpufreq/cpufreq.c:2961 cpufreq_unregister_driver+0x1a/0xc0
> > >>> ```
> > >>>
> > >>> which corresponds to:
> > >>>
> > >>> ```
> > >>> 2957 void cpufreq_unregister_driver(struct cpufreq_driver *driver)
> > >>> 2958 {
> > >>> 2959         unsigned long flags;
> > >>> 2960
> > >>> 2961         if (WARN_ON(!cpufreq_driver || (driver != cpufreq_driver)))
> > >>> 2962                 return;
> > >>> ```
> > >>>
> > >>> I haven't conducted this test before, so I don't know whether this
> behaviour is new, or it was present in older iterations. I also don't know if this
> belongs to the "boost" series or the "fixes", and just letting you know so that
> you can test the runtime switching yourself and see if it is reproducible in
> your environment as well or not.
> > >>>
> > >>>> The following is applied on top of v6.9-rc7:
> > >>>>
> > >>>> ```
> > >>>> cpufreq: amd-pstate: automatically load pstate driver by default
> > >>>> cpufreq: amd-pstate: fix the highest frequency issue which limit
> > >>>> performance
> > >>>> cpufreq: amd-pstate: implement heterogeneous core topology for
> > >>>> highest performance initialization
> > >>>> x86/cpufeatures: Add feature bits for AMD heterogeneous processor
> > >>>> cpufreq: amd-pstate: switch boot_cpu_has() to
> > >>>> cpu_feature_enabled()
> > >>>> Documentation: PM: amd-pstate: add guide mode to the Operation
> > >>>> mode
> > >>>> Documentation: PM: amd-pstate: add debugging section for driver
> > >>>> loading failure
> > >>>> Documentation: PM: amd-pstate: introducing recommended reboot
> > >>>> requirement during driver switch
> > >>>> cpufreq: amd-pstate: add debug message while CPPC is supported
> > >>>> and disabled by SBIOS
> > >>>> cpufreq: amd-pstate: show CPPC debug message if CPPC is not
> > >>>> supported
> > >>>> cpufreq: amd-pstate: optimiza the initial frequency values
> > >>>> verification
> > >>>> Documentation: cpufreq: amd-pstate: update doc for Per CPU boost
> > >>>> control method
> > >>>> cpufreq: amd-pstate: introduce per CPU frequency boost control
> > >>>> Documentation: cpufreq: amd-pstate: introduce the new cpu boost
> > >>>> control method
> > >>>> cpufreq: amd-pstate: fix the MSR highest perf will be reset issue
> > >>>> while cpb boost off
> > >>>> cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost
> > >>>> control
> > >>>> cpufreq: amd-pstate: initialize new core precision boost state
> > >>>> cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h
> > >>>> cpufreq: amd-pstate: remove unused variable
> lowest_nonlinear_freq
> > >>>> cpufreq: amd-pstate: fix code format problems
> > >>>> cpufreq: amd-pstate: Add quirk for the pstate CPPC capabilities
> > >>>> missing
> > >>>> cpufreq: amd-pstate: get transition delay and latency value from
> > >>>> ACPI tables
> > >>>> cpufreq: amd-pstate: Bail out if min/max/nominal_freq is 0
> > >>>> cpufreq: amd-pstate: Remove
> > >>>> amd_get_{min,max,nominal,lowest_nonlinear}_freq()
> > >>>> cpufreq: amd-pstate: Unify computation of
> > >>>> {max,min,nominal,lowest_nonlinear}_freq
> > >>>> cpufreq: amd-pstate: Document the units for freq variables in
> > >>>> amd_cpudata
> > >>>> cpufreq: amd-pstate: Document *_limit_* fields in struct
> > >>>> amd_cpudata ```
> > >>>>
> > >>>> Previously, with your submissions, it was possible to use `guided`
> mode with my Zen 3.
> > >>>>
> > >>>> [1]
> > >>>> https://lore.kernel.org/lkml/cover.1715065568.git.perry.yuan@amd.
> > >>>> com/
> > >>>>
> > >>>>
> > >>>
> > >>>
> > >>>
> > >>
> > >>
> > >>
> > >
> > >
> >
> >
>
>
> --
> Oleksandr Natalenko (post-factum)

I have known the issue detail, will fix it to allow kernel command input like before.

Perry.



^ permalink raw reply	[flat|nested] 23+ messages in thread

* RE: [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost
  2024-05-09 16:01   ` Yuan, Perry
@ 2024-05-09 16:12     ` Borislav Petkov
  0 siblings, 0 replies; 23+ messages in thread
From: Borislav Petkov @ 2024-05-09 16:12 UTC (permalink / raw)
  To: Yuan, Perry
  Cc: rafael.j.wysocki, Limonciello, Mario, viresh.kumar, Huang, Ray,
	Shenoy, Gautham Ranjal, Deucher, Alexander, Huang, Shimmer, Du,
	Xiaojian, Meng, Li (Jassmine),
	linux-pm, linux-kernel

On May 9, 2024 6:01:09 PM GMT+02:00, "Yuan, Perry" <Perry.Yuan@amd.com> wrote:
>I understand your point,  the patch set has taken very long-time review since version 1,
>I would like to get this done as soon as possible with reviewers support,  then we can deliver the feature to users who have been waiting long enough.

Spamming maintainers with it is going to help with that how exactly? 


-- 
Sent from a small device: formatting sucks and brevity is inevitable.

^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2024-05-09 16:34 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-08  7:21 [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost Perry Yuan
2024-05-08  7:21 ` [PATCH v10 1/7] cpufreq: acpi: move MSR_K7_HWCR_CPB_DIS_BIT into msr-index.h Perry Yuan
2024-05-08  7:21 ` [PATCH v10 2/7] cpufreq: amd-pstate: initialize new core precision boost state Perry Yuan
2024-05-08  7:21 ` [PATCH v10 3/7] cpufreq: amd-pstate: implement cpb_boost sysfs entry for boost control Perry Yuan
2024-05-08  9:39   ` Oleksandr Natalenko
2024-05-08 11:42     ` Yuan, Perry
2024-05-08  7:21 ` [PATCH v10 4/7] cpufreq: amd-pstate: fix the MSR highest perf will be reset issue while cpb boost off Perry Yuan
2024-05-08  7:21 ` [PATCH v10 5/7] Documentation: cpufreq: amd-pstate: introduce the new cpu boost control method Perry Yuan
2024-05-08  7:21 ` [PATCH v10 6/7] cpufreq: amd-pstate: introduce per CPU frequency boost control Perry Yuan
2024-05-08  9:34   ` Oleksandr Natalenko
2024-05-08  9:43     ` Oleksandr Natalenko
2024-05-08 12:20       ` Yuan, Perry
2024-05-08  7:21 ` [PATCH v10 7/7] Documentation: cpufreq: amd-pstate: update doc for Per CPU boost control method Perry Yuan
2024-05-08  8:18 ` [PATCH v10 0/7] AMD Pstate Driver Core Performance Boost Borislav Petkov
2024-05-09 16:01   ` Yuan, Perry
2024-05-09 16:12     ` Borislav Petkov
2024-05-08 15:11 ` Oleksandr Natalenko
2024-05-08 19:13   ` Oleksandr Natalenko
2024-05-08 19:21     ` Oleksandr Natalenko
2024-05-08 21:31       ` Oleksandr Natalenko
2024-05-08 22:13         ` Mario Limonciello
2024-05-09 12:01           ` Oleksandr Natalenko
2024-05-09 16:03             ` Yuan, Perry

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).