From mboxrd@z Thu Jan 1 00:00:00 1970 From: zhaolei@cn.fujitsu.com (Zhaolei) Date: Thu, 19 Feb 2009 17:24:59 +0800 Subject: [ltt-dev] [PATCH v4 1/2] add tracepoints for panic and kexec event In-Reply-To: <499D24ED.2050100@cn.fujitsu.com> References: <499D24ED.2050100@cn.fujitsu.com> Message-ID: <499D256B.7000901@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 8a6d7b0..5c6d9e4 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -38,6 +39,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. @@ -1430,6 +1436,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 2a2ff36..66092cb 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -22,6 +22,9 @@ #include #include #include +#include + +DEFINE_TRACE(kernel_panic); int panic_on_oops; static unsigned long tainted_mask; @@ -62,6 +65,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