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

Commit 4211a303 authored by Jacob Shin's avatar Jacob Shin Committed by Linus Torvalds
Browse files

[PATCH] x86_64: Proper null pointer check in powernow_k8_get



This prevents crashes on dual core system when enough ticks are lost.

Replaces earlier patch by me.

Cc: Dave Jones <davej@redhat.com>
Signed-off-by: default avatarThomas Renninger <trenn@suse.de>
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent d7fa706c
Loading
Loading
Loading
Loading
+10 −1
Original line number Original line Diff line number Diff line
@@ -46,7 +46,7 @@


#define PFX "powernow-k8: "
#define PFX "powernow-k8: "
#define BFX PFX "BIOS error: "
#define BFX PFX "BIOS error: "
#define VERSION "version 1.60.1"
#define VERSION "version 1.60.2"
#include "powernow-k8.h"
#include "powernow-k8.h"


/* serialize freq changes  */
/* serialize freq changes  */
@@ -910,6 +910,9 @@ static int powernowk8_target(struct cpufreq_policy *pol, unsigned targfreq, unsi
	unsigned int newstate;
	unsigned int newstate;
	int ret = -EIO;
	int ret = -EIO;


	if (!data)
		return -EINVAL;

	/* only run on specific CPU from here on */
	/* only run on specific CPU from here on */
	oldmask = current->cpus_allowed;
	oldmask = current->cpus_allowed;
	set_cpus_allowed(current, cpumask_of_cpu(pol->cpu));
	set_cpus_allowed(current, cpumask_of_cpu(pol->cpu));
@@ -969,6 +972,9 @@ static int powernowk8_verify(struct cpufreq_policy *pol)
{
{
	struct powernow_k8_data *data = powernow_data[pol->cpu];
	struct powernow_k8_data *data = powernow_data[pol->cpu];


	if (!data)
		return -EINVAL;

	return cpufreq_frequency_table_verify(pol, data->powernow_table);
	return cpufreq_frequency_table_verify(pol, data->powernow_table);
}
}


@@ -1100,6 +1106,9 @@ static unsigned int powernowk8_get (unsigned int cpu)


	data = powernow_data[first_cpu(cpu_core_map[cpu])];
	data = powernow_data[first_cpu(cpu_core_map[cpu])];


	if (!data)
		return -EINVAL;

	if (!data)
	if (!data)
		return -EINVAL;
		return -EINVAL;