tree 55158562dbbe4a9e16f9f5e600c2b7fcee21d38b
parent dca859329cee9b4cf02c8b7cb805b49973292ed2
author Anton Blanchard <[EMAIL PROTECTED]> Tue, 06 Sep 2005 14:57:52 +1000
committer Paul Mackerras <[EMAIL PROTECTED]> Tue, 06 Sep 2005 16:09:21 +1000

[PATCH] ppc64: Move oprofile_model into cpu feature struct

Move oprofile_model into cpu feature struct.

Signed-off-by: Anton Blanchard <[EMAIL PROTECTED]>
Signed-off-by: Paul Mackerras <[EMAIL PROTECTED]>

 arch/ppc64/kernel/cputable.c |   14 ++++++++++++++
 arch/ppc64/oprofile/common.c |   40 ++++------------------------------------
 include/asm-ppc64/cputable.h |    4 ++++
 3 files changed, 22 insertions(+), 36 deletions(-)

diff --git a/arch/ppc64/kernel/cputable.c b/arch/ppc64/kernel/cputable.c
--- a/arch/ppc64/kernel/cputable.c
+++ b/arch/ppc64/kernel/cputable.c
@@ -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 @@ struct cpu_spec       cpu_specs[] = {
                .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 @@ struct cpu_spec       cpu_specs[] = {
                .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 @@ struct cpu_spec       cpu_specs[] = {
                .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 @@ struct cpu_spec     cpu_specs[] = {
                .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 @@ struct cpu_spec     cpu_specs[] = {
                .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 @@ struct cpu_spec     cpu_specs[] = {
                .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 @@ struct cpu_spec     cpu_specs[] = {
                .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 @@ struct cpu_spec     cpu_specs[] = {
                .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 @@ struct cpu_spec     cpu_specs[] = {
                .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 @@ struct cpu_spec     cpu_specs[] = {
                .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 @@ struct cpu_spec     cpu_specs[] = {
                .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 @@ struct cpu_spec     cpu_specs[] = {
                .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 @@ struct cpu_spec     cpu_specs[] = {
                .num_pmcs               = 6,
                .cpu_setup              = __setup_cpu_power4,
                .oprofile_cpu_type      = "ppc64/power5",
+               .oprofile_model         = &op_model_power4,
        },
        {       /* BE DD1.x */
                .pvr_mask               = 0xffff0000,
diff --git a/arch/ppc64/oprofile/common.c b/arch/ppc64/oprofile/common.c
--- a/arch/ppc64/oprofile/common.c
+++ b/arch/ppc64/oprofile/common.c
@@ -121,45 +121,13 @@ static int op_ppc64_create_files(struct 
 
 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;
diff --git a/include/asm-ppc64/cputable.h b/include/asm-ppc64/cputable.h
--- a/include/asm-ppc64/cputable.h
+++ b/include/asm-ppc64/cputable.h
@@ -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 @@ struct cpu_spec {
 
        /* 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[];
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to