summary refs log tree commit diff
path: root/gnu/packages/patches/linux-libre-loongson2-cpufreq-fix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches/linux-libre-loongson2-cpufreq-fix.patch')
-rw-r--r--gnu/packages/patches/linux-libre-loongson2-cpufreq-fix.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/gnu/packages/patches/linux-libre-loongson2-cpufreq-fix.patch b/gnu/packages/patches/linux-libre-loongson2-cpufreq-fix.patch
new file mode 100644
index 0000000000..e94b31dde8
--- /dev/null
+++ b/gnu/packages/patches/linux-libre-loongson2-cpufreq-fix.patch
@@ -0,0 +1,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
+