diff options
author | Atsushi Nemoto <anemo@mba.ocn.ne.jp> | 2007-07-07 10:21:49 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2007-07-10 12:33:04 -0400 |
commit | 83fd38cabc982db041d3586a15734713f45caa31 (patch) | |
tree | 8d26cf57da12566d291810e6e66127f851ed7425 /arch | |
parent | 6312e0ee45236b6882cd26b2ccc167b1b91646fc (diff) |
[MIPS] Add debugfs files to show fpuemu statistics
Export contents of struct mips_fpu_emulator_stats via debugfs.
There is no way to read these statistics for now but they (at least
the "emulated" count) might be sometimes useful for performance tuning
on FPU-less CPUs.
Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/mips/math-emu/cp1emu.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c index 80531b35cd61..d7f05b0abe17 100644 --- a/arch/mips/math-emu/cp1emu.c +++ b/arch/mips/math-emu/cp1emu.c | |||
@@ -35,6 +35,7 @@ | |||
35 | * better performance by compiling with -msoft-float! | 35 | * better performance by compiling with -msoft-float! |
36 | */ | 36 | */ |
37 | #include <linux/sched.h> | 37 | #include <linux/sched.h> |
38 | #include <linux/debugfs.h> | ||
38 | 39 | ||
39 | #include <asm/inst.h> | 40 | #include <asm/inst.h> |
40 | #include <asm/bootinfo.h> | 41 | #include <asm/bootinfo.h> |
@@ -1277,3 +1278,36 @@ int fpu_emulator_cop1Handler(struct pt_regs *xcp, struct mips_fpu_struct *ctx, | |||
1277 | 1278 | ||
1278 | return sig; | 1279 | return sig; |
1279 | } | 1280 | } |
1281 | |||
1282 | #ifdef CONFIG_DEBUG_FS | ||
1283 | extern struct dentry *mips_debugfs_dir; | ||
1284 | static int __init debugfs_fpuemu(void) | ||
1285 | { | ||
1286 | struct dentry *d, *dir; | ||
1287 | int i; | ||
1288 | static struct { | ||
1289 | const char *name; | ||
1290 | unsigned int *v; | ||
1291 | } vars[] __initdata = { | ||
1292 | { "emulated", &fpuemustats.emulated }, | ||
1293 | { "loads", &fpuemustats.loads }, | ||
1294 | { "stores", &fpuemustats.stores }, | ||
1295 | { "cp1ops", &fpuemustats.cp1ops }, | ||
1296 | { "cp1xops", &fpuemustats.cp1xops }, | ||
1297 | { "errors", &fpuemustats.errors }, | ||
1298 | }; | ||
1299 | |||
1300 | if (!mips_debugfs_dir) | ||
1301 | return -ENODEV; | ||
1302 | dir = debugfs_create_dir("fpuemustats", mips_debugfs_dir); | ||
1303 | if (IS_ERR(dir)) | ||
1304 | return PTR_ERR(dir); | ||
1305 | for (i = 0; i < ARRAY_SIZE(vars); i++) { | ||
1306 | d = debugfs_create_u32(vars[i].name, S_IRUGO, dir, vars[i].v); | ||
1307 | if (IS_ERR(d)) | ||
1308 | return PTR_ERR(d); | ||
1309 | } | ||
1310 | return 0; | ||
1311 | } | ||
1312 | __initcall(debugfs_fpuemu); | ||
1313 | #endif | ||