diff options
| author | Josh Boyer <jwboyer@redhat.com> | 2013-03-05 21:19:33 -0500 |
|---|---|---|
| committer | Josh Boyer <jwboyer@redhat.com> | 2013-03-05 21:19:33 -0500 |
| commit | 3ce66bca1d49f88d7611c9db02d076739a6d7719 (patch) | |
| tree | d0ac1162b9ca8b7d327e0f6ba2789e1cbcfb46b4 /intel_pstate-Fix-intel_pstate_init-error-path.patch | |
| parent | 993b4799d83b0ac33e9191abc7238f3271b3eb69 (diff) | |
| download | kernel-3ce66bca1d49f88d7611c9db02d076739a6d7719.tar.gz kernel-3ce66bca1d49f88d7611c9db02d076739a6d7719.tar.xz kernel-3ce66bca1d49f88d7611c9db02d076739a6d7719.zip | |
Fix intel_pstate init error path (rhbz 916833)
Diffstat (limited to 'intel_pstate-Fix-intel_pstate_init-error-path.patch')
| -rw-r--r-- | intel_pstate-Fix-intel_pstate_init-error-path.patch | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/intel_pstate-Fix-intel_pstate_init-error-path.patch b/intel_pstate-Fix-intel_pstate_init-error-path.patch new file mode 100644 index 00000000..21c759a9 --- /dev/null +++ b/intel_pstate-Fix-intel_pstate_init-error-path.patch @@ -0,0 +1,76 @@ +From: Dirk Brandewie <dirk.brandewie@gmail.com> + +If cpufreq_register_driver() fails just free memory that has been +allocated and return. intel_pstate_exit() function is removed sine we +are built-in only now there is no reason for a module exit proceedure. + +Reported-by:Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> +Signed-off-by: Dirk Brandewie <dirk.j.brandewie@intel.com> +--- + drivers/cpufreq/intel_pstate.c | 39 +++++++++++---------------------------- + 1 files changed, 11 insertions(+), 28 deletions(-) + +diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c +index 2bfd083..f6dd1e7 100644 +--- a/drivers/cpufreq/intel_pstate.c ++++ b/drivers/cpufreq/intel_pstate.c +@@ -750,37 +750,11 @@ static struct cpufreq_driver intel_pstate_driver = { + .owner = THIS_MODULE, + }; + +-static void intel_pstate_exit(void) +-{ +- int cpu; +- +- sysfs_remove_group(intel_pstate_kobject, +- &intel_pstate_attr_group); +- debugfs_remove_recursive(debugfs_parent); +- +- cpufreq_unregister_driver(&intel_pstate_driver); +- +- if (!all_cpu_data) +- return; +- +- get_online_cpus(); +- for_each_online_cpu(cpu) { +- if (all_cpu_data[cpu]) { +- del_timer_sync(&all_cpu_data[cpu]->timer); +- kfree(all_cpu_data[cpu]); +- } +- } +- +- put_online_cpus(); +- vfree(all_cpu_data); +-} +-module_exit(intel_pstate_exit); +- + static int __initdata no_load; + + static int __init intel_pstate_init(void) + { +- int rc = 0; ++ int cpu, rc = 0; + const struct x86_cpu_id *id; + + if (no_load) +@@ -805,7 +779,16 @@ static int __init intel_pstate_init(void) + intel_pstate_sysfs_expose_params(); + return rc; + out: +- intel_pstate_exit(); ++ get_online_cpus(); ++ for_each_online_cpu(cpu) { ++ if (all_cpu_data[cpu]) { ++ del_timer_sync(&all_cpu_data[cpu]->timer); ++ kfree(all_cpu_data[cpu]); ++ } ++ } ++ ++ put_online_cpus(); ++ vfree(all_cpu_data); + return -ENODEV; + } + device_initcall(intel_pstate_init); +-- +1.7.7.6 + |
