[PATCH] remove for_each_cpu()
[linux-2.6.git] / arch / powerpc / oprofile / common.c
index a370778..27ad56b 100644 (file)
@@ -22,6 +22,7 @@
 #include <asm/pmc.h>
 #include <asm/cputable.h>
 #include <asm/oprofile_impl.h>
+#include <asm/firmware.h>
 
 static struct op_powerpc_model *model;
 
@@ -117,27 +118,44 @@ static int op_powerpc_create_files(struct super_block *sb, struct dentry *root)
 
        oprofilefs_create_ulong(sb, root, "enable_kernel", &sys.enable_kernel);
        oprofilefs_create_ulong(sb, root, "enable_user", &sys.enable_user);
-#ifdef CONFIG_PPC64
-       oprofilefs_create_ulong(sb, root, "backtrace_spinlocks",
-                               &sys.backtrace_spinlocks);
-#endif
 
        /* Default to tracing both kernel and user */
        sys.enable_kernel = 1;
        sys.enable_user = 1;
-#ifdef CONFIG_PPC64
-       /* Turn on backtracing through spinlocks by default */
-       sys.backtrace_spinlocks = 1;
-#endif
 
        return 0;
 }
 
 int __init oprofile_arch_init(struct oprofile_operations *ops)
 {
-       if (!cur_cpu_spec->oprofile_model || !cur_cpu_spec->oprofile_cpu_type)
+       if (!cur_cpu_spec->oprofile_cpu_type)
+               return -ENODEV;
+
+       if (firmware_has_feature(FW_FEATURE_ISERIES))
                return -ENODEV;
-       model = cur_cpu_spec->oprofile_model;
+
+       switch (cur_cpu_spec->oprofile_type) {
+#ifdef CONFIG_PPC64
+               case PPC_OPROFILE_RS64:
+                       model = &op_model_rs64;
+                       break;
+               case PPC_OPROFILE_POWER4:
+                       model = &op_model_power4;
+                       break;
+#else
+               case PPC_OPROFILE_G4:
+                       model = &op_model_7450;
+                       break;
+#endif
+#ifdef CONFIG_FSL_BOOKE
+               case PPC_OPROFILE_BOOKE:
+                       model = &op_model_fsl_booke;
+                       break;
+#endif
+               default:
+                       return -ENODEV;
+       }
+
        model->num_counters = cur_cpu_spec->num_pmcs;
 
        ops->cpu_type = cur_cpu_spec->oprofile_cpu_type;
@@ -146,8 +164,9 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
        ops->shutdown = op_powerpc_shutdown;
        ops->start = op_powerpc_start;
        ops->stop = op_powerpc_stop;
+       ops->backtrace = op_powerpc_backtrace;
 
-       printk(KERN_INFO "oprofile: using %s performance monitoring.\n",
+       printk(KERN_DEBUG "oprofile: using %s performance monitoring.\n",
               ops->cpu_type);
 
        return 0;