Trec's are initialized early in main.c and then dump trec's in die(), panic() and do_page_fault().
Signed-off-by: Wink Saville <[EMAIL PROTECTED]> --- arch/x86_64/kernel/traps.c | 5 +++++ arch/x86_64/mm/fault.c | 6 ++++++ init/main.c | 4 ++++ kernel/panic.c | 5 +++++ 4 files changed, 20 insertions(+), 0 deletions(-) diff --git a/arch/x86_64/kernel/traps.c b/arch/x86_64/kernel/traps.c index 09d2e8a..b4f1a36 100644 --- a/arch/x86_64/kernel/traps.c +++ b/arch/x86_64/kernel/traps.c @@ -32,6 +32,7 @@ #include <linux/unwind.h> #include <linux/uaccess.h> #include <linux/bug.h> +#include <linux/trec.h> #include <asm/system.h> #include <asm/io.h> @@ -547,9 +548,13 @@ void die(const char * str, struct pt_regs * regs, long err) { unsigned long flags = oops_begin(); + trec_snapshot(); + if (!user_mode(regs)) report_bug(regs->rip); + trec_print_snapshot(); + __die(str, regs, err); oops_end(flags); do_exit(SIGSEGV); diff --git a/arch/x86_64/mm/fault.c b/arch/x86_64/mm/fault.c index 6ada723..e92f6bc 100644 --- a/arch/x86_64/mm/fault.c +++ b/arch/x86_64/mm/fault.c @@ -24,6 +24,7 @@ #include <linux/module.h> #include <linux/kprobes.h> #include <linux/uaccess.h> +#include <linux/trec.h> #include <asm/system.h> #include <asm/pgalloc.h> @@ -535,6 +536,8 @@ no_context: flags = oops_begin(); + trec_snapshot(); + if (address < PAGE_SIZE) printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference"); else @@ -548,6 +551,9 @@ no_context: __die("Oops", regs, error_code); /* Executive summary in case the body of the oops scrolled away */ printk(KERN_EMERG "CR2: %016lx\n", address); + + trec_print_snapshot(); + oops_end(flags); do_exit(SIGKILL); diff --git a/init/main.c b/init/main.c index a92989e..46bc440 100644 --- a/init/main.c +++ b/init/main.c @@ -54,6 +54,7 @@ #include <linux/lockdep.h> #include <linux/pid_namespace.h> #include <linux/device.h> +#include <linux/trec.h> #include <asm/io.h> #include <asm/bugs.h> @@ -517,6 +518,9 @@ asmlinkage void __init start_kernel(void) early_boot_irqs_off(); early_init_irq_lock_class(); + trec_init(); + TREC0(); + /* * Interrupts are still disabled. Do necessary setups, then * enable them diff --git a/kernel/panic.c b/kernel/panic.c index 623d182..52812f2 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -19,6 +19,7 @@ #include <linux/nmi.h> #include <linux/kexec.h> #include <linux/debug_locks.h> +#include <linux/trec.h> int panic_on_oops; int tainted; @@ -66,6 +67,8 @@ NORET_TYPE void panic(const char * fmt, ...) unsigned long caller = (unsigned long) __builtin_return_address(0); #endif + trec_snapshot(); + /* * It's possible to come here directly from a panic-assertion and not * have preempt disabled. Some functions called from here want @@ -96,6 +99,8 @@ NORET_TYPE void panic(const char * fmt, ...) smp_send_stop(); #endif + trec_print_snapshot(); + atomic_notifier_call_chain(&panic_notifier_list, 0, buf); if (!panic_blink) -- 1.5.0.rc2 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/