diff options
author | Dave Jones <davej@redhat.com> | 2005-07-28 12:38:21 -0400 |
---|---|---|
committer | Dave Jones <davej@redhat.com> | 2005-07-28 12:38:21 -0400 |
commit | 03938c3f1062b0f279a0ef937a471d4db83702ed (patch) | |
tree | 12e7a40b6f6232d6ddd7b5bd475fe29722cd8f10 /arch/i386/kernel/cpu/cpufreq | |
parent | 8ed693d29b25bbd88471ec043cc01581419d0481 (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')
-rw-r--r-- | arch/i386/kernel/cpu/cpufreq/powernow-k8.c | 8 |
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 | ||