cpufreq: amd-pstate: Register driver after static call update
Subsystems (2)
PATCH 1/1 cpufreq: amd-pstate: Register driver after static call update
From: Mario Limonciello <[email protected]>
The driver must be registered specifically after the static call update.
--- drivers/cpufreq/amd-pstate.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/cpufreq/amd-pstate.c +6 -6
@@ -1857,12 +1857,6 @@ static int __init amd_pstate_init(void)return -ENODEV ; } - ret =amd_pstate_register_driver (cppc_state); -if (ret) { -pr_err ("failed to register with return %d\n" , ret); -return ret; - } -/* capability check */ if (cpu_feature_enabled (X86_FEATURE_CPPC )) {pr_debug ("AMD CPPC MSR based functionality is supported\n" );
@@ -1881,6 +1875,12 @@ static int __init amd_pstate_init(void)return ret; } + ret =amd_pstate_register_driver (cppc_state); +if (ret) { +pr_err ("failed to register with return %d\n" , ret); +return ret; + } + dev_root =bus_get_dev_root (&cpu_subsys);if (dev_root) { ret =sysfs_create_group (&dev_root->kobj, &amd_pstate_global_attr_group);
Signature · 1 line
2.43.0
Hello Mario,
Quoted 20 lines · Mario Limonciello
From: Mario Limonciello <[email protected]>
The driver must be registered specifically after the static call update.
Fixes e238968a2087 ("cpufreq/amd-pstate: Remove the redundant amd_pstate_set_driver() call")Reported-and-tested-by Klara Modin <[email protected]>Signed-off-by Mario Limonciello <[email protected]>--- drivers/cpufreq/amd-pstate.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)drivers/cpufreq/amd-pstate.c +0
-0@@ -1857,12 +1857,6 @@ static int __init amd_pstate_init(void)return -ENODEV ; }
drivers/cpufreq/amd-pstate.c static int __init amd_pstate_init(void) · line 1862
Quoted 10 lines
drivers/cpufreq/amd-pstate.c +0
-6- ret =amd_pstate_register_driver (cppc_state); -if (ret) { -pr_err ("failed to register with return %d\n" , ret); -return ret; - } -/* capability check */ if (cpu_feature_enabled (X86_FEATURE_CPPC )) {pr_debug ("AMD CPPC MSR based functionality is supported\n" );
1865 if (cppc_state != AMD_PSTATE_ACTIVE)
1866 current_pstate_driver->adjust_perf = amd_pstate_adjust_perf;
If we move the "amd_pstate_register_driver()" call to the below point, wont the above dereference (current_pstate_driver->) cause a null pointer error in MSR based systems with amd_pstate=passive/guided boot param. As we initialize "current_pstate_driver" in amd_pstate_register_driver().
We probably need to break up the if-else condition and handle the MSR based "if" part after the register call and "else" part before the "amd_pstate_register_driver()" call.
Something like,
if (!cpu_feature_enabled(X86_FEATURE_CPPC)) {
pr_debug("AMD CPPC shared memory based functionality is supported\n");
static_call_update(amd_pstate_enable, shmem_enable);
static_call_update(amd_pstate_init_perf, shmem_init_perf);
static_call_update(amd_pstate_update_perf, shmem_update_perf); <---- static call updates done
}
ret = amd_pstate_register_driver(cppc_state); <---- Initializes "current_pstate_driver"
if (ret) {
pr_err("failed to register with return %d\n", ret);
return ret;
}
if (cpu_feature_enabled(X86_FEATURE_CPPC)) {
pr_debug("AMD CPPC MSR based functionality is supported\n");
if (cppc_state != AMD_PSTATE_ACTIVE)
current_pstate_driver->adjust_perf = amd_pstate_adjust_perf; <---- Now we dereference "current_pstate_driver"
}What do you think?
Thanks,
Dhananjay
Quoted 13 lines
drivers/cpufreq/amd-pstate.c +6
-0@@ -1881,6 +1875,12 @@ static int __init amd_pstate_init(void)return ret; } + ret =amd_pstate_register_driver (cppc_state); +if (ret) { +pr_err ("failed to register with return %d\n" , ret); +return ret; + } + dev_root =bus_get_dev_root (&cpu_subsys);if (dev_root) { ret =sysfs_create_group (&dev_root->kobj, &amd_pstate_global_attr_group);
Quoted 65 lines · Dhananjay Ugwekar
Hello Mario,
Quoted 20 lines · Mario Limonciello
From: Mario Limonciello <[email protected]>
The driver must be registered specifically after the static call update.
Fixes e238968a2087 ("cpufreq/amd-pstate: Remove the redundant amd_pstate_set_driver() call")Reported-and-tested-by Klara Modin <[email protected]>Signed-off-by Mario Limonciello <[email protected]>--- drivers/cpufreq/amd-pstate.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)drivers/cpufreq/amd-pstate.c +0
-0@@ -1857,12 +1857,6 @@ static int __init amd_pstate_init(void)return -ENODEV ; }drivers/cpufreq/amd-pstate.c static int __init amd_pstate_init(void) · line 1862
Quoted 10 lines
drivers/cpufreq/amd-pstate.c +0
-6- ret =amd_pstate_register_driver (cppc_state); -if (ret) { -pr_err ("failed to register with return %d\n" , ret); -return ret; - } -/* capability check */ if (cpu_feature_enabled (X86_FEATURE_CPPC )) {pr_debug ("AMD CPPC MSR based functionality is supported\n" );1865 if (
cppc_state!=AMD_PSTATE_ACTIVE)
1866current_pstate_driver->adjust_perf=amd_pstate_adjust_perf;If we move the "
amd_pstate_register_driver()" call to the below point, wont the above dereference (current_pstate_driver->) cause a null pointer error in MSR based systems with amd_pstate=passive/guided boot param. As we initialize "current_pstate_driver" inamd_pstate_register_driver().We probably need to break up the if-else condition and handle the MSR based "if" part after the register call and "else" part before the "
amd_pstate_register_driver()" call.Something like,
if (!cpu_feature_enabled(X86_FEATURE_CPPC)) { pr_debug("AMD CPPC shared memory based functionality is supported\n"); static_call_update(amd_pstate_enable, shmem_enable); static_call_update(amd_pstate_init_perf, shmem_init_perf); static_call_update(amd_pstate_update_perf, shmem_update_perf); <---- static call updates done } ret = amd_pstate_register_driver(cppc_state); <---- Initializes "current_pstate_driver" if (ret) { pr_err("failed to register with return %d\n", ret); return ret; } if (cpu_feature_enabled(X86_FEATURE_CPPC)) { pr_debug("AMD CPPC MSR based functionality is supported\n"); if (cppc_state != AMD_PSTATE_ACTIVE) current_pstate_driver->adjust_perf = amd_pstate_adjust_perf; <---- Now we dereference "current_pstate_driver" }
Quoted 1 line
What do you think?
Makes sense, I'll send out a v2 like this, thanks for the suggestion.
Quoted 17 lines
Thanks,
DhananjayQuoted 13 lines
drivers/cpufreq/amd-pstate.c +6
-0@@ -1881,6 +1875,12 @@ static int __init amd_pstate_init(void)return ret; } + ret =amd_pstate_register_driver (cppc_state); +if (ret) { +pr_err ("failed to register with return %d\n" , ret); +return ret; + } + dev_root =bus_get_dev_root (&cpu_subsys);if (dev_root) { ret =sysfs_create_group (&dev_root->kobj, &amd_pstate_global_attr_group);