OProfile ia64 performance counter support
PATCH 1/1 OProfile ia64 performance counter support
This patch provides support for IA64 hardware performance counters via the perfmon interface. Please consider applying.
thanks
john
Index: linux-cvs/arch/ia64/oprofile/Kconfig
=================================RCS file: /home/moz/cvs//linux-2.5/arch/ia64/oprofile/Kconfig,v retrieving revision 1.2
arch/ia64/oprofile/Kconfig +4 -0
@@ -16,6 +16,10 @@ config OPROFILE whole system, include the kernel, kernel modules, libraries, and applications. + Due to firmware bugs, you may need to use the "nohalt" boot + option if you're using OProfile with the hardware performance + counters. + If unsure, say N. endmenu
Index: linux-cvs/arch/ia64/oprofile/Makefile
=================================RCS file: /home/moz/cvs//linux-2.5/arch/ia64/oprofile/Makefile,v retrieving revision 1.2
arch/ia64/oprofile/Makefile +1 -0
@@ -7,3 +7,4 @@ DRIVER_OBJS := $(addprefix ../../../driv timer_int.o ) oprofile-y := $(DRIVER_OBJS) init.o +oprofile-$(CONFIG_PERFMON) += perfmon.o
Index: linux-cvs/arch/ia64/oprofile/init.c
=================================RCS file: /home/moz/cvs//linux-2.5/arch/ia64/oprofile/init.c,v retrieving revision 1.2
arch/ia64/oprofile/init.c +8 -1
@@ -12,14 +12,21 @@#include <linux/init.h> #include <linux/errno.h> -extern void timer_init (struct oprofile_operations ** ops); +extern int perfmon_init (struct oprofile_operations ** ops); +extern void perfmon_exit (void );int __init oprofile_arch_init (struct oprofile_operations ** ops) { +#ifdef CONFIG_PERFMON +return perfmon_init (ops); +#endif return -ENODEV ; }void oprofile_arch_exit (void ) { +#ifdef CONFIG_PERFMON +perfmon_exit (); +#endif }
Index: linux-cvs/arch/ia64/oprofile/perfmon.c =================================RCS file: linux-cvs/arch/ia64/oprofile/perfmon.c
arch/ia64/oprofile/perfmon.c new file +105 -0
105 lines not on this page · raw message
Quoted 3 lines · John Levon
This patch provides support for IA64 hardware performance counters via
the perfmon interface.
OK - I'll plop this in -mm but I'd ask Tony to do the final merge as and when it suits the ia64 team.
What's the story on userspace support for oprofile-on-ia64?
Quoted 7 lines · Andrew Morton
Quoted 2 lines
This patch provides support for IA64 hardware performance counters via
the perfmon interface.OK - I'll plop this in -mm but I'd ask Tony to do the final merge as and when it suits the ia64 team.
What's the story on userspace support for oprofile-on-ia64?
It's been merged for quite some time. Changelog indicates that it's usable starting from 0.7 onwards, but I couldn't be sure.
regards
john
I'll admit to being a bit behind (sigh) in keeping the userspace oprofile builds up-to-date, but Debian packages (i386 and ia64) and source tarballs are at:
http://free.linux.hp.com/~ahs3/oprofile
The latest I have there is 0.7.1. I hope to post 0.8 (or better) userspace tool builds in the next week or two.
Of course, CVS at SourceForge always has the latest source (http://oprofile.sf.net).
Quoted 20 lines · Andrew Morton
Quoted 3 lines · John Levon
This patch provides support for IA64 hardware performance counters via
the perfmon interface.OK - I'll plop this in -mm but I'd ask Tony to do the final merge as and when it suits the ia64 team.
What's the story on userspace support for oprofile-on-ia64?
-------------------------------------------------------
SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media 100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33 Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift.
http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285
_______________________________________________
oprofile-list mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/oprofile-list
Signature · 8 lines
Ciao, al ---------------------------------------------------------------------- Al Stone Alter Ego: Linux & Open Source Lab Debian Developer Hewlett-Packard Company http://www.debian.org E-mail: [email protected] [email protected] ----------------------------------------------------------------------
Tony,
Please apply this to the IA-64 tree. It looks good to me.
Thanks.
Quoted 180 lines · John Levon
This patch provides support for IA64 hardware performance counters via the perfmon interface. Please consider applying.
thanks
johnIndex: linux-cvs/arch/ia64/oprofile/Kconfig
=================================> RCS file:/home/moz/cvs//linux-2.5/arch/ia64/oprofile/Kconfig,vretrieving revision 1.2
diff -u -a -p -r1.2Kconfigarch/ia64/oprofile/Kconfig +4
-0@@ -16,6 +16,10 @@ config OPROFILE whole system, include the kernel, kernel modules, libraries, and applications. + Due to firmware bugs, you may need to use the "nohalt" boot + option if you're using OProfile with the hardware performance + counters. + If unsure, say N. endmenuIndex: linux-cvs/arch/ia64/oprofile/Makefile
=================================> RCS file:/home/moz/cvs//linux-2.5/arch/ia64/oprofile/Makefile,vretrieving revision 1.2
diff -u -a -p -r1.2Makefilearch/ia64/oprofile/Makefile +1
-0@@ -7,3 +7,4 @@ DRIVER_OBJS := $(addprefix ../../../driv timer_int.o ) oprofile-y := $(DRIVER_OBJS) init.o +oprofile-$(CONFIG_PERFMON) += perfmon.oIndex:
linux-cvs/arch/ia64/oprofile/init.c
=================================> RCS file:/home/moz/cvs//linux-2.5/arch/ia64/oprofile/init.c,vretrieving revision 1.2
diff -u -a -p -r1.2init.carch/ia64/oprofile/init.c +8
-1@@ -12,14 +12,21 @@#include <linux/init.h> #include <linux/errno.h> -extern void timer_init (struct oprofile_operations ** ops); +extern int perfmon_init (struct oprofile_operations ** ops); +extern void perfmon_exit (void );int __init oprofile_arch_init (struct oprofile_operations ** ops) { +#ifdef CONFIG_PERFMON +return perfmon_init (ops); +#endif return -ENODEV ; }void oprofile_arch_exit (void ) { +#ifdef CONFIG_PERFMON +perfmon_exit (); +#endif }Index:
linux-cvs/arch/ia64/oprofile/perfmon.c=================================> RCS file:linux-cvs/arch/ia64/oprofile/perfmon.cdiff -Nlinux-cvs/arch/ia64/oprofile/perfmon.carch/ia64/oprofile/perfmon.c new file +105
-1@@ -0,0 +1,105 @@ +/** +* @file perfmon.c +* +* @remark Copyright 2003 OProfile authors +* @remark Read the file COPYING +* +* @author John Levon <[email protected]> +*/ + +#include <linux/kernel.h> +#include <linux/config.h> +#include <linux/oprofile.h> +#include <linux/sched.h> +#include <asm/perfmon.h> +#include <asm/ptrace.h> +#include <asm/errno.h> + +static int allow_ints; + +static int +perfmon_handler (struct task_struct *task,void *buf,pfm_ovfl_arg_t *arg, +struct pt_regs *regs,unsigned long stamp) +{ +int cpu =smp_processor_id (); +unsigned long eip =instruction_pointer (regs); +int event = arg->pmd_eventid; + + arg->ovfl_ctrl.bits.reset_ovfl_pmds =1 ; + +/* the owner of the oprofile event buffer may have exited +* without perfmon being shutdown (e.g. SIGSEGV) +*/ +if (allow_ints) +oprofile_add_sample (eip, !user_mode (regs), event, cpu); +return 0 ; +} + + +static int perfmon_start (void ) +{ + allow_ints =1 ; +return 0 ; +} + + +static void perfmon_stop (void ) +{ + allow_ints =0 ; +} + + +#define OPROFILE_FMT_UUID { \ + 0x77, 0x7a, 0x6e, 0x61, 0x20, 0x65, 0x73, 0x69, 0x74, 0x6e, 0x72, 0x20, 0x61, 0x65, 0x0a, 0x6c } + +static pfm_buffer_fmt_t oprofile_fmt = { + .fmt_name ="oprofile_format" , + .fmt_uuid =OPROFILE_FMT_UUID , + .fmt_handler = perfmon_handler, +}; + + +static char *get_cpu_type (void ) +{ +__u8 family = local_cpu_data->family; + +switch (family) { +case 0x07 : +return "ia64/itanium" ; +case 0x1f : +return "ia64/itanium2" ; +default : +return "ia64/ia64" ; + } +} + + +/* all the ops are handled via userspace for IA64 perfmon */ +static struct oprofile_operations perfmon_ops = { + .start = perfmon_start, + .stop = perfmon_stop, +}; + +static int using_perfmon; + +int perfmon_init (struct oprofile_operations ** ops) +{ +int ret =pfm_register_buffer_fmt (&oprofile_fmt); +if (ret) +return -ENODEV ; + + perfmon_ops.cpu_type =get_cpu_type (); + *ops = &perfmon_ops; + using_perfmon =1 ; +printk (KERN_INFO "oprofile: using perfmon.\n" ); +return 0 ; +} + + +void perfmon_exit (void ) +{ +if (!using_perfmon) +return ; + +pfm_unregister_buffer_fmt (oprofile_fmt.fmt_uuid); +} -To unsubscribe from this list: send the line "unsubscribe linux-ia64" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Signature · 1 line
-Stephane