diff options
Diffstat (limited to 'gnu/packages/patches/linux-libre-loongson2-cpufreq-fix.patch')
-rw-r--r-- | gnu/packages/patches/linux-libre-loongson2-cpufreq-fix.patch | 59 |
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 + |