diff options
author | fabient <fabient@FreeBSD.org> | 2012-05-23 13:23:40 +0000 |
---|---|---|
committer | fabient <fabient@FreeBSD.org> | 2012-05-23 13:23:40 +0000 |
commit | be5bfc030892300b830d9ec66dedf914f18f7c56 (patch) | |
tree | 2a58b21b51fcdbd56f399d0d54582aff8004ba40 /sys/dev/hwpmc/hwpmc_arm.c | |
parent | ea96526248e89c13c464597f4973614e622c1e5c (diff) | |
download | FreeBSD-src-be5bfc030892300b830d9ec66dedf914f18f7c56.zip FreeBSD-src-be5bfc030892300b830d9ec66dedf914f18f7c56.tar.gz |
Soft PMC support for ARM.
Callgraph is not captured, only current location.
Sample system wide profiling: "pmcstat -Sclock.hard -T"
Diffstat (limited to 'sys/dev/hwpmc/hwpmc_arm.c')
-rw-r--r-- | sys/dev/hwpmc/hwpmc_arm.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/sys/dev/hwpmc/hwpmc_arm.c b/sys/dev/hwpmc/hwpmc_arm.c index 86cfaf3..fc76165 100644 --- a/sys/dev/hwpmc/hwpmc_arm.c +++ b/sys/dev/hwpmc/hwpmc_arm.c @@ -38,38 +38,47 @@ __FBSDID("$FreeBSD$"); struct pmc_mdep * pmc_md_initialize() { +#ifdef CPU_XSCALE_IXP425 if (cpu_class == CPU_CLASS_XSCALE) return pmc_xscale_initialize(); else +#endif return NULL; } void pmc_md_finalize(struct pmc_mdep *md) { +#ifdef CPU_XSCALE_IXP425 if (cpu_class == CPU_CLASS_XSCALE) pmc_xscale_finalize(md); else KASSERT(0, ("[arm,%d] Unknown CPU Class 0x%x", __LINE__, cpu_class)); +#endif +} + +static int +pmc_save_callchain(uintptr_t *cc, int maxsamples, + struct trapframe *tf) +{ + + *cc = PMC_TRAPFRAME_TO_PC(tf); + return (1); } int pmc_save_kernel_callchain(uintptr_t *cc, int maxsamples, struct trapframe *tf) { - (void) cc; - (void) maxsamples; - (void) tf; - return (0); + + return pmc_save_callchain(cc, maxsamples, tf); } int pmc_save_user_callchain(uintptr_t *cc, int maxsamples, struct trapframe *tf) { - (void) cc; - (void) maxsamples; - (void) tf; - return (0); + + return pmc_save_callchain(cc, maxsamples, tf); } |