aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
diff options
context:
space:
mode:
authorDave Jones <davej@redhat.com>2005-07-28 12:38:21 -0400
committerDave Jones <davej@redhat.com>2005-07-28 12:38:21 -0400
commit03938c3f1062b0f279a0ef937a471d4db83702ed (patch)
tree12e7a40b6f6232d6ddd7b5bd475fe29722cd8f10 /arch/i386/kernel/cpu/cpufreq/powernow-k8.c
parent8ed693d29b25bbd88471ec043cc01581419d0481 (diff)
powernow-k8 requires that a data structure for
each core be created in the _cpu_init function call. The cpufreq infrastructure doesn't call _cpu_init for the second core in each processor. Some systems crashed when _get was called with an odd-numbered core because it tried to dereference a NULL pointer since the data structure had not been created. The attached patch solves the problem by initializing data structures for all shared cores in the _cpu_init function. It should apply to 2.6.12-rc6 and has been tested by AMD and Sun. Signed-off-by: Mark Langsdorf <mark.langsdorf@amd.com> Signed-off-by: Dave Jones <davej@redhat.com>
Diffstat (limited to 'arch/i386/kernel/cpu/cpufreq/powernow-k8.c')
-rw-r--r--arch/i386/kernel/cpu/cpufreq/powernow-k8.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
index 10cc096c0ade..9cf7b67b8afc 100644
--- a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
+++ b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
@@ -44,7 +44,7 @@
44 44
45#define PFX "powernow-k8: " 45#define PFX "powernow-k8: "
46#define BFX PFX "BIOS error: " 46#define BFX PFX "BIOS error: "
47#define VERSION "version 1.40.2" 47#define VERSION "version 1.40.4"
48#include "powernow-k8.h" 48#include "powernow-k8.h"
49 49
50/* serialize freq changes */ 50/* serialize freq changes */
@@ -978,7 +978,7 @@ static int __init powernowk8_cpu_init(struct cpufreq_policy *pol)
978{ 978{
979 struct powernow_k8_data *data; 979 struct powernow_k8_data *data;
980 cpumask_t oldmask = CPU_MASK_ALL; 980 cpumask_t oldmask = CPU_MASK_ALL;
981 int rc; 981 int rc, i;
982 982
983 if (!check_supported_cpu(pol->cpu)) 983 if (!check_supported_cpu(pol->cpu))
984 return -ENODEV; 984 return -ENODEV;
@@ -1064,7 +1064,9 @@ static int __init powernowk8_cpu_init(struct cpufreq_policy *pol)
1064 printk("cpu_init done, current fid 0x%x, vid 0x%x\n", 1064 printk("cpu_init done, current fid 0x%x, vid 0x%x\n",
1065 data->currfid, data->currvid); 1065 data->currfid, data->currvid);
1066 1066
1067 powernow_data[pol->cpu] = data; 1067 for_each_cpu_mask(i, cpu_core_map[pol->cpu]) {
1068 powernow_data[i] = data;
1069 }
1068 1070
1069 return 0; 1071 return 0;
1070 1072