Re: [Fastboot] [2/2] kdump: Save trap information for later analyzis

From: Vivek Goyal
Date: Wed May 18 2005 - 07:45:31 EST


On Sat, May 14, 2005 at 10:50:00PM +0200, Alexander Nyberg wrote:
> If we are faulting in kernel it is quite possible this will lead to a
> panic. Save trap number, cr2 (in case of page fault) and error_code in
> the current thread (these fields already exist for signal delivery but
> are not used here).
>
> This helps later kdump crash analyzing from user-space (a script has
> been submitted to dig this info out in gdb).
>
> Signed-off-by: Alexander Nyberg <alexn@xxxxxxxxx>
>
> Index: mm/arch/i386/mm/fault.c
> ===================================================================
> --- mm.orig/arch/i386/mm/fault.c 2005-05-14 22:05:56.000000000 +0200
> +++ mm/arch/i386/mm/fault.c 2005-05-14 22:06:21.000000000 +0200
> @@ -469,6 +469,9 @@
> printk(KERN_ALERT "*pte = %08lx\n", page);
> }
> #endif
> + tsk->thread.cr2 = address;
> + tsk->thread.trap_no = 14;
> + tsk->thread.error_code = error_code;
> die("Oops", regs, error_code);
> bust_spinlocks(0);
> do_exit(SIGKILL);
> Index: mm/arch/i386/kernel/traps.c
> ===================================================================
> --- mm.orig/arch/i386/kernel/traps.c 2005-05-14 22:05:56.000000000 +0200
> +++ mm/arch/i386/kernel/traps.c 2005-05-14 22:06:21.000000000 +0200
> @@ -431,8 +431,11 @@
> }
>
> kernel_trap: {
> - if (!fixup_exception(regs))
> + if (!fixup_exception(regs)) {
> + current->thread.trap_no = trapnr;
> + current->thread.error_code = error_code;
> die(str, regs, error_code);
> + }
> return;
> }
>
> @@ -537,6 +540,9 @@
> }
> put_cpu();
>
> + current->thread.error_code = error_code;
> + current->thread.trap_no = 13;
> +


This assignment is being done again in case thread was running in user mode.
That can now be done away with as above code will take care of both the cases.

if (!user_mode(regs))
goto gp_in_kernel;

current->thread.error_code = error_code;
current->thread.trap_no = 13;
force_sig(SIGSEGV, current);



> if (regs->eflags & VM_MASK)
> goto gp_in_vm86;
>
> @@ -977,9 +983,9 @@
> error_code);
> return;
> }
> - die_if_kernel("cache flush denied", regs, error_code);
> current->thread.trap_no = 19;
> current->thread.error_code = error_code;
> + die_if_kernel("cache flush denied", regs, error_code);
> force_sig(SIGSEGV, current);
> }
> }
>
>

> _______________________________________________
> fastboot mailing list
> fastboot@xxxxxxxxxxxxxx
> http://lists.osdl.org/mailman/listinfo/fastboot

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/