Skip to content

Commit dcfce7c

Browse files
committed
cpufreq: sparc: Don't allocate cpufreq_driver dynamically
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@web.de> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Acked-by: Rafael J. Wysocki <rafael@kernel.org>
1 parent 9ab24b0 commit dcfce7c

2 files changed

Lines changed: 34 additions & 82 deletions

File tree

drivers/cpufreq/sparc-us2e-cpufreq.c

Lines changed: 17 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
#include <asm/asi.h>
2121
#include <asm/timer.h>
2222

23-
static struct cpufreq_driver *cpufreq_us2e_driver;
24-
2523
struct us2e_freq_percpu_info {
2624
struct cpufreq_frequency_table table[6];
2725
};
@@ -300,12 +298,19 @@ static int __init us2e_freq_cpu_init(struct cpufreq_policy *policy)
300298

301299
static int us2e_freq_cpu_exit(struct cpufreq_policy *policy)
302300
{
303-
if (cpufreq_us2e_driver)
304-
us2e_freq_target(policy, 0);
305-
301+
us2e_freq_target(policy, 0);
306302
return 0;
307303
}
308304

305+
static struct cpufreq_driver cpufreq_us2e_driver = {
306+
.name = "UltraSPARC-IIe",
307+
.init = us2e_freq_cpu_init,
308+
.verify = cpufreq_generic_frequency_table_verify,
309+
.target_index = us2e_freq_target,
310+
.get = us2e_freq_get,
311+
.exit = us2e_freq_cpu_exit,
312+
};
313+
309314
static int __init us2e_freq_init(void)
310315
{
311316
unsigned long manuf, impl, ver;
@@ -319,39 +324,15 @@ static int __init us2e_freq_init(void)
319324
impl = ((ver >> 32) & 0xffff);
320325

321326
if (manuf == 0x17 && impl == 0x13) {
322-
struct cpufreq_driver *driver;
323-
324-
ret = -ENOMEM;
325-
driver = kzalloc(sizeof(*driver), GFP_KERNEL);
326-
if (!driver)
327-
goto err_out;
328-
329-
us2e_freq_table = kzalloc((NR_CPUS * sizeof(*us2e_freq_table)),
330-
GFP_KERNEL);
327+
us2e_freq_table = kzalloc(NR_CPUS * sizeof(*us2e_freq_table),
328+
GFP_KERNEL);
331329
if (!us2e_freq_table)
332-
goto err_out;
333-
334-
driver->init = us2e_freq_cpu_init;
335-
driver->verify = cpufreq_generic_frequency_table_verify;
336-
driver->target_index = us2e_freq_target;
337-
driver->get = us2e_freq_get;
338-
driver->exit = us2e_freq_cpu_exit;
339-
strcpy(driver->name, "UltraSPARC-IIe");
330+
return -ENOMEM;
340331

341-
cpufreq_us2e_driver = driver;
342-
ret = cpufreq_register_driver(driver);
332+
ret = cpufreq_register_driver(&cpufreq_us2e_driver);
343333
if (ret)
344-
goto err_out;
334+
kfree(us2e_freq_table);
345335

346-
return 0;
347-
348-
err_out:
349-
if (driver) {
350-
kfree(driver);
351-
cpufreq_us2e_driver = NULL;
352-
}
353-
kfree(us2e_freq_table);
354-
us2e_freq_table = NULL;
355336
return ret;
356337
}
357338

@@ -360,13 +341,8 @@ static int __init us2e_freq_init(void)
360341

361342
static void __exit us2e_freq_exit(void)
362343
{
363-
if (cpufreq_us2e_driver) {
364-
cpufreq_unregister_driver(cpufreq_us2e_driver);
365-
kfree(cpufreq_us2e_driver);
366-
cpufreq_us2e_driver = NULL;
367-
kfree(us2e_freq_table);
368-
us2e_freq_table = NULL;
369-
}
344+
cpufreq_unregister_driver(&cpufreq_us2e_driver);
345+
kfree(us2e_freq_table);
370346
}
371347

372348
MODULE_AUTHOR("David S. Miller <davem@redhat.com>");

drivers/cpufreq/sparc-us3-cpufreq.c

Lines changed: 17 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
#include <asm/head.h>
2020
#include <asm/timer.h>
2121

22-
static struct cpufreq_driver *cpufreq_us3_driver;
23-
2422
struct us3_freq_percpu_info {
2523
struct cpufreq_frequency_table table[4];
2624
};
@@ -144,12 +142,19 @@ static int __init us3_freq_cpu_init(struct cpufreq_policy *policy)
144142

145143
static int us3_freq_cpu_exit(struct cpufreq_policy *policy)
146144
{
147-
if (cpufreq_us3_driver)
148-
us3_freq_target(policy, 0);
149-
145+
us3_freq_target(policy, 0);
150146
return 0;
151147
}
152148

149+
static struct cpufreq_driver cpufreq_us3_driver = {
150+
.name = "UltraSPARC-III",
151+
.init = us3_freq_cpu_init,
152+
.verify = cpufreq_generic_frequency_table_verify,
153+
.target_index = us3_freq_target,
154+
.get = us3_freq_get,
155+
.exit = us3_freq_cpu_exit,
156+
};
157+
153158
static int __init us3_freq_init(void)
154159
{
155160
unsigned long manuf, impl, ver;
@@ -167,39 +172,15 @@ static int __init us3_freq_init(void)
167172
impl == CHEETAH_PLUS_IMPL ||
168173
impl == JAGUAR_IMPL ||
169174
impl == PANTHER_IMPL)) {
170-
struct cpufreq_driver *driver;
171-
172-
ret = -ENOMEM;
173-
driver = kzalloc(sizeof(*driver), GFP_KERNEL);
174-
if (!driver)
175-
goto err_out;
176-
177-
us3_freq_table = kzalloc((NR_CPUS * sizeof(*us3_freq_table)),
178-
GFP_KERNEL);
175+
us3_freq_table = kzalloc(NR_CPUS * sizeof(*us3_freq_table),
176+
GFP_KERNEL);
179177
if (!us3_freq_table)
180-
goto err_out;
181-
182-
driver->init = us3_freq_cpu_init;
183-
driver->verify = cpufreq_generic_frequency_table_verify;
184-
driver->target_index = us3_freq_target;
185-
driver->get = us3_freq_get;
186-
driver->exit = us3_freq_cpu_exit;
187-
strcpy(driver->name, "UltraSPARC-III");
178+
return -ENOMEM;
188179

189-
cpufreq_us3_driver = driver;
190-
ret = cpufreq_register_driver(driver);
180+
ret = cpufreq_register_driver(&cpufreq_us3_driver);
191181
if (ret)
192-
goto err_out;
182+
kfree(us3_freq_table);
193183

194-
return 0;
195-
196-
err_out:
197-
if (driver) {
198-
kfree(driver);
199-
cpufreq_us3_driver = NULL;
200-
}
201-
kfree(us3_freq_table);
202-
us3_freq_table = NULL;
203184
return ret;
204185
}
205186

@@ -208,13 +189,8 @@ static int __init us3_freq_init(void)
208189

209190
static void __exit us3_freq_exit(void)
210191
{
211-
if (cpufreq_us3_driver) {
212-
cpufreq_unregister_driver(cpufreq_us3_driver);
213-
kfree(cpufreq_us3_driver);
214-
cpufreq_us3_driver = NULL;
215-
kfree(us3_freq_table);
216-
us3_freq_table = NULL;
217-
}
192+
cpufreq_unregister_driver(&cpufreq_us3_driver);
193+
kfree(us3_freq_table);
218194
}
219195

220196
MODULE_AUTHOR("David S. Miller <davem@redhat.com>");

0 commit comments

Comments
 (0)