diff mbox series

[v3] cpufreq: qcom-kryo: Fix section annotations

Message ID 20180920002220.16644-1-natechancellor@gmail.com (mailing list archive)
State Accepted, archived
Delegated to: Rafael Wysocki
Headers show
Series [v3] cpufreq: qcom-kryo: Fix section annotations | expand

Commit Message

Nathan Chancellor Sept. 20, 2018, 12:22 a.m. UTC
There is currently a warning when building the Kryo cpufreq driver into
the kernel image:

WARNING: vmlinux.o(.text+0x8aa424): Section mismatch in reference from
the function qcom_cpufreq_kryo_probe() to the function
.init.text:qcom_cpufreq_kryo_get_msm_id()
The function qcom_cpufreq_kryo_probe() references
the function __init qcom_cpufreq_kryo_get_msm_id().
This is often because qcom_cpufreq_kryo_probe lacks a __init
annotation or the annotation of qcom_cpufreq_kryo_get_msm_id is wrong.

Remove the '__init' annotation from qcom_cpufreq_kryo_get_msm_id
so that there is no more mismatch warning.

Additionally, Nick noticed that the remove function was marked as
'__init' when it should really be marked as '__exit'.

Fixes: 46e2856b8e18 ("cpufreq: Add Kryo CPU scaling driver")
Reported-by: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
---

v1 -> v2:

Add '__init' to qcom_cpufreq_kryo_probe instead of removing it from
qcom_cpufreq_kryo_get_msm_id.

v2 -> v3:

Go back to removing '__init' from qcom_cpufreq_kryo_get_msm_id instead
of adding '__init' to qcom_cpufreq_kryo_probe, which causes another
mismatch warning and add the '__init' -> '__exit' conversion noticed by
Nick.

The alternative solution is adding '__init' to qcom_cpufreq_kryo_probe,
removing the probe definition from qcom_cpufreq_kryo_driver, then
changing platform_driver_register to platform_driver_probe in
qcom_cpufreq_kryo_init, like [1]. I don't know how that would perform
given that I don't have a way to test this device.

[1]: https://lore.kernel.org/lkml/20180919185341.31298-1-natechancellor@gmail.com/

 drivers/cpufreq/qcom-cpufreq-kryo.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Rafael J. Wysocki Sept. 20, 2018, 8:09 a.m. UTC | #1
On Thursday, September 20, 2018 2:22:21 AM CEST Nathan Chancellor wrote:
> There is currently a warning when building the Kryo cpufreq driver into
> the kernel image:
> 
> WARNING: vmlinux.o(.text+0x8aa424): Section mismatch in reference from
> the function qcom_cpufreq_kryo_probe() to the function
> .init.text:qcom_cpufreq_kryo_get_msm_id()
> The function qcom_cpufreq_kryo_probe() references
> the function __init qcom_cpufreq_kryo_get_msm_id().
> This is often because qcom_cpufreq_kryo_probe lacks a __init
> annotation or the annotation of qcom_cpufreq_kryo_get_msm_id is wrong.
> 
> Remove the '__init' annotation from qcom_cpufreq_kryo_get_msm_id
> so that there is no more mismatch warning.
> 
> Additionally, Nick noticed that the remove function was marked as
> '__init' when it should really be marked as '__exit'.
> 
> Fixes: 46e2856b8e18 ("cpufreq: Add Kryo CPU scaling driver")
> Reported-by: Nick Desaulniers <ndesaulniers@google.com>
> Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
> ---
> 
> v1 -> v2:
> 
> Add '__init' to qcom_cpufreq_kryo_probe instead of removing it from
> qcom_cpufreq_kryo_get_msm_id.
> 
> v2 -> v3:
> 
> Go back to removing '__init' from qcom_cpufreq_kryo_get_msm_id instead
> of adding '__init' to qcom_cpufreq_kryo_probe, which causes another
> mismatch warning and add the '__init' -> '__exit' conversion noticed by
> Nick.
> 
> The alternative solution is adding '__init' to qcom_cpufreq_kryo_probe,
> removing the probe definition from qcom_cpufreq_kryo_driver, then
> changing platform_driver_register to platform_driver_probe in
> qcom_cpufreq_kryo_init, like [1]. I don't know how that would perform
> given that I don't have a way to test this device.
> 
> [1]: https://lore.kernel.org/lkml/20180919185341.31298-1-natechancellor@gmail.com/
> 
>  drivers/cpufreq/qcom-cpufreq-kryo.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/cpufreq/qcom-cpufreq-kryo.c b/drivers/cpufreq/qcom-cpufreq-kryo.c
> index a1830fa25fc5..2a3675c24032 100644
> --- a/drivers/cpufreq/qcom-cpufreq-kryo.c
> +++ b/drivers/cpufreq/qcom-cpufreq-kryo.c
> @@ -44,7 +44,7 @@ enum _msm8996_version {
>  
>  struct platform_device *cpufreq_dt_pdev, *kryo_cpufreq_pdev;
>  
> -static enum _msm8996_version __init qcom_cpufreq_kryo_get_msm_id(void)
> +static enum _msm8996_version qcom_cpufreq_kryo_get_msm_id(void)
>  {
>  	size_t len;
>  	u32 *msm_id;
> @@ -222,7 +222,7 @@ static int __init qcom_cpufreq_kryo_init(void)
>  }
>  module_init(qcom_cpufreq_kryo_init);
>  
> -static void __init qcom_cpufreq_kryo_exit(void)
> +static void __exit qcom_cpufreq_kryo_exit(void)
>  {
>  	platform_device_unregister(kryo_cpufreq_pdev);
>  	platform_driver_unregister(&qcom_cpufreq_kryo_driver);
> 

OK, thanks!

I'll queue this up for 4.19-rc6 if there are no objections.
Viresh Kumar Sept. 20, 2018, 4:13 p.m. UTC | #2
On 19-09-18, 17:22, Nathan Chancellor wrote:
> There is currently a warning when building the Kryo cpufreq driver into
> the kernel image:
> 
> WARNING: vmlinux.o(.text+0x8aa424): Section mismatch in reference from
> the function qcom_cpufreq_kryo_probe() to the function
> .init.text:qcom_cpufreq_kryo_get_msm_id()
> The function qcom_cpufreq_kryo_probe() references
> the function __init qcom_cpufreq_kryo_get_msm_id().
> This is often because qcom_cpufreq_kryo_probe lacks a __init
> annotation or the annotation of qcom_cpufreq_kryo_get_msm_id is wrong.
> 
> Remove the '__init' annotation from qcom_cpufreq_kryo_get_msm_id
> so that there is no more mismatch warning.
> 
> Additionally, Nick noticed that the remove function was marked as
> '__init' when it should really be marked as '__exit'.

I know Rafael asked to merge the two patches into a single one, but I still
believe its the best to have two separate patches to fix these two separate
issues. For example, picking this patch for an earlier kernel may produce
conflicts because the exit code was written at a later point of time and also
that the below Fixes tag applies only to the first problem only. And the
individual patch for the exit problem is already on the list.

> Fixes: 46e2856b8e18 ("cpufreq: Add Kryo CPU scaling driver")
> Reported-by: Nick Desaulniers <ndesaulniers@google.com>
> Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>

Anyway I am fine if Rafael wants to pick it up this way only.

Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
diff mbox series

Patch

diff --git a/drivers/cpufreq/qcom-cpufreq-kryo.c b/drivers/cpufreq/qcom-cpufreq-kryo.c
index a1830fa25fc5..2a3675c24032 100644
--- a/drivers/cpufreq/qcom-cpufreq-kryo.c
+++ b/drivers/cpufreq/qcom-cpufreq-kryo.c
@@ -44,7 +44,7 @@  enum _msm8996_version {
 
 struct platform_device *cpufreq_dt_pdev, *kryo_cpufreq_pdev;
 
-static enum _msm8996_version __init qcom_cpufreq_kryo_get_msm_id(void)
+static enum _msm8996_version qcom_cpufreq_kryo_get_msm_id(void)
 {
 	size_t len;
 	u32 *msm_id;
@@ -222,7 +222,7 @@  static int __init qcom_cpufreq_kryo_init(void)
 }
 module_init(qcom_cpufreq_kryo_init);
 
-static void __init qcom_cpufreq_kryo_exit(void)
+static void __exit qcom_cpufreq_kryo_exit(void)
 {
 	platform_device_unregister(kryo_cpufreq_pdev);
 	platform_driver_unregister(&qcom_cpufreq_kryo_driver);