Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f0adb134 authored by Kurt Roeckx's avatar Kurt Roeckx Committed by Dave Jones
Browse files

[CPUFREQ] Fix NULL ptr regression in powernow-k8



Fixes bugzilla #13780

From: Kurt Roeckx <kurt@roeckx.be>
Signed-off-by: default avatarDave Jones <davej@redhat.com>
parent 1a8e42fa
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -605,9 +605,10 @@ static int check_pst_table(struct powernow_k8_data *data, struct pst_s *pst,
	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)
@@ -915,13 +916,13 @@ static int fill_powernow_table_pstate(struct powernow_k8_data *data,
					"bad value %d.\n", i, index);
			printk(KERN_ERR PFX "Please report to BIOS "
					"manufacturer\n");
			invalidate_entry(data, i);
			invalidate_entry(powernow_table, i);
			continue;
		}
		rdmsr(MSR_PSTATE_DEF_BASE + index, lo, hi);
		if (!(hi & HW_PSTATE_VALID_MASK)) {
			dprintk("invalid pstate %d, ignoring\n", index);
			invalidate_entry(data, i);
			invalidate_entry(powernow_table, i);
			continue;
		}

@@ -970,7 +971,7 @@ static int fill_powernow_table_fidvid(struct powernow_k8_data *data,
		/* verify frequency is OK */
		if ((freq > (MAX_FREQ * 1000)) || (freq < (MIN_FREQ * 1000))) {
			dprintk("invalid freq %u kHz, ignoring\n", freq);
			invalidate_entry(data, i);
			invalidate_entry(powernow_table, i);
			continue;
		}

@@ -978,7 +979,7 @@ static int fill_powernow_table_fidvid(struct powernow_k8_data *data,
		 * BIOSs are using "off" to indicate invalid */
		if (vid == VID_OFF) {
			dprintk("invalid vid %u, ignoring\n", vid);
			invalidate_entry(data, i);
			invalidate_entry(powernow_table, i);
			continue;
		}

@@ -988,7 +989,7 @@ static int fill_powernow_table_fidvid(struct powernow_k8_data *data,
				(unsigned int)
				(data->acpi_data.states[i].core_frequency
				 * 1000));
			invalidate_entry(data, i);
			invalidate_entry(powernow_table, i);
			continue;
		}
	}