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

Commit e0d82a0a authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt Committed by Ingo Molnar
Browse files

perf_counter/powerpc: Check oprofile_cpu_type for NULL before using it



If the current CPU doesn't support performance counters,
cur_cpu_spec->oprofile_cpu_type can be NULL. The current
perf_counter modules don't test for that case and would thus
crash at boot time.

Bug reported by David Woodhouse.

Reported-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
LKML-Reference: <19066.48028.446975.501454@cargo.ozlabs.ibm.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent af6af30c
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -407,7 +407,8 @@ struct power_pmu mpc7450_pmu = {

static int init_mpc7450_pmu(void)
{
	if (strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc/7450"))
	if (!cur_cpu_spec->oprofile_cpu_type ||
	    strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc/7450"))
		return -ENODEV;

	return register_power_pmu(&mpc7450_pmu);
+2 −1
Original line number Diff line number Diff line
@@ -606,7 +606,8 @@ static struct power_pmu power4_pmu = {

static int init_power4_pmu(void)
{
	if (strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power4"))
	if (!cur_cpu_spec->oprofile_cpu_type ||
	    strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power4"))
		return -ENODEV;

	return register_power_pmu(&power4_pmu);
+3 −2
Original line number Diff line number Diff line
@@ -678,8 +678,9 @@ static struct power_pmu power5p_pmu = {

static int init_power5p_pmu(void)
{
	if (strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power5+")
	    && strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power5++"))
	if (!cur_cpu_spec->oprofile_cpu_type ||
	    (strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power5+")
	     && strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power5++")))
		return -ENODEV;

	return register_power_pmu(&power5p_pmu);
+2 −1
Original line number Diff line number Diff line
@@ -618,7 +618,8 @@ static struct power_pmu power5_pmu = {

static int init_power5_pmu(void)
{
	if (strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power5"))
	if (!cur_cpu_spec->oprofile_cpu_type ||
	    strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power5"))
		return -ENODEV;

	return register_power_pmu(&power5_pmu);
+2 −1
Original line number Diff line number Diff line
@@ -537,7 +537,8 @@ static struct power_pmu power6_pmu = {

static int init_power6_pmu(void)
{
	if (strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power6"))
	if (!cur_cpu_spec->oprofile_cpu_type ||
	    strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power6"))
		return -ENODEV;

	return register_power_pmu(&power6_pmu);
Loading