When the cpufreq_driver does not provide an exit() function.
cpufreq offline operations can result in a kernel crash.
Signed-off-by: Lizhe <[email protected]>
---
drivers/cpufreq/cpufreq.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index 04d349372de3..e8660bc7d232 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -1739,7 +1739,7 @@ static void cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif)
}
/* We did light-weight exit earlier, do full tear down now */
- if (cpufreq_driver->offline)
+ if (cpufreq_driver->offline && cpufreq_driver->exit)
cpufreq_driver->exit(policy);
up_write(&policy->rwsem);
--
2.25.1
On 11-04-24, 16:18, Lizhe wrote:
> When the cpufreq_driver does not provide an exit() function.
> cpufreq offline operations can result in a kernel crash.
>
> Signed-off-by: Lizhe <[email protected]>
> ---
> drivers/cpufreq/cpufreq.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
> index 04d349372de3..e8660bc7d232 100644
> --- a/drivers/cpufreq/cpufreq.c
> +++ b/drivers/cpufreq/cpufreq.c
> @@ -1739,7 +1739,7 @@ static void cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif)
> }
>
> /* We did light-weight exit earlier, do full tear down now */
> - if (cpufreq_driver->offline)
> + if (cpufreq_driver->offline && cpufreq_driver->exit)
> cpufreq_driver->exit(policy);
>
> up_write(&policy->rwsem);
Hmm, saw this just now.
Acked-by: Viresh Kumar <[email protected]>
--
viresh
On Fri, Apr 12, 2024 at 1:19 AM Lizhe <[email protected]> wrote:
>
> When the cpufreq_driver does not provide an exit() function.
> cpufreq offline operations can result in a kernel crash.
>
> Signed-off-by: Lizhe <[email protected]>
> ---
> drivers/cpufreq/cpufreq.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
> index 04d349372de3..e8660bc7d232 100644
> --- a/drivers/cpufreq/cpufreq.c
> +++ b/drivers/cpufreq/cpufreq.c
> @@ -1739,7 +1739,7 @@ static void cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif)
> }
>
> /* We did light-weight exit earlier, do full tear down now */
> - if (cpufreq_driver->offline)
> + if (cpufreq_driver->offline && cpufreq_driver->exit)
> cpufreq_driver->exit(policy);
>
> up_write(&policy->rwsem);
> --
I've applied the patch from Viresh that addresses both issues with
missing ->exit() driver callback checks and therefore is more
complete.
Also I'm not going to apply any other patches you have sent because
there were obvious mistakes in some of them and you sent updates
without version numbering and without any information regarding what
changed with respect to the previous version(s). Also some patches
were sent in multiple copies (I think) without telling me which one to
look at. All of that is too confusing to be treated seriously and
quite disrespectful to the prospective reviewers (who might allocate
their time to more productive things).
If you want to send the changes once again, it is fine because they
generally do some nice cleanups, but please follow the patch
submission and kernel development process documentation as Greg has
already advised you.
Thanks!