diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2005-02-07 05:54:29 +0300 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2005-10-29 22:30:27 +0400 |
commit | 54176736f734ca3a1f27416d8e5804981a627076 (patch) | |
tree | c304751efa231b2bb8a81eca4f399c122f3cf9fe /arch/mips/oprofile/common.c | |
parent | 29c4869946f9182f5d5f76502ac5a4a71b3b3e62 (diff) | |
download | linux-54176736f734ca3a1f27416d8e5804981a627076.tar.xz |
More oprofile bits for MIPS32-style performance counters. The code to
bolt this into the actual hardware interrupt is yet missing from this
commit.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
FEXPORT(ret_from_fork)
Diffstat (limited to 'arch/mips/oprofile/common.c')
-rw-r--r-- | arch/mips/oprofile/common.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/arch/mips/oprofile/common.c b/arch/mips/oprofile/common.c index ab65ce3d471a..dd2cc42f1b6d 100644 --- a/arch/mips/oprofile/common.c +++ b/arch/mips/oprofile/common.c @@ -3,7 +3,8 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * - * Copyright (C) 2004 by Ralf Baechle + * Copyright (C) 2004, 2005 Ralf Baechle + * Copyright (C) 2005 MIPS Technologies, Inc. */ #include <linux/errno.h> #include <linux/init.h> @@ -45,10 +46,10 @@ static int op_mips_create_files(struct super_block * sb, struct dentry * root) oprofilefs_create_ulong(sb, dir, "enabled", &ctr[i].enabled); oprofilefs_create_ulong(sb, dir, "event", &ctr[i].event); oprofilefs_create_ulong(sb, dir, "count", &ctr[i].count); - /* Dummies. */ oprofilefs_create_ulong(sb, dir, "kernel", &ctr[i].kernel); oprofilefs_create_ulong(sb, dir, "user", &ctr[i].user); oprofilefs_create_ulong(sb, dir, "exl", &ctr[i].exl); + /* Dummy. */ oprofilefs_create_ulong(sb, dir, "unit_mask", &ctr[i].unit_mask); } @@ -68,9 +69,10 @@ static void op_mips_stop(void) on_each_cpu(model->cpu_stop, NULL, 0, 1); } -void __init oprofile_arch_init(struct oprofile_operations *ops) +int __init oprofile_arch_init(struct oprofile_operations *ops) { struct op_mips_model *lmodel = NULL; + int res; switch (current_cpu_data.cputype) { case CPU_24K: @@ -83,21 +85,25 @@ void __init oprofile_arch_init(struct oprofile_operations *ops) }; if (!lmodel) - return; + return -ENODEV; - if (lmodel->init()) - return; + res = lmodel->init(); + if (res) + return res; model = lmodel; - ops->create_files = op_mips_create_files; - ops->setup = op_mips_setup; - ops->start = op_mips_start; - ops->stop = op_mips_stop; - ops->cpu_type = lmodel->cpu_type; + ops->create_files = op_mips_create_files; + ops->setup = op_mips_setup; + //ops->shutdown = op_mips_shutdown; + ops->start = op_mips_start; + ops->stop = op_mips_stop; + ops->cpu_type = lmodel->cpu_type; printk(KERN_INFO "oprofile: using %s performance monitoring.\n", lmodel->cpu_type); + + return 0; } void oprofile_arch_exit(void) |