From mboxrd@z Thu Jan 1 00:00:00 1970 From: zhaolei@cn.fujitsu.com (Zhaolei) Date: Thu, 18 Dec 2008 13:38:57 +0800 Subject: [ltt-dev] [PATCH v2] add tracepoints of panic and kexec In-Reply-To: <4949E1C3.7000308@cn.fujitsu.com> References: <4949BD17.2000704@cn.fujitsu.com> <4949BD46.3020806@cn.fujitsu.com> <20081218041402.GA21563@Krystal> <4949E1C3.7000308@cn.fujitsu.com> Message-ID: <4949E1F1.7020505@cn.fujitsu.com> Instrumentation of following panic and kexec related events are added: panic kernel_kexec crash_kexec It is useful for build flight-recorder program based on lttng infrastructure. Signed-off-by: Zhao Lei --- include/trace/kernel.h | 10 ++++++++++ kernel/kexec.c | 8 ++++++++ kernel/panic.c | 7 +++++++ 3 files changed, 25 insertions(+), 0 deletions(-) diff --git a/include/trace/kernel.h b/include/trace/kernel.h index d2c3320..06d585f 100644 --- a/include/trace/kernel.h +++ b/include/trace/kernel.h @@ -2,6 +2,7 @@ #define _TRACE_KERNEL_H #include +#include DECLARE_TRACE(kernel_printk, TPPROTO(unsigned long retaddr), @@ -15,5 +16,14 @@ DECLARE_TRACE(kernel_module_free, DECLARE_TRACE(kernel_module_load, TPPROTO(struct module *mod), TPARGS(mod)); +DECLARE_TRACE(kernel_panic, + TPPROTO(const char *fmt, va_list args), + TPARGS(fmt, args)); +DECLARE_TRACE(kernel_kernel_kexec, + TPPROTO(struct kimage *image), + TPARGS(image)); +DECLARE_TRACE(kernel_crash_kexec, + TPPROTO(struct kimage *image, struct pt_regs *regs), + TPARGS(image, regs)); #endif diff --git a/kernel/kexec.c b/kernel/kexec.c index aef2653..56cdaac 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -37,6 +38,9 @@ #include #include +DEFINE_TRACE(kernel_kernel_kexec); +DEFINE_TRACE(kernel_crash_kexec); + /* Per cpu memory for storing cpu states in case of system crash. */ note_buf_t* crash_notes; @@ -1062,6 +1066,8 @@ asmlinkage long compat_sys_kexec_load(unsigned long entry, void crash_kexec(struct pt_regs *regs) { + trace_kernel_crash_kexec(kexec_crash_image, regs); + /* Take the kexec_mutex here to prevent sys_kexec_load * running on one cpu from replacing the crash kernel * we are using after a panic on a different cpu. @@ -1428,6 +1434,8 @@ int kernel_kexec(void) { int error = 0; + trace_kernel_kernel_kexec(kexec_image); + if (!mutex_trylock(&kexec_mutex)) return -EBUSY; if (!kexec_image) { diff --git a/kernel/panic.c b/kernel/panic.c index 12c5a0a..3fa642e 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -21,6 +21,9 @@ #include #include #include +#include + +DEFINE_TRACE(kernel_panic); int panic_on_oops; int tainted; @@ -68,6 +71,10 @@ NORET_TYPE void panic(const char * fmt, ...) unsigned long caller = (unsigned long) __builtin_return_address(0); #endif + va_start(args, fmt); + trace_kernel_panic(fmt, args); + va_end(args); + /* * It's possible to come here directly from a panic-assertion and not * have preempt disabled. Some functions called from here want -- 1.5.5.3