mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
[CPUFREQ] Fix NULL ptr regression in powernow-k8
Fixes bugzilla #13780 From: Kurt Roeckx <kurt@roeckx.be> Signed-off-by: Dave Jones <davej@redhat.com>
This commit is contained in:
parent
1a8e42fa81
commit
f0adb134d8
1 changed files with 8 additions and 7 deletions
|
@ -605,9 +605,10 @@ static int check_pst_table(struct powernow_k8_data *data, struct pst_s *pst,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void invalidate_entry(struct powernow_k8_data *data, unsigned int entry)
|
static void invalidate_entry(struct cpufreq_frequency_table *powernow_table,
|
||||||
|
unsigned int entry)
|
||||||
{
|
{
|
||||||
data->powernow_table[entry].frequency = CPUFREQ_ENTRY_INVALID;
|
powernow_table[entry].frequency = CPUFREQ_ENTRY_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_basics(struct powernow_k8_data *data)
|
static void print_basics(struct powernow_k8_data *data)
|
||||||
|
@ -915,13 +916,13 @@ static int fill_powernow_table_pstate(struct powernow_k8_data *data,
|
||||||
"bad value %d.\n", i, index);
|
"bad value %d.\n", i, index);
|
||||||
printk(KERN_ERR PFX "Please report to BIOS "
|
printk(KERN_ERR PFX "Please report to BIOS "
|
||||||
"manufacturer\n");
|
"manufacturer\n");
|
||||||
invalidate_entry(data, i);
|
invalidate_entry(powernow_table, i);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
rdmsr(MSR_PSTATE_DEF_BASE + index, lo, hi);
|
rdmsr(MSR_PSTATE_DEF_BASE + index, lo, hi);
|
||||||
if (!(hi & HW_PSTATE_VALID_MASK)) {
|
if (!(hi & HW_PSTATE_VALID_MASK)) {
|
||||||
dprintk("invalid pstate %d, ignoring\n", index);
|
dprintk("invalid pstate %d, ignoring\n", index);
|
||||||
invalidate_entry(data, i);
|
invalidate_entry(powernow_table, i);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -970,7 +971,7 @@ static int fill_powernow_table_fidvid(struct powernow_k8_data *data,
|
||||||
/* verify frequency is OK */
|
/* verify frequency is OK */
|
||||||
if ((freq > (MAX_FREQ * 1000)) || (freq < (MIN_FREQ * 1000))) {
|
if ((freq > (MAX_FREQ * 1000)) || (freq < (MIN_FREQ * 1000))) {
|
||||||
dprintk("invalid freq %u kHz, ignoring\n", freq);
|
dprintk("invalid freq %u kHz, ignoring\n", freq);
|
||||||
invalidate_entry(data, i);
|
invalidate_entry(powernow_table, i);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -978,7 +979,7 @@ static int fill_powernow_table_fidvid(struct powernow_k8_data *data,
|
||||||
* BIOSs are using "off" to indicate invalid */
|
* BIOSs are using "off" to indicate invalid */
|
||||||
if (vid == VID_OFF) {
|
if (vid == VID_OFF) {
|
||||||
dprintk("invalid vid %u, ignoring\n", vid);
|
dprintk("invalid vid %u, ignoring\n", vid);
|
||||||
invalidate_entry(data, i);
|
invalidate_entry(powernow_table, i);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -988,7 +989,7 @@ static int fill_powernow_table_fidvid(struct powernow_k8_data *data,
|
||||||
(unsigned int)
|
(unsigned int)
|
||||||
(data->acpi_data.states[i].core_frequency
|
(data->acpi_data.states[i].core_frequency
|
||||||
* 1000));
|
* 1000));
|
||||||
invalidate_entry(data, i);
|
invalidate_entry(powernow_table, i);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue