Re: AMD Pstate

Mike Lothian
2021-11-23T10:47:48Z

Hi again

Do I need to enable something else for shedutil to work, I've tried
with and without shared_mem? Compiling a kernel with -j16 has the freq
stuck at 1GHz on all cores - ondemand works fine

That's on a AMD Ryzen 9 5900HX

Also compiling with Clang-13 gives the following warnings:

drivers/cpufreq/amd-pstate.c:257:6: warning: variable 'amd_des_perf'
is used uninitialized whenever 'if' condition is false
[-Wsometimes-uninitialized]

if (target_perf < capacity)

^~~~~~~~~~~~~~~~~~~~~~

drivers/cpufreq/amd-pstate.c:272:40: note: uninitialized use occurs here

amd_des_perf = clamp_t(unsigned long, amd_des_perf,

^~~~~~~~~~~~

./include/linux/minmax.h:124:60: note: expanded from macro 'clamp_t'

#define clamp_t(type, val, lo, hi) min_t(type, max_t(type, val, lo), hi)

^~~

./include/linux/minmax.h:112:48: note: expanded from macro 'max_t'

#define max_t(type, x, y) __careful_cmp((type)(x), (type)(y), >)

^

./include/linux/minmax.h:38:14: note: expanded from macro '__careful_cmp'

__cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))

^

note: (skipping 1 expansions in backtrace; use
-fmacro-backtrace-limit=0 to see all)

./include/linux/minmax.h:104:48: note: expanded from macro 'min_t'

#define min_t(type, x, y) __careful_cmp((type)(x), (type)(y), <)

^

./include/linux/minmax.h:38:14: note: expanded from macro '__careful_cmp'

__cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))

^

./include/linux/minmax.h:31:25: note: expanded from macro '__cmp_once'

typeof(x) unique_x = (x); \

^

drivers/cpufreq/amd-pstate.c:257:2: note: remove the 'if' if its
condition is always true

if (target_perf < capacity)

^~~~~~~~~~~~~~~~~~~~~~~~~~~

drivers/cpufreq/amd-pstate.c:249:56: note: initialize the variable
'amd_des_perf' to silence this warning

unsigned long amd_max_perf, amd_min_perf, amd_des_perf,

^

= 0

On Sun, 21 Nov 2021 at 10:37, Mike Lothian <mike@fireburn.co.uk> wrote:
>
> Hi
>
> I'm not subscribed to the mailing list so apologies for emailing you directly
>
> It looks like something isn't quite right with the kconfig selects
>
> SCHED_MC_PRIO can't be enabled without CPU_SUP_INTEL
>
>
>
> │ Symbol: X86_AMD_PSTATE [=y]
>
> │
> │ Type : bool
>
> │
> │ Defined at drivers/cpufreq/Kconfig.x86:37
>
> │
> │ Prompt: AMD Processor P-State driver
>
> │
> │ Depends on: CPU_FREQ [=y] && X86 [=y]
>
> │
> │ Location:
>
> │
> │ Main menu
>
> │
> │ -> Power management and ACPI options
>
> │
> │ -> CPU Frequency scaling
>
> │
> │ -> CPU Frequency scaling (CPU_FREQ [=y])
>
> │
> │ Selects: ACPI_PROCESSOR [=y] && ACPI_CPPC_LIB [=n] &&
> CPU_FREQ_GOV_SCHEDUTIL [=y]
>
>
>
> │ Symbol: ACPI_CPPC_LIB [=n]
>
> │
> │ Type : bool
>
> │
> │ Defined at drivers/acpi/Kconfig:268
>
> │
> │ Depends on: ACPI [=y] && ACPI_PROCESSOR [=y]
>
> │
> │ Selects: MAILBOX [=n] && PCC [=n]
>
> │
> │ Selected by [n]:
>
> │
> │ - X86_INTEL_PSTATE [=n] && CPU_FREQ [=y] && X86 [=y] && X86_64
> [=y] && ACPI [=y] && SCHED_MC_PRIO [=n]
> │
> │ - X86_AMD_PSTATE [=y] && CPU_FREQ [=y] && X86 [=y] && X86_64 [=y]
> && ACPI [=y] && SCHED_MC_PRIO [=n]
> │
> │ - ACPI_CPPC_CPUFREQ [=n] && CPU_FREQ [=y] && (ARM || ARM64) &&
> ACPI_PROCESSOR [=y]
>
>
>
> │ Symbol: SCHED_MC_PRIO [=n]
>
> │
> │ Type : bool
>
> │
> │ Defined at arch/x86/Kconfig:1029
>
> │
> │ Prompt: CPU core priorities scheduler support
>
> │
> │ Depends on: SCHED_MC [=y] && CPU_SUP_INTEL [=n]
>
> │
> │ Location:
>
> │
> │ Main menu
>
> │
> │ -> Processor type and features
>
> │
> │ (1) -> Multi-core scheduler support (SCHED_MC [=y])
>
> │
> │ Selects: X86_INTEL_PSTATE [=n] && CPU_FREQ [=y]
>
>
>
> I've used this patch to work around the issue:
>
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index 95dd1ee01546..bdfcf155f48e 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -1028,8 +1028,8 @@ config SCHED_MC
>
> config SCHED_MC_PRIO
> bool "CPU core priorities scheduler support"
> - depends on SCHED_MC && CPU_SUP_INTEL
> - select X86_INTEL_PSTATE
> + depends on SCHED_MC && CPU_SUP_AMD
> + select X86_AMD_PSTATE
> select CPU_FREQ
> default y
> help
>
> Which gets things working here