blob: e94b31dde8fa30050e474d9a118aff3b11c4e3bc (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
From acda4b2b30a1dbb61e5600bc787a98b705564d7a Mon Sep 17 00:00:00 2001
From: Alexandre Oliva <lxoliva@fsfla.org>
Date: Fri, 22 Aug 2014 19:11:21 -0300
Subject: [PATCH 4/9] loongson2 cpufreq: unregister on init failure
If the loongson2_cpufreq module fails to init, e.g. because
any of the cpufreq_register functions fail, it must unregister
so that the module is unloaded successfully and no misinitialized
device remains in the udev device list. Fixed.
Signed-off-by: Alexandre Oliva <lxoliva@fsfla.org>
---
drivers/cpufreq/loongson2_cpufreq.c | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/drivers/cpufreq/loongson2_cpufreq.c b/drivers/cpufreq/loongson2_cpufreq.c
index fc897ba..ac60f6b 100644
--- a/drivers/cpufreq/loongson2_cpufreq.c
+++ b/drivers/cpufreq/loongson2_cpufreq.c
@@ -161,20 +161,32 @@ static int __init cpufreq_init(void)
/* Register platform stuff */
ret = platform_driver_register(&platform_driver);
if (ret)
- return ret;
+ goto err_return;
pr_info("cpufreq: Loongson-2F CPU frequency driver.\n");
- cpufreq_register_notifier(&loongson2_cpufreq_notifier_block,
- CPUFREQ_TRANSITION_NOTIFIER);
+ ret = cpufreq_register_notifier(&loongson2_cpufreq_notifier_block,
+ CPUFREQ_TRANSITION_NOTIFIER);
+ if (ret)
+ goto err_platform_driver_unregister;
ret = cpufreq_register_driver(&loongson2_cpufreq_driver);
+ if (ret)
+ goto err_cpufreq_unregister_notifier;
- if (!ret && !nowait) {
+ if (!nowait) {
saved_cpu_wait = cpu_wait;
cpu_wait = loongson2_cpu_wait;
}
+ return 0;
+
+ err_cpufreq_unregister_notifier:
+ cpufreq_unregister_notifier(&loongson2_cpufreq_notifier_block,
+ CPUFREQ_TRANSITION_NOTIFIER);
+ err_platform_driver_unregister:
+ platform_driver_unregister(&platform_driver);
+ err_return:
return ret;
}
--
2.4.3
|