From 0bbefb72ab7794c62ea2b63a17fc76a5f56f6765 Mon Sep 17 00:00:00 2001 From: yamt Date: Wed, 11 Mar 2009 13:48:47 +0000 Subject: [PATCH] fix breakage where db_regs_t != trapframe. the problem pointed out by Martin Husemann on tech-kern@. --- sys/arch/x86/x86/tprof_pmi.c | 16 +++++++++++----- sys/dev/tprof/tprof.c | 10 ++++------ sys/dev/tprof/tprof.h | 11 +++++++---- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/sys/arch/x86/x86/tprof_pmi.c b/sys/arch/x86/x86/tprof_pmi.c index d82a3c601194..3aa37aac6421 100644 --- a/sys/arch/x86/x86/tprof_pmi.c +++ b/sys/arch/x86/x86/tprof_pmi.c @@ -1,4 +1,4 @@ -/* $NetBSD: tprof_pmi.c,v 1.5 2009/03/10 14:45:02 yamt Exp $ */ +/* $NetBSD: tprof_pmi.c,v 1.6 2009/03/11 13:48:47 yamt Exp $ */ /*- * Copyright (c)2008,2009 YAMAMOTO Takashi, @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: tprof_pmi.c,v 1.5 2009/03/10 14:45:02 yamt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tprof_pmi.c,v 1.6 2009/03/11 13:48:47 yamt Exp $"); #include #include @@ -42,9 +42,9 @@ __KERNEL_RCSID(0, "$NetBSD: tprof_pmi.c,v 1.5 2009/03/10 14:45:02 yamt Exp $"); #include #include -#include /* PC_REGS */ -#include /* cpu_vendor */ +#include #include /* CPUVENDER_* */ +#include /* cpu_vendor */ #include #include @@ -163,6 +163,7 @@ tprof_pmi_nmi(const struct trapframe *tf, void *dummy) const struct msrs *msr; uint32_t pcint; uint64_t cccr; + tprof_frame_info_t tfi; KASSERT(dummy == NULL); @@ -180,7 +181,12 @@ tprof_pmi_nmi(const struct trapframe *tf, void *dummy) } /* record a sample */ - tprof_sample(tprof_cookie, tf); +#if defined(amd64) + tfi.tfi_pc = tf->tf_rip; +#else /* defined(amd64) */ + tfi.tfi_pc = tf->tf_eip; +#endif /* defined(amd64) */ + tprof_sample(tprof_cookie, &tfi); /* reset counter */ wrmsr(msr->msr_counter, counter_reset_val); diff --git a/sys/dev/tprof/tprof.c b/sys/dev/tprof/tprof.c index 8c704c78bf5e..1562c2e2c174 100644 --- a/sys/dev/tprof/tprof.c +++ b/sys/dev/tprof/tprof.c @@ -1,4 +1,4 @@ -/* $NetBSD: tprof.c,v 1.4 2009/03/10 14:45:02 yamt Exp $ */ +/* $NetBSD: tprof.c,v 1.5 2009/03/11 13:48:47 yamt Exp $ */ /*- * Copyright (c)2008,2009 YAMAMOTO Takashi, @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: tprof.c,v 1.4 2009/03/10 14:45:02 yamt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tprof.c,v 1.5 2009/03/11 13:48:47 yamt Exp $"); #include #include @@ -44,8 +44,6 @@ __KERNEL_RCSID(0, "$NetBSD: tprof.c,v 1.4 2009/03/10 14:45:02 yamt Exp $"); #include #include -#include /* PC_REGS */ - /* * locking order: * tprof_reader_lock -> tprof_lock @@ -405,11 +403,11 @@ tprof_backend_lookup(const char *name) */ void -tprof_sample(tprof_backend_cookie_t *cookie, const struct trapframe *tf) +tprof_sample(tprof_backend_cookie_t *cookie, const tprof_frame_info_t *tfi) { tprof_cpu_t * const c = tprof_curcpu(); tprof_buf_t * const buf = c->c_buf; - const uintptr_t pc = PC_REGS(tf); + const uintptr_t pc = tfi->tfi_pc; u_int idx; idx = buf->b_used; diff --git a/sys/dev/tprof/tprof.h b/sys/dev/tprof/tprof.h index 9d2784dd7358..038f8be44467 100644 --- a/sys/dev/tprof/tprof.h +++ b/sys/dev/tprof/tprof.h @@ -1,4 +1,4 @@ -/* $NetBSD: tprof.h,v 1.2 2009/03/10 14:45:02 yamt Exp $ */ +/* $NetBSD: tprof.h,v 1.3 2009/03/11 13:48:47 yamt Exp $ */ /*- * Copyright (c)2008,2009 YAMAMOTO Takashi, @@ -37,11 +37,14 @@ typedef struct tprof_backend_ops { void (*tbo_stop)(tprof_backend_cookie_t *); } tprof_backend_ops_t; -#define TPROF_BACKEND_VERSION 1 +#define TPROF_BACKEND_VERSION 2 int tprof_backend_register(const char *, const tprof_backend_ops_t *, int); int tprof_backend_unregister(const char *); -struct trapframe; -void tprof_sample(tprof_backend_cookie_t *, const struct trapframe *); +typedef struct { + uintptr_t tfi_pc; +} tprof_frame_info_t; + +void tprof_sample(tprof_backend_cookie_t *, const tprof_frame_info_t *); #endif /* _DEV_TPROF_TPROF_H_ */