From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from verein.lst.de ([213.95.11.210]:35079 "EHLO mail.lst.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2992535AbXCWRxJ (ORCPT ); Fri, 23 Mar 2007 13:53:09 -0400 Date: Fri, 23 Mar 2007 18:52:50 +0100 From: Christoph Hellwig Subject: Re: + move-die-notifier-handling-to-common-code.patch added to -mm tree Message-ID: <20070323175250.GB12158@lst.de> References: <200703212211.l2LMB08x005006@shell0.pdx.osdl.net> <20070321221748.GD28239@flint.arm.linux.org.uk> <20070321155953.6352e29f.akpm@linux-foundation.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20070321155953.6352e29f.akpm@linux-foundation.org> Sender: linux-arch-owner@vger.kernel.org To: Andrew Morton Cc: Russell King , hch@lst.de, linux-arch@vger.kernel.org List-ID: Here's an updated version of that patch that fixes arm, tested with a netwinder config. Signed-off-by: Christoph Hellwig Index: linux-2.6/arch/arm/kernel/traps.c =================================================================== --- linux-2.6.orig/arch/arm/kernel/traps.c 2007-03-23 18:30:20.000000000 +0100 +++ linux-2.6/arch/arm/kernel/traps.c 2007-03-23 18:35:41.000000000 +0100 @@ -232,8 +232,8 @@ NORET_TYPE void die(const char *str, str do_exit(SIGSEGV); } -void notify_die(const char *str, struct pt_regs *regs, struct siginfo *info, - unsigned long err, unsigned long trap) +void arm_notify_die(const char *str, struct pt_regs *regs, + struct siginfo *info, unsigned long err, unsigned long trap) { if (user_mode(regs)) { current->thread.error_code = err; @@ -316,7 +316,7 @@ asmlinkage void do_undefinstr(struct pt_ info.si_code = ILL_ILLOPC; info.si_addr = pc; - notify_die("Oops - undefined instruction", regs, &info, 0, 6); + arm_notify_die("Oops - undefined instruction", regs, &info, 0, 6); } asmlinkage void do_unexp_fiq (struct pt_regs *regs) @@ -370,7 +370,7 @@ static int bad_syscall(int n, struct pt_ info.si_addr = (void __user *)instruction_pointer(regs) - (thumb_mode(regs) ? 2 : 4); - notify_die("Oops - bad syscall", regs, &info, n, 0); + arm_notify_die("Oops - bad syscall", regs, &info, n, 0); return regs->ARM_r0; } @@ -414,7 +414,7 @@ asmlinkage int arm_syscall(int no, struc info.si_code = SEGV_MAPERR; info.si_addr = NULL; - notify_die("branch through zero", regs, &info, 0, 0); + arm_notify_die("branch through zero", regs, &info, 0, 0); return 0; case NR(breakpoint): /* SWI BREAK_POINT */ @@ -550,7 +550,7 @@ asmlinkage int arm_syscall(int no, struc info.si_addr = (void __user *)instruction_pointer(regs) - (thumb_mode(regs) ? 2 : 4); - notify_die("Oops - bad syscall(2)", regs, &info, no, 0); + arm_notify_die("Oops - bad syscall(2)", regs, &info, no, 0); return 0; } @@ -624,7 +624,7 @@ baddataabort(int code, unsigned long ins info.si_code = ILL_ILLOPC; info.si_addr = (void __user *)addr; - notify_die("unknown data abort code", regs, &info, instr, 0); + arm_notify_die("unknown data abort code", regs, &info, instr, 0); } void __attribute__((noreturn)) __bug(const char *file, int line) Index: linux-2.6/arch/avr32/kernel/kprobes.c =================================================================== --- linux-2.6.orig/arch/avr32/kernel/kprobes.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/avr32/kernel/kprobes.c 2007-03-23 18:35:41.000000000 +0100 @@ -15,7 +15,7 @@ #include #include -#include +#include #include DEFINE_PER_CPU(struct kprobe *, current_kprobe); Index: linux-2.6/arch/avr32/kernel/ptrace.c =================================================================== --- linux-2.6.orig/arch/avr32/kernel/ptrace.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/avr32/kernel/ptrace.c 2007-03-23 18:35:41.000000000 +0100 @@ -21,7 +21,7 @@ #include #include #include -#include +#include static struct pt_regs *get_user_regs(struct task_struct *tsk) { @@ -300,7 +300,7 @@ asmlinkage void do_debug_priv(struct pt_ else die_val = DIE_BREAKPOINT; - if (notify_die(die_val, regs, 0, SIGTRAP) == NOTIFY_STOP) + if (notify_die(die_val, "ptrace", regs, 0, 0, SIGTRAP) == NOTIFY_STOP) return; if (likely(ds & DS_SSS)) { Index: linux-2.6/arch/avr32/kernel/traps.c =================================================================== --- linux-2.6.orig/arch/avr32/kernel/traps.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/avr32/kernel/traps.c 2007-03-23 18:35:41.000000000 +0100 @@ -151,22 +151,6 @@ void dump_stack(void) } EXPORT_SYMBOL(dump_stack); -ATOMIC_NOTIFIER_HEAD(avr32_die_chain); - -int register_die_notifier(struct notifier_block *nb) -{ - pr_debug("register_die_notifier: %p\n", nb); - - return atomic_notifier_chain_register(&avr32_die_chain, nb); -} -EXPORT_SYMBOL(register_die_notifier); - -int unregister_die_notifier(struct notifier_block *nb) -{ - return atomic_notifier_chain_unregister(&avr32_die_chain, nb); -} -EXPORT_SYMBOL(unregister_die_notifier); - static DEFINE_SPINLOCK(die_lock); void __die(const char *str, struct pt_regs *regs, unsigned long err, Index: linux-2.6/arch/avr32/mm/fault.c =================================================================== --- linux-2.6.orig/arch/avr32/mm/fault.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/avr32/mm/fault.c 2007-03-23 18:35:41.000000000 +0100 @@ -13,7 +13,7 @@ #include #include -#include +#include #include #include #include Index: linux-2.6/arch/i386/kernel/crash.c =================================================================== --- linux-2.6.orig/arch/i386/kernel/crash.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/i386/kernel/crash.c 2007-03-23 18:35:41.000000000 +0100 @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include Index: linux-2.6/arch/i386/kernel/kprobes.c =================================================================== --- linux-2.6.orig/arch/i386/kernel/kprobes.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/i386/kernel/kprobes.c 2007-03-23 18:35:41.000000000 +0100 @@ -31,8 +31,8 @@ #include #include #include +#include #include -#include #include #include Index: linux-2.6/arch/i386/kernel/nmi.c =================================================================== --- linux-2.6.orig/arch/i386/kernel/nmi.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/i386/kernel/nmi.c 2007-03-23 18:35:41.000000000 +0100 @@ -24,10 +24,10 @@ #include #include #include +#include #include #include -#include #include #include "mach_traps.h" Index: linux-2.6/arch/i386/kernel/traps.c =================================================================== --- linux-2.6.orig/arch/i386/kernel/traps.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/i386/kernel/traps.c 2007-03-23 18:35:41.000000000 +0100 @@ -52,7 +52,7 @@ #include #include #include -#include +#include #include #include @@ -95,20 +95,7 @@ asmlinkage void machine_check(void); int kstack_depth_to_print = 24; static unsigned int code_bytes = 64; -ATOMIC_NOTIFIER_HEAD(i386die_chain); -int register_die_notifier(struct notifier_block *nb) -{ - vmalloc_sync_all(); - return atomic_notifier_chain_register(&i386die_chain, nb); -} -EXPORT_SYMBOL(register_die_notifier); /* used modular by kdb */ - -int unregister_die_notifier(struct notifier_block *nb) -{ - return atomic_notifier_chain_unregister(&i386die_chain, nb); -} -EXPORT_SYMBOL(unregister_die_notifier); /* used modular by kdb */ static inline int valid_stack_ptr(struct thread_info *tinfo, void *p) { Index: linux-2.6/arch/i386/mm/fault.c =================================================================== --- linux-2.6.orig/arch/i386/mm/fault.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/i386/mm/fault.c 2007-03-23 18:35:41.000000000 +0100 @@ -23,10 +23,10 @@ #include #include #include +#include #include #include -#include #include extern void die(const char *,struct pt_regs *,long); Index: linux-2.6/arch/i386/oprofile/nmi_int.c =================================================================== --- linux-2.6.orig/arch/i386/oprofile/nmi_int.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/i386/oprofile/nmi_int.c 2007-03-23 18:35:41.000000000 +0100 @@ -14,10 +14,10 @@ #include #include #include +#include #include #include #include -#include #include "op_counter.h" #include "op_x86_model.h" Index: linux-2.6/arch/i386/oprofile/nmi_timer_int.c =================================================================== --- linux-2.6.orig/arch/i386/oprofile/nmi_timer_int.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/i386/oprofile/nmi_timer_int.c 2007-03-23 18:35:41.000000000 +0100 @@ -12,12 +12,11 @@ #include #include #include - +#include #include #include #include -#include static int profile_timer_exceptions_notify(struct notifier_block *self, unsigned long val, void *data) Index: linux-2.6/arch/ia64/kernel/crash.c =================================================================== --- linux-2.6.orig/arch/ia64/kernel/crash.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/ia64/kernel/crash.c 2007-03-23 18:35:41.000000000 +0100 @@ -16,8 +16,8 @@ #include #include #include +#include -#include #include int kdump_status[NR_CPUS]; Index: linux-2.6/arch/ia64/kernel/kprobes.c =================================================================== --- linux-2.6.orig/arch/ia64/kernel/kprobes.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/ia64/kernel/kprobes.c 2007-03-23 18:35:41.000000000 +0100 @@ -29,9 +29,9 @@ #include #include #include +#include #include -#include #include #include Index: linux-2.6/arch/ia64/kernel/mca.c =================================================================== --- linux-2.6.orig/arch/ia64/kernel/mca.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/ia64/kernel/mca.c 2007-03-23 18:35:41.000000000 +0100 @@ -72,9 +72,9 @@ #include #include #include +#include #include -#include #include #include #include Index: linux-2.6/arch/ia64/kernel/process.c =================================================================== --- linux-2.6.orig/arch/ia64/kernel/process.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/ia64/kernel/process.c 2007-03-23 18:35:41.000000000 +0100 @@ -27,13 +27,13 @@ #include #include #include +#include #include #include #include #include #include -#include #include #include #include Index: linux-2.6/arch/ia64/kernel/traps.c =================================================================== --- linux-2.6.orig/arch/ia64/kernel/traps.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/ia64/kernel/traps.c 2007-03-23 18:35:41.000000000 +0100 @@ -16,33 +16,17 @@ #include #include #include /* for ssleep() */ +#include #include #include #include #include #include -#include fpswa_interface_t *fpswa_interface; EXPORT_SYMBOL(fpswa_interface); -ATOMIC_NOTIFIER_HEAD(ia64die_chain); - -int -register_die_notifier(struct notifier_block *nb) -{ - return atomic_notifier_chain_register(&ia64die_chain, nb); -} -EXPORT_SYMBOL_GPL(register_die_notifier); - -int -unregister_die_notifier(struct notifier_block *nb) -{ - return atomic_notifier_chain_unregister(&ia64die_chain, nb); -} -EXPORT_SYMBOL_GPL(unregister_die_notifier); - void __init trap_init (void) { Index: linux-2.6/arch/ia64/mm/fault.c =================================================================== --- linux-2.6.orig/arch/ia64/mm/fault.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/ia64/mm/fault.c 2007-03-23 18:35:41.000000000 +0100 @@ -10,12 +10,12 @@ #include #include #include +#include #include #include #include #include -#include extern void die (char *, struct pt_regs *, long); Index: linux-2.6/arch/ia64/sn/kernel/xpc_main.c =================================================================== --- linux-2.6.orig/arch/ia64/sn/kernel/xpc_main.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/ia64/sn/kernel/xpc_main.c 2007-03-23 18:35:41.000000000 +0100 @@ -55,9 +55,9 @@ #include #include #include +#include #include #include -#include #include #include @@ -1332,7 +1332,7 @@ xpc_init(void) dev_warn(xpc_part, "can't register reboot notifier\n"); } - /* add ourselves to the die_notifier list (i.e., ia64die_chain) */ + /* add ourselves to the die_notifier list */ ret = register_die_notifier(&xpc_die_notifier); if (ret != 0) { dev_warn(xpc_part, "can't register die notifier\n"); Index: linux-2.6/arch/powerpc/kernel/kprobes.c =================================================================== --- linux-2.6.orig/arch/powerpc/kernel/kprobes.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/powerpc/kernel/kprobes.c 2007-03-23 18:35:41.000000000 +0100 @@ -30,8 +30,8 @@ #include #include #include +#include #include -#include #include #include Index: linux-2.6/arch/powerpc/kernel/traps.c =================================================================== --- linux-2.6.orig/arch/powerpc/kernel/traps.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/powerpc/kernel/traps.c 2007-03-23 18:35:41.000000000 +0100 @@ -33,8 +33,8 @@ #include #include #include +#include -#include #include #include #include @@ -72,20 +72,6 @@ EXPORT_SYMBOL(__debugger_dabr_match); EXPORT_SYMBOL(__debugger_fault_handler); #endif -ATOMIC_NOTIFIER_HEAD(powerpc_die_chain); - -int register_die_notifier(struct notifier_block *nb) -{ - return atomic_notifier_chain_register(&powerpc_die_chain, nb); -} -EXPORT_SYMBOL(register_die_notifier); - -int unregister_die_notifier(struct notifier_block *nb) -{ - return atomic_notifier_chain_unregister(&powerpc_die_chain, nb); -} -EXPORT_SYMBOL(unregister_die_notifier); - /* * Trap & Exception support */ Index: linux-2.6/arch/powerpc/mm/fault.c =================================================================== --- linux-2.6.orig/arch/powerpc/mm/fault.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/powerpc/mm/fault.c 2007-03-23 18:35:41.000000000 +0100 @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -36,7 +37,6 @@ #include #include #include -#include #include #ifdef CONFIG_KPROBES Index: linux-2.6/arch/s390/kernel/kprobes.c =================================================================== --- linux-2.6.orig/arch/s390/kernel/kprobes.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/s390/kernel/kprobes.c 2007-03-23 18:35:41.000000000 +0100 @@ -24,8 +24,8 @@ #include #include #include +#include #include -#include #include #include #include Index: linux-2.6/arch/s390/kernel/traps.c =================================================================== --- linux-2.6.orig/arch/s390/kernel/traps.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/s390/kernel/traps.c 2007-03-23 18:35:41.000000000 +0100 @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -40,7 +41,6 @@ #include #include #include -#include /* Called from entry.S only */ extern void handle_per_exception(struct pt_regs *regs); @@ -70,20 +70,6 @@ static int kstack_depth_to_print = 12; static int kstack_depth_to_print = 20; #endif /* CONFIG_64BIT */ -ATOMIC_NOTIFIER_HEAD(s390die_chain); - -int register_die_notifier(struct notifier_block *nb) -{ - return atomic_notifier_chain_register(&s390die_chain, nb); -} -EXPORT_SYMBOL(register_die_notifier); - -int unregister_die_notifier(struct notifier_block *nb) -{ - return atomic_notifier_chain_unregister(&s390die_chain, nb); -} -EXPORT_SYMBOL(unregister_die_notifier); - /* * For show_trace we have tree different stack to consider: * - the panic stack which is used if the kernel stack has overflown Index: linux-2.6/arch/s390/mm/fault.c =================================================================== --- linux-2.6.orig/arch/s390/mm/fault.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/s390/mm/fault.c 2007-03-23 18:35:41.000000000 +0100 @@ -26,11 +26,11 @@ #include #include #include +#include #include #include #include -#include #include #ifndef CONFIG_64BIT Index: linux-2.6/arch/sparc/kernel/head.S =================================================================== --- linux-2.6.orig/arch/sparc/kernel/head.S 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/sparc/kernel/head.S 2007-03-23 18:35:41.000000000 +0100 @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include #include /* TI_UWINMASK */ #include Index: linux-2.6/arch/sparc/kernel/setup.c =================================================================== --- linux-2.6.orig/arch/sparc/kernel/setup.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/sparc/kernel/setup.c 2007-03-23 18:35:41.000000000 +0100 @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -40,7 +41,6 @@ #include #include #include -#include #include #include #include Index: linux-2.6/arch/sparc/kernel/traps.c =================================================================== --- linux-2.6.orig/arch/sparc/kernel/traps.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/sparc/kernel/traps.c 2007-03-23 18:35:41.000000000 +0100 @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -22,7 +23,6 @@ #include #include #include -#include #include #include Index: linux-2.6/arch/sparc/mm/fault.c =================================================================== --- linux-2.6.orig/arch/sparc/mm/fault.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/sparc/mm/fault.c 2007-03-23 18:35:41.000000000 +0100 @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -30,7 +31,6 @@ #include #include #include -#include #include extern int prom_node_root; Index: linux-2.6/arch/sparc/mm/srmmu.c =================================================================== --- linux-2.6.orig/arch/sparc/mm/srmmu.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/sparc/mm/srmmu.c 2007-03-23 18:35:41.000000000 +0100 @@ -18,13 +18,13 @@ #include #include #include +#include #include #include #include #include #include -#include #include #include #include Index: linux-2.6/arch/sparc64/kernel/kprobes.c =================================================================== --- linux-2.6.orig/arch/sparc64/kernel/kprobes.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/sparc64/kernel/kprobes.c 2007-03-23 18:35:41.000000000 +0100 @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include #include Index: linux-2.6/arch/sparc64/kernel/traps.c =================================================================== --- linux-2.6.orig/arch/sparc64/kernel/traps.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/sparc64/kernel/traps.c 2007-03-23 18:35:41.000000000 +0100 @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -36,26 +37,12 @@ #include #include #include -#include #include #ifdef CONFIG_KMOD #include #endif #include -ATOMIC_NOTIFIER_HEAD(sparc64die_chain); - -int register_die_notifier(struct notifier_block *nb) -{ - return atomic_notifier_chain_register(&sparc64die_chain, nb); -} -EXPORT_SYMBOL(register_die_notifier); - -int unregister_die_notifier(struct notifier_block *nb) -{ - return atomic_notifier_chain_unregister(&sparc64die_chain, nb); -} -EXPORT_SYMBOL(unregister_die_notifier); /* When an irrecoverable trap occurs at tl > 0, the trap entry * code logs the trap state registers at every level in the trap Index: linux-2.6/arch/sparc64/mm/fault.c =================================================================== --- linux-2.6.orig/arch/sparc64/mm/fault.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/sparc64/mm/fault.c 2007-03-23 18:35:41.000000000 +0100 @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -29,7 +30,6 @@ #include #include #include -#include #include #ifdef CONFIG_KPROBES Index: linux-2.6/arch/x86_64/kernel/crash.c =================================================================== --- linux-2.6.orig/arch/x86_64/kernel/crash.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/x86_64/kernel/crash.c 2007-03-23 18:35:41.000000000 +0100 @@ -17,13 +17,13 @@ #include #include #include +#include #include #include #include #include #include -#include /* This keeps a track of which one is crashing cpu. */ static int crashing_cpu; Index: linux-2.6/arch/x86_64/kernel/kprobes.c =================================================================== --- linux-2.6.orig/arch/x86_64/kernel/kprobes.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/x86_64/kernel/kprobes.c 2007-03-23 18:35:41.000000000 +0100 @@ -37,10 +37,10 @@ #include #include #include +#include #include #include -#include #include void jprobe_return_end(void); Index: linux-2.6/arch/x86_64/kernel/mce.c =================================================================== --- linux-2.6.orig/arch/x86_64/kernel/mce.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/x86_64/kernel/mce.c 2007-03-23 18:35:41.000000000 +0100 @@ -20,10 +20,10 @@ #include #include #include +#include #include #include #include -#include #include #include Index: linux-2.6/arch/x86_64/kernel/nmi.c =================================================================== --- linux-2.6.orig/arch/x86_64/kernel/nmi.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/x86_64/kernel/nmi.c 2007-03-23 18:35:41.000000000 +0100 @@ -21,11 +21,11 @@ #include #include #include +#include #include #include #include -#include #include #include Index: linux-2.6/arch/x86_64/kernel/pci-gart.c =================================================================== --- linux-2.6.orig/arch/x86_64/kernel/pci-gart.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/x86_64/kernel/pci-gart.c 2007-03-23 18:35:41.000000000 +0100 @@ -22,13 +22,13 @@ #include #include #include +#include #include #include #include #include #include #include -#include #include #include #include Index: linux-2.6/arch/x86_64/kernel/process.c =================================================================== --- linux-2.6.orig/arch/x86_64/kernel/process.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/x86_64/kernel/process.c 2007-03-23 18:35:41.000000000 +0100 @@ -36,6 +36,7 @@ #include #include #include +#include #include #include @@ -46,7 +47,6 @@ #include #include #include -#include #include #include #include Index: linux-2.6/arch/x86_64/kernel/reboot.c =================================================================== --- linux-2.6.orig/arch/x86_64/kernel/reboot.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/x86_64/kernel/reboot.c 2007-03-23 18:35:41.000000000 +0100 @@ -7,8 +7,8 @@ #include #include #include +#include #include -#include #include #include #include Index: linux-2.6/arch/x86_64/kernel/smpboot.c =================================================================== --- linux-2.6.orig/arch/x86_64/kernel/smpboot.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/x86_64/kernel/smpboot.c 2007-03-23 18:35:41.000000000 +0100 @@ -49,11 +49,11 @@ #include #include #include +#include #include #include #include -#include #include #include #include Index: linux-2.6/arch/x86_64/kernel/traps.c =================================================================== --- linux-2.6.orig/arch/x86_64/kernel/traps.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/x86_64/kernel/traps.c 2007-03-23 18:35:41.000000000 +0100 @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -39,7 +40,6 @@ #include #include #include -#include #include #include #include @@ -71,22 +71,6 @@ asmlinkage void alignment_check(void); asmlinkage void machine_check(void); asmlinkage void spurious_interrupt_bug(void); -ATOMIC_NOTIFIER_HEAD(die_chain); -EXPORT_SYMBOL(die_chain); - -int register_die_notifier(struct notifier_block *nb) -{ - vmalloc_sync_all(); - return atomic_notifier_chain_register(&die_chain, nb); -} -EXPORT_SYMBOL(register_die_notifier); /* used modular by kdb */ - -int unregister_die_notifier(struct notifier_block *nb) -{ - return atomic_notifier_chain_unregister(&die_chain, nb); -} -EXPORT_SYMBOL(unregister_die_notifier); /* used modular by kdb */ - static inline void conditional_sti(struct pt_regs *regs) { if (regs->eflags & X86_EFLAGS_IF) Index: linux-2.6/arch/x86_64/mm/fault.c =================================================================== --- linux-2.6.orig/arch/x86_64/mm/fault.c 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/arch/x86_64/mm/fault.c 2007-03-23 18:35:41.000000000 +0100 @@ -24,13 +24,13 @@ #include #include #include +#include #include #include #include #include #include -#include #include /* Page fault error code bits */ Index: linux-2.6/include/asm-alpha/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-alpha/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1 @@ +#include Index: linux-2.6/include/asm-arm/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-arm/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1 @@ +#include Index: linux-2.6/include/asm-arm26/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-arm26/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1 @@ +#include Index: linux-2.6/include/asm-avr32/kdebug.h =================================================================== --- linux-2.6.orig/include/asm-avr32/kdebug.h 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/include/asm-avr32/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -3,19 +3,6 @@ #include -struct pt_regs; - -struct die_args { - struct pt_regs *regs; - int trapnr; -}; - -int register_die_notifier(struct notifier_block *nb); -int unregister_die_notifier(struct notifier_block *nb); -int register_page_fault_notifier(struct notifier_block *nb); -int unregister_page_fault_notifier(struct notifier_block *nb); -extern struct atomic_notifier_head avr32_die_chain; - /* Grossly misnamed. */ enum die_val { DIE_FAULT, @@ -24,15 +11,7 @@ enum die_val { DIE_PAGE_FAULT, }; -static inline int notify_die(enum die_val val, struct pt_regs *regs, - int trap, int sig) -{ - struct die_args args = { - .regs = regs, - .trapnr = trap, - }; - - return atomic_notifier_call_chain(&avr32_die_chain, val, &args); -} +int register_page_fault_notifier(struct notifier_block *nb); +int unregister_page_fault_notifier(struct notifier_block *nb); #endif /* __ASM_AVR32_KDEBUG_H */ Index: linux-2.6/include/asm-cris/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-cris/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1 @@ +#include Index: linux-2.6/include/asm-frv/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-frv/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1 @@ +#include Index: linux-2.6/include/asm-h8300/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-h8300/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1 @@ +#include Index: linux-2.6/include/asm-i386/kdebug.h =================================================================== --- linux-2.6.orig/include/asm-i386/kdebug.h 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/include/asm-i386/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -9,19 +9,8 @@ struct pt_regs; -struct die_args { - struct pt_regs *regs; - const char *str; - long err; - int trapnr; - int signr; -}; - -extern int register_die_notifier(struct notifier_block *); -extern int unregister_die_notifier(struct notifier_block *); extern int register_page_fault_notifier(struct notifier_block *); extern int unregister_page_fault_notifier(struct notifier_block *); -extern struct atomic_notifier_head i386die_chain; /* Grossly misnamed. */ @@ -41,17 +30,4 @@ enum die_val { DIE_PAGE_FAULT, }; -static inline int notify_die(enum die_val val, const char *str, - struct pt_regs *regs, long err, int trap, int sig) -{ - struct die_args args = { - .regs = regs, - .str = str, - .err = err, - .trapnr = trap, - .signr = sig - }; - return atomic_notifier_call_chain(&i386die_chain, val, &args); -} - #endif Index: linux-2.6/include/asm-ia64/kdebug.h =================================================================== --- linux-2.6.orig/include/asm-ia64/kdebug.h 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/include/asm-ia64/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -28,21 +28,8 @@ */ #include -struct pt_regs; - -struct die_args { - struct pt_regs *regs; - const char *str; - long err; - int trapnr; - int signr; -}; - -extern int register_die_notifier(struct notifier_block *); -extern int unregister_die_notifier(struct notifier_block *); extern int register_page_fault_notifier(struct notifier_block *); extern int unregister_page_fault_notifier(struct notifier_block *); -extern struct atomic_notifier_head ia64die_chain; enum die_val { DIE_BREAK = 1, @@ -74,18 +61,4 @@ enum die_val { DIE_KDUMP_LEAVE, }; -static inline int notify_die(enum die_val val, char *str, struct pt_regs *regs, - long err, int trap, int sig) -{ - struct die_args args = { - .regs = regs, - .str = str, - .err = err, - .trapnr = trap, - .signr = sig - }; - - return atomic_notifier_call_chain(&ia64die_chain, val, &args); -} - #endif Index: linux-2.6/include/asm-m32r/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-m32r/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1 @@ +#include Index: linux-2.6/include/asm-m68k/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-m68k/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1 @@ +#include Index: linux-2.6/include/asm-m68knommu/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-m68knommu/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1 @@ +#include Index: linux-2.6/include/asm-mips/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-mips/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1 @@ +#include Index: linux-2.6/include/asm-parisc/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-parisc/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1 @@ +#include Index: linux-2.6/include/asm-powerpc/kdebug.h =================================================================== --- linux-2.6.orig/include/asm-powerpc/kdebug.h 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/include/asm-powerpc/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -6,18 +6,6 @@ #include -struct pt_regs; - -struct die_args { - struct pt_regs *regs; - const char *str; - long err; - int trapnr; - int signr; -}; - -extern int register_die_notifier(struct notifier_block *); -extern int unregister_die_notifier(struct notifier_block *); extern int register_page_fault_notifier(struct notifier_block *); extern int unregister_page_fault_notifier(struct notifier_block *); extern struct atomic_notifier_head powerpc_die_chain; @@ -32,11 +20,5 @@ enum die_val { DIE_PAGE_FAULT, }; -static inline int notify_die(enum die_val val,char *str,struct pt_regs *regs,long err,int trap, int sig) -{ - struct die_args args = { .regs=regs, .str=str, .err=err, .trapnr=trap,.signr=sig }; - return atomic_notifier_call_chain(&powerpc_die_chain, val, &args); -} - #endif /* __KERNEL__ */ #endif /* _ASM_POWERPC_KDEBUG_H */ Index: linux-2.6/include/asm-ppc/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-ppc/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1 @@ +#include Index: linux-2.6/include/asm-s390/kdebug.h =================================================================== --- linux-2.6.orig/include/asm-s390/kdebug.h 2007-03-23 18:30:21.000000000 +0100 +++ linux-2.6/include/asm-s390/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -8,23 +8,8 @@ struct pt_regs; -struct die_args { - struct pt_regs *regs; - const char *str; - long err; - int trapnr; - int signr; -}; - -/* Note - you should never unregister because that can race with NMIs. - * If you really want to do it first unregister - then synchronize_sched - * - then free. - */ -extern int register_die_notifier(struct notifier_block *); -extern int unregister_die_notifier(struct notifier_block *); extern int register_page_fault_notifier(struct notifier_block *); extern int unregister_page_fault_notifier(struct notifier_block *); -extern struct atomic_notifier_head s390die_chain; enum die_val { DIE_OOPS = 1, @@ -42,19 +27,6 @@ enum die_val { DIE_PAGE_FAULT, }; -static inline int notify_die(enum die_val val, const char *str, - struct pt_regs *regs, long err, int trap, int sig) -{ - struct die_args args = { - .regs = regs, - .str = str, - .err = err, - .trapnr = trap, - .signr = sig - }; - return atomic_notifier_call_chain(&s390die_chain, val, &args); -} - extern void die(const char *, struct pt_regs *, long); #endif Index: linux-2.6/include/asm-sh/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-sh/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1 @@ +#include Index: linux-2.6/include/asm-sh64/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-sh64/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1 @@ +#include Index: linux-2.6/include/asm-sparc/kdebug.h =================================================================== --- linux-2.6.orig/include/asm-sparc/kdebug.h 2007-03-23 18:30:22.000000000 +0100 +++ linux-2.6/include/asm-sparc/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -66,4 +66,8 @@ static inline void sp_enter_debugger(voi #define KDEBUG_DUNNO2_OFF 0x8 #define KDEBUG_TEACH_OFF 0xc +enum die_val { + DIE_UNUSED, +}; + #endif /* !(_SPARC_KDEBUG_H) */ Index: linux-2.6/include/asm-sparc64/kdebug.h =================================================================== --- linux-2.6.orig/include/asm-sparc64/kdebug.h 2007-03-23 18:30:22.000000000 +0100 +++ linux-2.6/include/asm-sparc64/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -7,19 +7,8 @@ struct pt_regs; -struct die_args { - struct pt_regs *regs; - const char *str; - long err; - int trapnr; - int signr; -}; - -extern int register_die_notifier(struct notifier_block *); -extern int unregister_die_notifier(struct notifier_block *); extern int register_page_fault_notifier(struct notifier_block *); extern int unregister_page_fault_notifier(struct notifier_block *); -extern struct atomic_notifier_head sparc64die_chain; extern void bad_trap(struct pt_regs *, long); @@ -36,16 +25,4 @@ enum die_val { DIE_PAGE_FAULT, }; -static inline int notify_die(enum die_val val,char *str, struct pt_regs *regs, - long err, int trap, int sig) -{ - struct die_args args = { .regs = regs, - .str = str, - .err = err, - .trapnr = trap, - .signr = sig }; - - return atomic_notifier_call_chain(&sparc64die_chain, val, &args); -} - #endif Index: linux-2.6/include/asm-um/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-um/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1 @@ +#include Index: linux-2.6/include/asm-v850/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-v850/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1 @@ +#include Index: linux-2.6/include/asm-x86_64/kdebug.h =================================================================== --- linux-2.6.orig/include/asm-x86_64/kdebug.h 2007-03-23 18:30:22.000000000 +0100 +++ linux-2.6/include/asm-x86_64/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -5,19 +5,8 @@ struct pt_regs; -struct die_args { - struct pt_regs *regs; - const char *str; - long err; - int trapnr; - int signr; -}; - -extern int register_die_notifier(struct notifier_block *); -extern int unregister_die_notifier(struct notifier_block *); extern int register_page_fault_notifier(struct notifier_block *); extern int unregister_page_fault_notifier(struct notifier_block *); -extern struct atomic_notifier_head die_chain; /* Grossly misnamed. */ enum die_val { @@ -36,19 +25,6 @@ enum die_val { DIE_PAGE_FAULT, }; -static inline int notify_die(enum die_val val, const char *str, - struct pt_regs *regs, long err, int trap, int sig) -{ - struct die_args args = { - .regs = regs, - .str = str, - .err = err, - .trapnr = trap, - .signr = sig - }; - return atomic_notifier_call_chain(&die_chain, val, &args); -} - extern void printk_address(unsigned long address); extern void die(const char *,struct pt_regs *,long); extern void __die(const char *,struct pt_regs *,long); Index: linux-2.6/include/asm-xtensa/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-xtensa/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1 @@ +#include Index: linux-2.6/include/linux/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/linux/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1,20 @@ +#ifndef _LINUX_KDEBUG_H +#define _LINUX_KDEBUG_H + +#include + +struct die_args { + struct pt_regs *regs; + const char *str; + long err; + int trapnr; + int signr; +}; + +int register_die_notifier(struct notifier_block *nb); +int unregister_die_notifier(struct notifier_block *nb); + +int notify_die(enum die_val val, const char *str, + struct pt_regs *regs, long err, int trap, int sig); + +#endif /* _LINUX_KDEBUG_H */ Index: linux-2.6/kernel/Makefile =================================================================== --- linux-2.6.orig/kernel/Makefile 2007-03-23 18:30:22.000000000 +0100 +++ linux-2.6/kernel/Makefile 2007-03-23 18:35:41.000000000 +0100 @@ -8,7 +8,7 @@ obj-y = sched.o fork.o exec_domain.o signal.o sys.o kmod.o workqueue.o pid.o \ rcupdate.o extable.o params.o posix-timers.o \ kthread.o wait.o kfifo.o sys_ni.o posix-cpu-timers.o mutex.o \ - hrtimer.o rwsem.o latency.o nsproxy.o srcu.o + hrtimer.o rwsem.o latency.o nsproxy.o srcu.o die_notifier.o obj-$(CONFIG_STACKTRACE) += stacktrace.o obj-y += time/ Index: linux-2.6/kernel/die_notifier.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/kernel/die_notifier.c 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1,36 @@ + +#include +#include +#include + + +static ATOMIC_NOTIFIER_HEAD(die_chain); + +int notify_die(enum die_val val, const char *str, + struct pt_regs *regs, long err, int trap, int sig) +{ + struct die_args args = { + .regs = regs, + .str = str, + .err = err, + .trapnr = trap, + .signr = sig, + + }; + + return atomic_notifier_call_chain(&die_chain, val, &args); +} + +int register_die_notifier(struct notifier_block *nb) +{ + return atomic_notifier_chain_register(&die_chain, nb); +} +EXPORT_SYMBOL_GPL(register_die_notifier); + +int unregister_die_notifier(struct notifier_block *nb) +{ + return atomic_notifier_chain_unregister(&die_chain, nb); +} +EXPORT_SYMBOL_GPL(unregister_die_notifier); + + Index: linux-2.6/kernel/kprobes.c =================================================================== --- linux-2.6.orig/kernel/kprobes.c 2007-03-23 18:30:22.000000000 +0100 +++ linux-2.6/kernel/kprobes.c 2007-03-23 18:35:41.000000000 +0100 @@ -41,10 +41,10 @@ #include #include #include +#include #include #include #include -#include #define KPROBE_HASH_BITS 6 #define KPROBE_TABLE_SIZE (1 << KPROBE_HASH_BITS) Index: linux-2.6/include/asm-generic/kdebug.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/asm-generic/kdebug.h 2007-03-23 18:35:41.000000000 +0100 @@ -0,0 +1,8 @@ +#ifndef _ASM_GENERIC_KDEBUG_H +#define _ASM_GENERIC_KDEBUG_H + +enum die_val { + DIE_UNUSED, +}; + +#endif /* _ASM_GENERIC_KDEBUG_H */ Index: linux-2.6/arch/arm/mm/fault.c =================================================================== --- linux-2.6.orig/arch/arm/mm/fault.c 2007-03-23 18:30:20.000000000 +0100 +++ linux-2.6/arch/arm/mm/fault.c 2007-03-23 18:35:41.000000000 +0100 @@ -454,7 +454,7 @@ do_DataAbort(unsigned long addr, unsigne info.si_errno = 0; info.si_code = inf->code; info.si_addr = (void __user *)addr; - notify_die("", regs, &info, fsr, 0); + arm_notify_die("", regs, &info, fsr, 0); } asmlinkage void Index: linux-2.6/include/asm-arm/system.h =================================================================== --- linux-2.6.orig/include/asm-arm/system.h 2007-03-23 18:35:48.000000000 +0100 +++ linux-2.6/include/asm-arm/system.h 2007-03-23 18:35:54.000000000 +0100 @@ -90,7 +90,7 @@ void die(const char *msg, struct pt_regs __attribute__((noreturn)); struct siginfo; -void notify_die(const char *str, struct pt_regs *regs, struct siginfo *info, +void arm_notify_die(const char *str, struct pt_regs *regs, struct siginfo *info, unsigned long err, unsigned long trap); void hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int,