[PATCH] ppc64: Move oprofile_model into cpu feature struct

Anton Blanchard anton at samba.org
Tue Sep 6 14:57:52 EST 2005


Move oprofile_model into cpu feature struct.

Signed-off-by: Anton Blanchard <anton at samba.org>

Index: build/arch/ppc64/kernel/cputable.c
===================================================================
--- build.orig/arch/ppc64/kernel/cputable.c	2005-09-05 21:10:43.000000000 +1000
+++ build/arch/ppc64/kernel/cputable.c	2005-09-05 21:22:32.000000000 +1000
@@ -19,6 +19,7 @@
 #include <linux/init.h>
 #include <linux/module.h>
 
+#include <asm/oprofile_impl.h>
 #include <asm/cputable.h>
 
 struct cpu_spec* cur_cpu_spec = NULL;
@@ -61,6 +62,7 @@
 		.num_pmcs		= 8,
 		.cpu_setup		= __setup_cpu_power3,
 		.oprofile_cpu_type	= "ppc64/power3",
+		.oprofile_model		= &op_model_rs64,
 	},
 	{	/* Power3+ */
 		.pvr_mask		= 0xffff0000,
@@ -74,6 +76,7 @@
 		.num_pmcs		= 8,
 		.cpu_setup		= __setup_cpu_power3,
 		.oprofile_cpu_type	= "ppc64/power3",
+		.oprofile_model		= &op_model_rs64,
 	},
 	{	/* Northstar */
 		.pvr_mask		= 0xffff0000,
@@ -88,6 +91,7 @@
 		.num_pmcs		= 8,
 		.cpu_setup		= __setup_cpu_power3,
 		.oprofile_cpu_type	= "ppc64/rs64",
+		.oprofile_model		= &op_model_rs64,
 	},
 	{	/* Pulsar */
 		.pvr_mask		= 0xffff0000,
@@ -102,6 +106,7 @@
 		.num_pmcs		= 8,
 		.cpu_setup		= __setup_cpu_power3,
 		.oprofile_cpu_type	= "ppc64/rs64",
+		.oprofile_model		= &op_model_rs64,
 	},
 	{	/* I-star */
 		.pvr_mask		= 0xffff0000,
@@ -116,6 +121,7 @@
 		.num_pmcs		= 8,
 		.cpu_setup		= __setup_cpu_power3,
 		.oprofile_cpu_type	= "ppc64/rs64",
+		.oprofile_model		= &op_model_rs64,
 	},
 	{	/* S-star */
 		.pvr_mask		= 0xffff0000,
@@ -130,6 +136,7 @@
 		.num_pmcs		= 8,
 		.cpu_setup		= __setup_cpu_power3,
 		.oprofile_cpu_type	= "ppc64/rs64",
+		.oprofile_model		= &op_model_rs64,
 	},
 	{	/* Power4 */
 		.pvr_mask		= 0xffff0000,
@@ -144,6 +151,7 @@
 		.num_pmcs		= 8,
 		.cpu_setup		= __setup_cpu_power4,
 		.oprofile_cpu_type	= "ppc64/power4",
+		.oprofile_model		= &op_model_rs64,
 	},
 	{	/* Power4+ */
 		.pvr_mask		= 0xffff0000,
@@ -158,6 +166,7 @@
 		.num_pmcs		= 8,
 		.cpu_setup		= __setup_cpu_power4,
 		.oprofile_cpu_type	= "ppc64/power4",
+		.oprofile_model		= &op_model_power4,
 	},
 	{	/* PPC970 */
 		.pvr_mask		= 0xffff0000,
@@ -174,6 +183,7 @@
 		.num_pmcs		= 8,
 		.cpu_setup		= __setup_cpu_ppc970,
 		.oprofile_cpu_type	= "ppc64/970",
+		.oprofile_model		= &op_model_power4,
 	},
 	{	/* PPC970FX */
 		.pvr_mask		= 0xffff0000,
@@ -190,6 +200,7 @@
 		.num_pmcs		= 8,
 		.cpu_setup		= __setup_cpu_ppc970,
 		.oprofile_cpu_type	= "ppc64/970",
+		.oprofile_model		= &op_model_power4,
 	},
 	{	/* PPC970MP */
 		.pvr_mask		= 0xffff0000,
@@ -205,6 +216,7 @@
 		.dcache_bsize		= 128,
 		.cpu_setup		= __setup_cpu_ppc970,
 		.oprofile_cpu_type	= "ppc64/970",
+		.oprofile_model		= &op_model_power4,
 	},
 	{	/* Power5 */
 		.pvr_mask		= 0xffff0000,
@@ -221,6 +233,7 @@
 		.num_pmcs		= 6,
 		.cpu_setup		= __setup_cpu_power4,
 		.oprofile_cpu_type	= "ppc64/power5",
+		.oprofile_model		= &op_model_power4,
 	},
 	{	/* Power5 */
 		.pvr_mask		= 0xffff0000,
@@ -237,6 +250,7 @@
 		.num_pmcs		= 6,
 		.cpu_setup		= __setup_cpu_power4,
 		.oprofile_cpu_type	= "ppc64/power5",
+		.oprofile_model		= &op_model_power4,
 	},
 	{	/* BE DD1.x */
 		.pvr_mask		= 0xffff0000,
Index: build/arch/ppc64/oprofile/common.c
===================================================================
--- build.orig/arch/ppc64/oprofile/common.c	2005-09-05 21:13:10.000000000 +1000
+++ build/arch/ppc64/oprofile/common.c	2005-09-05 21:15:14.000000000 +1000
@@ -121,45 +121,13 @@
 
 int __init oprofile_arch_init(struct oprofile_operations *ops)
 {
-	unsigned int pvr;
+	if (!cur_cpu_spec->oprofile_model || !cur_cpu_spec->oprofile_cpu_type)
+		return -ENODEV;
 
-	pvr = mfspr(SPRN_PVR);
-
-	switch (PVR_VER(pvr)) {
-		case PV_630:
-		case PV_630p:
-			model = &op_model_rs64;
-			break;
-
-		case PV_NORTHSTAR:
-		case PV_PULSAR:
-		case PV_ICESTAR:
-		case PV_SSTAR:
-			model = &op_model_rs64;
-			break;
-
-		case PV_POWER4:
-		case PV_POWER4p:
-			model = &op_model_power4;
-			break;
-
-		case PV_970:
-		case PV_970FX:
-		case PV_970MP:
-			model = &op_model_power4;
-			break;
-
-		case PV_POWER5:
-		case PV_POWER5p:
-			model = &op_model_power4;
-			break;
-
-		default:
-			return -ENODEV;
-	}
+	model = cur_cpu_spec->oprofile_model;
+	model->num_counters = cur_cpu_spec->num_pmcs;
 
 	ops->cpu_type = cur_cpu_spec->oprofile_cpu_type;
-	model->num_counters = cur_cpu_spec->num_pmcs;
 	ops->create_files = op_ppc64_create_files;
 	ops->setup = op_ppc64_setup;
 	ops->shutdown = op_ppc64_shutdown;
Index: build/include/asm-ppc64/cputable.h
===================================================================
--- build.orig/include/asm-ppc64/cputable.h	2005-09-05 21:10:53.000000000 +1000
+++ build/include/asm-ppc64/cputable.h	2005-09-05 21:13:51.000000000 +1000
@@ -36,6 +36,7 @@
  * via the mkdefs mechanism.
  */
 struct cpu_spec;
+struct op_ppc64_model;
 
 typedef	void (*cpu_setup_t)(unsigned long offset, struct cpu_spec* spec);
 
@@ -62,6 +63,9 @@
 
 	/* Used by oprofile userspace to select the right counters */
 	char		*oprofile_cpu_type;
+
+	/* Processor specific oprofile operations */
+	struct op_ppc64_model *oprofile_model;
 };
 
 extern struct cpu_spec		cpu_specs[];



More information about the Linuxppc64-dev mailing list