|
@@ -356,14 +356,11 @@ static void exit_sysfs(void)
|
|
#define exit_sysfs() do { } while (0)
|
|
#define exit_sysfs() do { } while (0)
|
|
#endif /* CONFIG_PM */
|
|
#endif /* CONFIG_PM */
|
|
|
|
|
|
-static int p4force;
|
|
|
|
-module_param(p4force, int, 0);
|
|
|
|
-
|
|
|
|
static int __init p4_init(char **cpu_type)
|
|
static int __init p4_init(char **cpu_type)
|
|
{
|
|
{
|
|
__u8 cpu_model = boot_cpu_data.x86_model;
|
|
__u8 cpu_model = boot_cpu_data.x86_model;
|
|
|
|
|
|
- if (!p4force && (cpu_model > 6 || cpu_model == 5))
|
|
|
|
|
|
+ if (cpu_model > 6 || cpu_model == 5)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
#ifndef CONFIG_SMP
|
|
#ifndef CONFIG_SMP
|
|
@@ -389,10 +386,25 @@ static int __init p4_init(char **cpu_type)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int force_arch_perfmon;
|
|
|
|
+static int force_cpu_type(const char *str, struct kernel_param *kp)
|
|
|
|
+{
|
|
|
|
+ if (!strcmp(str, "archperfmon")) {
|
|
|
|
+ force_arch_perfmon = 1;
|
|
|
|
+ printk(KERN_INFO "oprofile: forcing architectural perfmon\n");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+module_param_call(cpu_type, force_cpu_type, NULL, NULL, 0);
|
|
|
|
+
|
|
static int __init ppro_init(char **cpu_type)
|
|
static int __init ppro_init(char **cpu_type)
|
|
{
|
|
{
|
|
__u8 cpu_model = boot_cpu_data.x86_model;
|
|
__u8 cpu_model = boot_cpu_data.x86_model;
|
|
|
|
|
|
|
|
+ if (force_arch_perfmon && cpu_has_arch_perfmon)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
switch (cpu_model) {
|
|
switch (cpu_model) {
|
|
case 0 ... 2:
|
|
case 0 ... 2:
|
|
*cpu_type = "i386/ppro";
|
|
*cpu_type = "i386/ppro";
|
|
@@ -414,6 +426,13 @@ static int __init ppro_init(char **cpu_type)
|
|
case 15: case 23:
|
|
case 15: case 23:
|
|
*cpu_type = "i386/core_2";
|
|
*cpu_type = "i386/core_2";
|
|
break;
|
|
break;
|
|
|
|
+ case 26:
|
|
|
|
+ arch_perfmon_setup_counters();
|
|
|
|
+ *cpu_type = "i386/core_i7";
|
|
|
|
+ break;
|
|
|
|
+ case 28:
|
|
|
|
+ *cpu_type = "i386/atom";
|
|
|
|
+ break;
|
|
default:
|
|
default:
|
|
/* Unknown */
|
|
/* Unknown */
|
|
return 0;
|
|
return 0;
|