lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAJZ5v0iU1aLRd447x=4_ng7JoGCiptw3ps5gzFcG_kVwGa2wPg@mail.gmail.com>
Date:   Thu, 11 May 2023 12:21:18 +0200
From:   "Rafael J. Wysocki" <rafael@...nel.org>
To:     Viresh Kumar <viresh.kumar@...aro.org>
Cc:     "Rafael J. Wysocki" <rafael@...nel.org>, linux-pm@...r.kernel.org,
        Vincent Guittot <vincent.guittot@...aro.org>,
        Markus Elfring <Markus.Elfring@....de>,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH] cpufreq: sparc: Don't allocate cpufreq_driver dynamically

On Thu, May 11, 2023 at 11:01 AM Viresh Kumar <viresh.kumar@...aro.org> wrote:
>
> There is no point allocating the cpufreq driver dynamically and add so
> much complexity in the driver.
>
> Do what is done for other cpufreq drivers and statically allocate the
> cpufreq driver.
>
> Reported-by: Markus Elfring <Markus.Elfring@....de>
> Signed-off-by: Viresh Kumar <viresh.kumar@...aro.org>

Acked-by: Rafael J. Wysocki <rafael@...nel.org>

> ---
> Looks like I wrote this back in April and forgot to send it :(

Oh well.

>  drivers/cpufreq/sparc-us2e-cpufreq.c | 58 ++++++++--------------------
>  drivers/cpufreq/sparc-us3-cpufreq.c  | 58 ++++++++--------------------
>  2 files changed, 34 insertions(+), 82 deletions(-)
>
> diff --git a/drivers/cpufreq/sparc-us2e-cpufreq.c b/drivers/cpufreq/sparc-us2e-cpufreq.c
> index 92acbb25abb3..d3510cfdb3eb 100644
> --- a/drivers/cpufreq/sparc-us2e-cpufreq.c
> +++ b/drivers/cpufreq/sparc-us2e-cpufreq.c
> @@ -20,8 +20,6 @@
>  #include <asm/asi.h>
>  #include <asm/timer.h>
>
> -static struct cpufreq_driver *cpufreq_us2e_driver;
> -
>  struct us2e_freq_percpu_info {
>         struct cpufreq_frequency_table table[6];
>  };
> @@ -300,12 +298,19 @@ static int __init us2e_freq_cpu_init(struct cpufreq_policy *policy)
>
>  static int us2e_freq_cpu_exit(struct cpufreq_policy *policy)
>  {
> -       if (cpufreq_us2e_driver)
> -               us2e_freq_target(policy, 0);
> -
> +       us2e_freq_target(policy, 0);
>         return 0;
>  }
>
> +static struct cpufreq_driver cpufreq_us2e_driver = {
> +       .name = "UltraSPARC-IIe",
> +       .init = us2e_freq_cpu_init,
> +       .verify = cpufreq_generic_frequency_table_verify,
> +       .target_index = us2e_freq_target,
> +       .get = us2e_freq_get,
> +       .exit = us2e_freq_cpu_exit,
> +};
> +
>  static int __init us2e_freq_init(void)
>  {
>         unsigned long manuf, impl, ver;
> @@ -319,39 +324,15 @@ static int __init us2e_freq_init(void)
>         impl  = ((ver >> 32) & 0xffff);
>
>         if (manuf == 0x17 && impl == 0x13) {
> -               struct cpufreq_driver *driver;
> -
> -               ret = -ENOMEM;
> -               driver = kzalloc(sizeof(*driver), GFP_KERNEL);
> -               if (!driver)
> -                       goto err_out;
> -
> -               us2e_freq_table = kzalloc((NR_CPUS * sizeof(*us2e_freq_table)),
> -                       GFP_KERNEL);
> +               us2e_freq_table = kzalloc(NR_CPUS * sizeof(*us2e_freq_table),
> +                                         GFP_KERNEL);
>                 if (!us2e_freq_table)
> -                       goto err_out;
> -
> -               driver->init = us2e_freq_cpu_init;
> -               driver->verify = cpufreq_generic_frequency_table_verify;
> -               driver->target_index = us2e_freq_target;
> -               driver->get = us2e_freq_get;
> -               driver->exit = us2e_freq_cpu_exit;
> -               strcpy(driver->name, "UltraSPARC-IIe");
> +                       return -ENOMEM;
>
> -               cpufreq_us2e_driver = driver;
> -               ret = cpufreq_register_driver(driver);
> +               ret = cpufreq_register_driver(&cpufreq_us2e_driver);
>                 if (ret)
> -                       goto err_out;
> +                       kfree(us2e_freq_table);
>
> -               return 0;
> -
> -err_out:
> -               if (driver) {
> -                       kfree(driver);
> -                       cpufreq_us2e_driver = NULL;
> -               }
> -               kfree(us2e_freq_table);
> -               us2e_freq_table = NULL;
>                 return ret;
>         }
>
> @@ -360,13 +341,8 @@ static int __init us2e_freq_init(void)
>
>  static void __exit us2e_freq_exit(void)
>  {
> -       if (cpufreq_us2e_driver) {
> -               cpufreq_unregister_driver(cpufreq_us2e_driver);
> -               kfree(cpufreq_us2e_driver);
> -               cpufreq_us2e_driver = NULL;
> -               kfree(us2e_freq_table);
> -               us2e_freq_table = NULL;
> -       }
> +       cpufreq_unregister_driver(&cpufreq_us2e_driver);
> +       kfree(us2e_freq_table);
>  }
>
>  MODULE_AUTHOR("David S. Miller <davem@...hat.com>");
> diff --git a/drivers/cpufreq/sparc-us3-cpufreq.c b/drivers/cpufreq/sparc-us3-cpufreq.c
> index e41b35b16afd..91d1ed558136 100644
> --- a/drivers/cpufreq/sparc-us3-cpufreq.c
> +++ b/drivers/cpufreq/sparc-us3-cpufreq.c
> @@ -19,8 +19,6 @@
>  #include <asm/head.h>
>  #include <asm/timer.h>
>
> -static struct cpufreq_driver *cpufreq_us3_driver;
> -
>  struct us3_freq_percpu_info {
>         struct cpufreq_frequency_table table[4];
>  };
> @@ -144,12 +142,19 @@ static int __init us3_freq_cpu_init(struct cpufreq_policy *policy)
>
>  static int us3_freq_cpu_exit(struct cpufreq_policy *policy)
>  {
> -       if (cpufreq_us3_driver)
> -               us3_freq_target(policy, 0);
> -
> +       us3_freq_target(policy, 0);
>         return 0;
>  }
>
> +static struct cpufreq_driver cpufreq_us3_driver = {
> +       .name = "UltraSPARC-III",
> +       .init = us3_freq_cpu_init,
> +       .verify = cpufreq_generic_frequency_table_verify,
> +       .target_index = us3_freq_target,
> +       .get = us3_freq_get,
> +       .exit = us3_freq_cpu_exit,
> +};
> +
>  static int __init us3_freq_init(void)
>  {
>         unsigned long manuf, impl, ver;
> @@ -167,39 +172,15 @@ static int __init us3_freq_init(void)
>              impl == CHEETAH_PLUS_IMPL ||
>              impl == JAGUAR_IMPL ||
>              impl == PANTHER_IMPL)) {
> -               struct cpufreq_driver *driver;
> -
> -               ret = -ENOMEM;
> -               driver = kzalloc(sizeof(*driver), GFP_KERNEL);
> -               if (!driver)
> -                       goto err_out;
> -
> -               us3_freq_table = kzalloc((NR_CPUS * sizeof(*us3_freq_table)),
> -                       GFP_KERNEL);
> +               us3_freq_table = kzalloc(NR_CPUS * sizeof(*us3_freq_table),
> +                                        GFP_KERNEL);
>                 if (!us3_freq_table)
> -                       goto err_out;
> -
> -               driver->init = us3_freq_cpu_init;
> -               driver->verify = cpufreq_generic_frequency_table_verify;
> -               driver->target_index = us3_freq_target;
> -               driver->get = us3_freq_get;
> -               driver->exit = us3_freq_cpu_exit;
> -               strcpy(driver->name, "UltraSPARC-III");
> +                       return -ENOMEM;
>
> -               cpufreq_us3_driver = driver;
> -               ret = cpufreq_register_driver(driver);
> +               ret = cpufreq_register_driver(&cpufreq_us3_driver);
>                 if (ret)
> -                       goto err_out;
> +                       kfree(us3_freq_table);
>
> -               return 0;
> -
> -err_out:
> -               if (driver) {
> -                       kfree(driver);
> -                       cpufreq_us3_driver = NULL;
> -               }
> -               kfree(us3_freq_table);
> -               us3_freq_table = NULL;
>                 return ret;
>         }
>
> @@ -208,13 +189,8 @@ static int __init us3_freq_init(void)
>
>  static void __exit us3_freq_exit(void)
>  {
> -       if (cpufreq_us3_driver) {
> -               cpufreq_unregister_driver(cpufreq_us3_driver);
> -               kfree(cpufreq_us3_driver);
> -               cpufreq_us3_driver = NULL;
> -               kfree(us3_freq_table);
> -               us3_freq_table = NULL;
> -       }
> +       cpufreq_unregister_driver(&cpufreq_us3_driver);
> +       kfree(us3_freq_table);
>  }
>
>  MODULE_AUTHOR("David S. Miller <davem@...hat.com>");
> --
> 2.31.1.272.g89b43f80a514
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ