move die notifier handling to common code
This patch moves the die notifier handling to common code. Previous various architectures had exactly the same code for it. Note that the new code is compiled unconditionally, this should be understood as an appel to the other architecture maintainer to implement support for it aswell (aka sprinkling a notify_die or two in the proper place) arm had a notifiy_die that did something totally different, I renamed it to arm_notify_die as part of the patch and made it static to the file it's declared and used at. avr32 used to pass slightly less information through this interface and I brought it into line with the other architectures. [akpm@linux-foundation.org: build fix] [akpm@linux-foundation.org: fix vmalloc_sync_all bustage] [bryan.wu@analog.com: fix vmalloc_sync_all in nommu] Signed-off-by: Christoph Hellwig <hch@lst.de> Cc: <linux-arch@vger.kernel.org> Cc: Russell King <rmk@arm.linux.org.uk> Signed-off-by: Bryan Wu <bryan.wu@analog.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
e386979299
Коммит
1eeb66a1bb
|
@ -245,8 +245,8 @@ NORET_TYPE void die(const char *str, struct pt_regs *regs, int err)
|
||||||
do_exit(SIGSEGV);
|
do_exit(SIGSEGV);
|
||||||
}
|
}
|
||||||
|
|
||||||
void notify_die(const char *str, struct pt_regs *regs, struct siginfo *info,
|
void arm_notify_die(const char *str, struct pt_regs *regs,
|
||||||
unsigned long err, unsigned long trap)
|
struct siginfo *info, unsigned long err, unsigned long trap)
|
||||||
{
|
{
|
||||||
if (user_mode(regs)) {
|
if (user_mode(regs)) {
|
||||||
current->thread.error_code = err;
|
current->thread.error_code = err;
|
||||||
|
@ -330,7 +330,7 @@ asmlinkage void __exception do_undefinstr(struct pt_regs *regs)
|
||||||
info.si_code = ILL_ILLOPC;
|
info.si_code = ILL_ILLOPC;
|
||||||
info.si_addr = pc;
|
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)
|
asmlinkage void do_unexp_fiq (struct pt_regs *regs)
|
||||||
|
@ -384,7 +384,7 @@ static int bad_syscall(int n, struct pt_regs *regs)
|
||||||
info.si_addr = (void __user *)instruction_pointer(regs) -
|
info.si_addr = (void __user *)instruction_pointer(regs) -
|
||||||
(thumb_mode(regs) ? 2 : 4);
|
(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;
|
return regs->ARM_r0;
|
||||||
}
|
}
|
||||||
|
@ -428,7 +428,7 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs)
|
||||||
info.si_code = SEGV_MAPERR;
|
info.si_code = SEGV_MAPERR;
|
||||||
info.si_addr = NULL;
|
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;
|
return 0;
|
||||||
|
|
||||||
case NR(breakpoint): /* SWI BREAK_POINT */
|
case NR(breakpoint): /* SWI BREAK_POINT */
|
||||||
|
@ -564,7 +564,7 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs)
|
||||||
info.si_addr = (void __user *)instruction_pointer(regs) -
|
info.si_addr = (void __user *)instruction_pointer(regs) -
|
||||||
(thumb_mode(regs) ? 2 : 4);
|
(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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -638,7 +638,7 @@ baddataabort(int code, unsigned long instr, struct pt_regs *regs)
|
||||||
info.si_code = ILL_ILLOPC;
|
info.si_code = ILL_ILLOPC;
|
||||||
info.si_addr = (void __user *)addr;
|
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)
|
void __attribute__((noreturn)) __bug(const char *file, int line)
|
||||||
|
|
|
@ -453,7 +453,7 @@ do_DataAbort(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
|
||||||
info.si_errno = 0;
|
info.si_errno = 0;
|
||||||
info.si_code = inf->code;
|
info.si_code = inf->code;
|
||||||
info.si_addr = (void __user *)addr;
|
info.si_addr = (void __user *)addr;
|
||||||
notify_die("", regs, &info, fsr, 0);
|
arm_notify_die("", regs, &info, fsr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage void __exception
|
asmlinkage void __exception
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
|
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/kdebug.h>
|
#include <linux/kdebug.h>
|
||||||
#include <asm/ocd.h>
|
#include <asm/ocd.h>
|
||||||
|
|
||||||
DEFINE_PER_CPU(struct kprobe *, current_kprobe);
|
DEFINE_PER_CPU(struct kprobe *, current_kprobe);
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <asm/ocd.h>
|
#include <asm/ocd.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/kdebug.h>
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
static struct pt_regs *get_user_regs(struct task_struct *tsk)
|
static struct pt_regs *get_user_regs(struct task_struct *tsk)
|
||||||
{
|
{
|
||||||
|
@ -300,7 +300,7 @@ asmlinkage void do_debug_priv(struct pt_regs *regs)
|
||||||
else
|
else
|
||||||
die_val = DIE_BREAKPOINT;
|
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;
|
return;
|
||||||
|
|
||||||
if (likely(ds & DS_SSS)) {
|
if (likely(ds & DS_SSS)) {
|
||||||
|
|
|
@ -20,20 +20,6 @@
|
||||||
#include <asm/sysreg.h>
|
#include <asm/sysreg.h>
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
|
|
||||||
ATOMIC_NOTIFIER_HEAD(avr32_die_chain);
|
|
||||||
|
|
||||||
int register_die_notifier(struct notifier_block *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);
|
static DEFINE_SPINLOCK(die_lock);
|
||||||
|
|
||||||
void NORET_TYPE die(const char *str, struct pt_regs *regs, long err)
|
void NORET_TYPE die(const char *str, struct pt_regs *regs, long err)
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/pagemap.h>
|
#include <linux/pagemap.h>
|
||||||
|
|
||||||
#include <asm/kdebug.h>
|
#include <linux/kdebug.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/sysreg.h>
|
#include <asm/sysreg.h>
|
||||||
#include <asm/tlb.h>
|
#include <asm/tlb.h>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
#include <asm/nmi.h>
|
#include <asm/nmi.h>
|
||||||
#include <asm/hw_irq.h>
|
#include <asm/hw_irq.h>
|
||||||
#include <asm/apic.h>
|
#include <asm/apic.h>
|
||||||
#include <asm/kdebug.h>
|
#include <linux/kdebug.h>
|
||||||
#include <asm/smp.h>
|
#include <asm/smp.h>
|
||||||
|
|
||||||
#include <mach_ipi.h>
|
#include <mach_ipi.h>
|
||||||
|
|
|
@ -31,8 +31,8 @@
|
||||||
#include <linux/kprobes.h>
|
#include <linux/kprobes.h>
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
#include <linux/preempt.h>
|
#include <linux/preempt.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/desc.h>
|
#include <asm/desc.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
|
||||||
|
|
|
@ -23,10 +23,10 @@
|
||||||
#include <linux/kprobes.h>
|
#include <linux/kprobes.h>
|
||||||
#include <linux/cpumask.h>
|
#include <linux/cpumask.h>
|
||||||
#include <linux/kernel_stat.h>
|
#include <linux/kernel_stat.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/smp.h>
|
#include <asm/smp.h>
|
||||||
#include <asm/nmi.h>
|
#include <asm/nmi.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
|
|
||||||
#include "mach_traps.h"
|
#include "mach_traps.h"
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
#include <asm/smp.h>
|
#include <asm/smp.h>
|
||||||
#include <asm/arch_hooks.h>
|
#include <asm/arch_hooks.h>
|
||||||
#include <asm/kdebug.h>
|
#include <linux/kdebug.h>
|
||||||
#include <asm/stacktrace.h>
|
#include <asm/stacktrace.h>
|
||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
@ -95,20 +95,6 @@ asmlinkage void machine_check(void);
|
||||||
|
|
||||||
int kstack_depth_to_print = 24;
|
int kstack_depth_to_print = 24;
|
||||||
static unsigned int code_bytes = 64;
|
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)
|
static inline int valid_stack_ptr(struct thread_info *tinfo, void *p)
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,13 +21,14 @@
|
||||||
#include <linux/vt_kern.h> /* For unblank_screen() */
|
#include <linux/vt_kern.h> /* For unblank_screen() */
|
||||||
#include <linux/highmem.h>
|
#include <linux/highmem.h>
|
||||||
#include <linux/bootmem.h> /* for max_low_pfn */
|
#include <linux/bootmem.h> /* for max_low_pfn */
|
||||||
|
#include <linux/vmalloc.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/kprobes.h>
|
#include <linux/kprobes.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/desc.h>
|
#include <asm/desc.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/segment.h>
|
#include <asm/segment.h>
|
||||||
|
|
||||||
extern void die(const char *,struct pt_regs *,long);
|
extern void die(const char *,struct pt_regs *,long);
|
||||||
|
|
|
@ -14,10 +14,10 @@
|
||||||
#include <linux/sysdev.h>
|
#include <linux/sysdev.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
#include <asm/nmi.h>
|
#include <asm/nmi.h>
|
||||||
#include <asm/msr.h>
|
#include <asm/msr.h>
|
||||||
#include <asm/apic.h>
|
#include <asm/apic.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
|
|
||||||
#include "op_counter.h"
|
#include "op_counter.h"
|
||||||
#include "op_x86_model.h"
|
#include "op_x86_model.h"
|
||||||
|
|
|
@ -12,12 +12,11 @@
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/oprofile.h>
|
#include <linux/oprofile.h>
|
||||||
#include <linux/rcupdate.h>
|
#include <linux/rcupdate.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/nmi.h>
|
#include <asm/nmi.h>
|
||||||
#include <asm/apic.h>
|
#include <asm/apic.h>
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
|
|
||||||
static int profile_timer_exceptions_notify(struct notifier_block *self,
|
static int profile_timer_exceptions_notify(struct notifier_block *self,
|
||||||
unsigned long val, void *data)
|
unsigned long val, void *data)
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
#include <linux/elfcore.h>
|
#include <linux/elfcore.h>
|
||||||
#include <linux/sysctl.h>
|
#include <linux/sysctl.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/mca.h>
|
#include <asm/mca.h>
|
||||||
|
|
||||||
int kdump_status[NR_CPUS];
|
int kdump_status[NR_CPUS];
|
||||||
|
|
|
@ -29,9 +29,9 @@
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/preempt.h>
|
#include <linux/preempt.h>
|
||||||
#include <linux/moduleloader.h>
|
#include <linux/moduleloader.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
|
||||||
|
|
|
@ -72,9 +72,9 @@
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
#include <linux/cpumask.h>
|
#include <linux/cpumask.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/delay.h>
|
#include <asm/delay.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/machvec.h>
|
#include <asm/machvec.h>
|
||||||
#include <asm/meminit.h>
|
#include <asm/meminit.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
|
|
@ -27,13 +27,13 @@
|
||||||
#include <linux/efi.h>
|
#include <linux/efi.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
#include <asm/delay.h>
|
#include <asm/delay.h>
|
||||||
#include <asm/elf.h>
|
#include <asm/elf.h>
|
||||||
#include <asm/ia32.h>
|
#include <asm/ia32.h>
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/kexec.h>
|
#include <asm/kexec.h>
|
||||||
#include <asm/pgalloc.h>
|
#include <asm/pgalloc.h>
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
|
|
|
@ -16,33 +16,17 @@
|
||||||
#include <linux/hardirq.h>
|
#include <linux/hardirq.h>
|
||||||
#include <linux/kprobes.h>
|
#include <linux/kprobes.h>
|
||||||
#include <linux/delay.h> /* for ssleep() */
|
#include <linux/delay.h> /* for ssleep() */
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/fpswa.h>
|
#include <asm/fpswa.h>
|
||||||
#include <asm/ia32.h>
|
#include <asm/ia32.h>
|
||||||
#include <asm/intrinsics.h>
|
#include <asm/intrinsics.h>
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
|
|
||||||
fpswa_interface_t *fpswa_interface;
|
fpswa_interface_t *fpswa_interface;
|
||||||
EXPORT_SYMBOL(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
|
void __init
|
||||||
trap_init (void)
|
trap_init (void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,12 +10,12 @@
|
||||||
#include <linux/smp_lock.h>
|
#include <linux/smp_lock.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/kprobes.h>
|
#include <linux/kprobes.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
|
|
||||||
extern void die (char *, struct pt_regs *, long);
|
extern void die (char *, struct pt_regs *, long);
|
||||||
|
|
||||||
|
|
|
@ -55,9 +55,9 @@
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/reboot.h>
|
#include <linux/reboot.h>
|
||||||
#include <linux/completion.h>
|
#include <linux/completion.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
#include <asm/sn/intr.h>
|
#include <asm/sn/intr.h>
|
||||||
#include <asm/sn/sn_sal.h>
|
#include <asm/sn/sn_sal.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <asm/sn/xpc.h>
|
#include <asm/sn/xpc.h>
|
||||||
|
|
||||||
|
@ -1332,7 +1332,7 @@ xpc_init(void)
|
||||||
dev_warn(xpc_part, "can't register reboot notifier\n");
|
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);
|
ret = register_die_notifier(&xpc_die_notifier);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
dev_warn(xpc_part, "can't register die notifier\n");
|
dev_warn(xpc_part, "can't register die notifier\n");
|
||||||
|
|
|
@ -30,8 +30,8 @@
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
#include <linux/preempt.h>
|
#include <linux/preempt.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/sstep.h>
|
#include <asm/sstep.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
|
||||||
|
|
|
@ -33,8 +33,8 @@
|
||||||
#include <linux/kexec.h>
|
#include <linux/kexec.h>
|
||||||
#include <linux/backlight.h>
|
#include <linux/backlight.h>
|
||||||
#include <linux/bug.h>
|
#include <linux/bug.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
@ -72,20 +72,6 @@ EXPORT_SYMBOL(__debugger_dabr_match);
|
||||||
EXPORT_SYMBOL(__debugger_fault_handler);
|
EXPORT_SYMBOL(__debugger_fault_handler);
|
||||||
#endif
|
#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
|
* Trap & Exception support
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include <linux/highmem.h>
|
#include <linux/highmem.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/kprobes.h>
|
#include <linux/kprobes.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
|
@ -36,7 +37,6 @@
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/siginfo.h>
|
#include <asm/siginfo.h>
|
||||||
|
|
||||||
#ifdef CONFIG_KPROBES
|
#ifdef CONFIG_KPROBES
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
#include <linux/preempt.h>
|
#include <linux/preempt.h>
|
||||||
#include <linux/stop_machine.h>
|
#include <linux/stop_machine.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
#include <linux/kallsyms.h>
|
#include <linux/kallsyms.h>
|
||||||
#include <linux/reboot.h>
|
#include <linux/reboot.h>
|
||||||
#include <linux/kprobes.h>
|
#include <linux/kprobes.h>
|
||||||
|
@ -40,7 +41,6 @@
|
||||||
#include <asm/s390_ext.h>
|
#include <asm/s390_ext.h>
|
||||||
#include <asm/lowcore.h>
|
#include <asm/lowcore.h>
|
||||||
#include <asm/debug.h>
|
#include <asm/debug.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
|
|
||||||
/* Called from entry.S only */
|
/* Called from entry.S only */
|
||||||
extern void handle_per_exception(struct pt_regs *regs);
|
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;
|
static int kstack_depth_to_print = 20;
|
||||||
#endif /* CONFIG_64BIT */
|
#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:
|
* For show_trace we have tree different stack to consider:
|
||||||
* - the panic stack which is used if the kernel stack has overflown
|
* - the panic stack which is used if the kernel stack has overflown
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <linux/mman.h>
|
#include <linux/mman.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
#include <linux/smp_lock.h>
|
#include <linux/smp_lock.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/console.h>
|
#include <linux/console.h>
|
||||||
|
@ -30,7 +31,6 @@
|
||||||
|
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/s390_ext.h>
|
#include <asm/s390_ext.h>
|
||||||
|
|
||||||
#ifndef CONFIG_64BIT
|
#ifndef CONFIG_64BIT
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
#include <asm/psr.h>
|
#include <asm/psr.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/kdebug.h>
|
#include <linux/kdebug.h>
|
||||||
#include <asm/winmacro.h>
|
#include <asm/winmacro.h>
|
||||||
#include <asm/thread_info.h> /* TI_UWINMASK */
|
#include <asm/thread_info.h> /* TI_UWINMASK */
|
||||||
#include <asm/errno.h>
|
#include <asm/errno.h>
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
#include <linux/root_dev.h>
|
#include <linux/root_dev.h>
|
||||||
#include <linux/cpu.h>
|
#include <linux/cpu.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
@ -40,7 +41,6 @@
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
#include <asm/vaddrs.h>
|
#include <asm/vaddrs.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/mbus.h>
|
#include <asm/mbus.h>
|
||||||
#include <asm/idprom.h>
|
#include <asm/idprom.h>
|
||||||
#include <asm/machines.h>
|
#include <asm/machines.h>
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include <linux/signal.h>
|
#include <linux/signal.h>
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
#include <linux/smp_lock.h>
|
#include <linux/smp_lock.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/delay.h>
|
#include <asm/delay.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
@ -22,7 +23,6 @@
|
||||||
#include <asm/oplib.h>
|
#include <asm/oplib.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <linux/smp_lock.h>
|
#include <linux/smp_lock.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
@ -30,7 +31,6 @@
|
||||||
#include <asm/oplib.h>
|
#include <asm/oplib.h>
|
||||||
#include <asm/smp.h>
|
#include <asm/smp.h>
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
|
||||||
extern int prom_node_root;
|
extern int prom_node_root;
|
||||||
|
|
|
@ -18,13 +18,13 @@
|
||||||
#include <linux/bootmem.h>
|
#include <linux/bootmem.h>
|
||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/bitext.h>
|
#include <asm/bitext.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/pgalloc.h>
|
#include <asm/pgalloc.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/vaddrs.h>
|
#include <asm/vaddrs.h>
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
#include <asm/smp.h>
|
#include <asm/smp.h>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/kprobes.h>
|
#include <linux/kprobes.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <asm/kdebug.h>
|
#include <linux/kdebug.h>
|
||||||
#include <asm/signal.h>
|
#include <asm/signal.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <linux/smp_lock.h>
|
#include <linux/smp_lock.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/delay.h>
|
#include <asm/delay.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
@ -36,26 +37,12 @@
|
||||||
#include <asm/psrcompat.h>
|
#include <asm/psrcompat.h>
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/timer.h>
|
#include <asm/timer.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/head.h>
|
#include <asm/head.h>
|
||||||
#ifdef CONFIG_KMOD
|
#ifdef CONFIG_KMOD
|
||||||
#include <linux/kmod.h>
|
#include <linux/kmod.h>
|
||||||
#endif
|
#endif
|
||||||
#include <asm/prom.h>
|
#include <asm/prom.h>
|
||||||
|
|
||||||
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
|
/* When an irrecoverable trap occurs at tl > 0, the trap entry
|
||||||
* code logs the trap state registers at every level in the trap
|
* code logs the trap state registers at every level in the trap
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/kprobes.h>
|
#include <linux/kprobes.h>
|
||||||
#include <linux/kallsyms.h>
|
#include <linux/kallsyms.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
|
@ -29,7 +30,6 @@
|
||||||
#include <asm/asi.h>
|
#include <asm/asi.h>
|
||||||
#include <asm/lsu.h>
|
#include <asm/lsu.h>
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
|
|
||||||
#ifdef CONFIG_KPROBES
|
#ifdef CONFIG_KPROBES
|
||||||
|
|
|
@ -17,13 +17,13 @@
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/elf.h>
|
#include <linux/elf.h>
|
||||||
#include <linux/elfcore.h>
|
#include <linux/elfcore.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/hardirq.h>
|
#include <asm/hardirq.h>
|
||||||
#include <asm/nmi.h>
|
#include <asm/nmi.h>
|
||||||
#include <asm/hw_irq.h>
|
#include <asm/hw_irq.h>
|
||||||
#include <asm/mach_apic.h>
|
#include <asm/mach_apic.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
|
|
||||||
/* This keeps a track of which one is crashing cpu. */
|
/* This keeps a track of which one is crashing cpu. */
|
||||||
static int crashing_cpu;
|
static int crashing_cpu;
|
||||||
|
|
|
@ -37,10 +37,10 @@
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/preempt.h>
|
#include <linux/preempt.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
|
||||||
void jprobe_return_end(void);
|
void jprobe_return_end(void);
|
||||||
|
|
|
@ -20,10 +20,10 @@
|
||||||
#include <linux/percpu.h>
|
#include <linux/percpu.h>
|
||||||
#include <linux/ctype.h>
|
#include <linux/ctype.h>
|
||||||
#include <linux/kmod.h>
|
#include <linux/kmod.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/msr.h>
|
#include <asm/msr.h>
|
||||||
#include <asm/mce.h>
|
#include <asm/mce.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <asm/smp.h>
|
#include <asm/smp.h>
|
||||||
|
|
||||||
|
|
|
@ -21,11 +21,11 @@
|
||||||
#include <linux/sysctl.h>
|
#include <linux/sysctl.h>
|
||||||
#include <linux/kprobes.h>
|
#include <linux/kprobes.h>
|
||||||
#include <linux/cpumask.h>
|
#include <linux/cpumask.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/smp.h>
|
#include <asm/smp.h>
|
||||||
#include <asm/nmi.h>
|
#include <asm/nmi.h>
|
||||||
#include <asm/proto.h>
|
#include <asm/proto.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/mce.h>
|
#include <asm/mce.h>
|
||||||
|
|
||||||
int unknown_nmi_panic;
|
int unknown_nmi_panic;
|
||||||
|
|
|
@ -22,13 +22,13 @@
|
||||||
#include <linux/topology.h>
|
#include <linux/topology.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
#include <asm/atomic.h>
|
#include <asm/atomic.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/mtrr.h>
|
#include <asm/mtrr.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/proto.h>
|
#include <asm/proto.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/swiotlb.h>
|
#include <asm/swiotlb.h>
|
||||||
#include <asm/dma.h>
|
#include <asm/dma.h>
|
||||||
#include <asm/k8.h>
|
#include <asm/k8.h>
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include <linux/random.h>
|
#include <linux/random.h>
|
||||||
#include <linux/notifier.h>
|
#include <linux/notifier.h>
|
||||||
#include <linux/kprobes.h>
|
#include <linux/kprobes.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
|
@ -46,7 +47,6 @@
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/pda.h>
|
#include <asm/pda.h>
|
||||||
#include <asm/prctl.h>
|
#include <asm/prctl.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/desc.h>
|
#include <asm/desc.h>
|
||||||
#include <asm/proto.h>
|
#include <asm/proto.h>
|
||||||
#include <asm/ia32.h>
|
#include <asm/ia32.h>
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
#include <linux/ctype.h>
|
#include <linux/ctype.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/pm.h>
|
#include <linux/pm.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/delay.h>
|
#include <asm/delay.h>
|
||||||
#include <asm/hw_irq.h>
|
#include <asm/hw_irq.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
|
|
@ -49,11 +49,11 @@
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/mc146818rtc.h>
|
#include <linux/mc146818rtc.h>
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/mtrr.h>
|
#include <asm/mtrr.h>
|
||||||
#include <asm/pgalloc.h>
|
#include <asm/pgalloc.h>
|
||||||
#include <asm/desc.h>
|
#include <asm/desc.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
#include <asm/proto.h>
|
#include <asm/proto.h>
|
||||||
#include <asm/nmi.h>
|
#include <asm/nmi.h>
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include <linux/unwind.h>
|
#include <linux/unwind.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <linux/bug.h>
|
#include <linux/bug.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
@ -39,7 +40,6 @@
|
||||||
#include <asm/debugreg.h>
|
#include <asm/debugreg.h>
|
||||||
#include <asm/desc.h>
|
#include <asm/desc.h>
|
||||||
#include <asm/i387.h>
|
#include <asm/i387.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
#include <asm/smp.h>
|
#include <asm/smp.h>
|
||||||
|
@ -71,22 +71,6 @@ asmlinkage void alignment_check(void);
|
||||||
asmlinkage void machine_check(void);
|
asmlinkage void machine_check(void);
|
||||||
asmlinkage void spurious_interrupt_bug(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)
|
static inline void conditional_sti(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
if (regs->eflags & X86_EFLAGS_IF)
|
if (regs->eflags & X86_EFLAGS_IF)
|
||||||
|
|
|
@ -21,16 +21,17 @@
|
||||||
#include <linux/tty.h>
|
#include <linux/tty.h>
|
||||||
#include <linux/vt_kern.h> /* For unblank_screen() */
|
#include <linux/vt_kern.h> /* For unblank_screen() */
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
|
#include <linux/vmalloc.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/kprobes.h>
|
#include <linux/kprobes.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/pgalloc.h>
|
#include <asm/pgalloc.h>
|
||||||
#include <asm/smp.h>
|
#include <asm/smp.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
#include <asm/proto.h>
|
#include <asm/proto.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
#include <asm-generic/sections.h>
|
#include <asm-generic/sections.h>
|
||||||
|
|
||||||
/* Page fault error code bits */
|
/* Page fault error code bits */
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
#include <linux/miscdevice.h>
|
#include <linux/miscdevice.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/completion.h>
|
#include <linux/completion.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
#include <linux/rwsem.h>
|
#include <linux/rwsem.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
#include <asm-generic/kdebug.h>
|
|
@ -0,0 +1 @@
|
||||||
|
#include <asm-generic/kdebug.h>
|
|
@ -93,7 +93,7 @@ void die(const char *msg, struct pt_regs *regs, int err)
|
||||||
__attribute__((noreturn));
|
__attribute__((noreturn));
|
||||||
|
|
||||||
struct siginfo;
|
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);
|
unsigned long err, unsigned long trap);
|
||||||
|
|
||||||
void hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int,
|
void hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int,
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
#include <asm-generic/kdebug.h>
|
|
@ -3,19 +3,6 @@
|
||||||
|
|
||||||
#include <linux/notifier.h>
|
#include <linux/notifier.h>
|
||||||
|
|
||||||
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. */
|
/* Grossly misnamed. */
|
||||||
enum die_val {
|
enum die_val {
|
||||||
DIE_FAULT,
|
DIE_FAULT,
|
||||||
|
@ -24,15 +11,7 @@ enum die_val {
|
||||||
DIE_PAGE_FAULT,
|
DIE_PAGE_FAULT,
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline int notify_die(enum die_val val, struct pt_regs *regs,
|
int register_page_fault_notifier(struct notifier_block *nb);
|
||||||
int trap, int sig)
|
int unregister_page_fault_notifier(struct notifier_block *nb);
|
||||||
{
|
|
||||||
struct die_args args = {
|
|
||||||
.regs = regs,
|
|
||||||
.trapnr = trap,
|
|
||||||
};
|
|
||||||
|
|
||||||
return atomic_notifier_call_chain(&avr32_die_chain, val, &args);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* __ASM_AVR32_KDEBUG_H */
|
#endif /* __ASM_AVR32_KDEBUG_H */
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
#include <asm-generic/kdebug.h>
|
|
@ -0,0 +1 @@
|
||||||
|
#include <asm-generic/kdebug.h>
|
|
@ -0,0 +1,8 @@
|
||||||
|
#ifndef _ASM_GENERIC_KDEBUG_H
|
||||||
|
#define _ASM_GENERIC_KDEBUG_H
|
||||||
|
|
||||||
|
enum die_val {
|
||||||
|
DIE_UNUSED,
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _ASM_GENERIC_KDEBUG_H */
|
|
@ -0,0 +1 @@
|
||||||
|
#include <asm-generic/kdebug.h>
|
|
@ -9,19 +9,8 @@
|
||||||
|
|
||||||
struct pt_regs;
|
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 register_page_fault_notifier(struct notifier_block *);
|
||||||
extern int unregister_page_fault_notifier(struct notifier_block *);
|
extern int unregister_page_fault_notifier(struct notifier_block *);
|
||||||
extern struct atomic_notifier_head i386die_chain;
|
|
||||||
|
|
||||||
|
|
||||||
/* Grossly misnamed. */
|
/* Grossly misnamed. */
|
||||||
|
@ -42,17 +31,4 @@ enum die_val {
|
||||||
DIE_PAGE_FAULT,
|
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
|
#endif
|
||||||
|
|
|
@ -243,8 +243,6 @@ static inline pte_t pte_mkyoung(pte_t pte) { (pte).pte_low |= _PAGE_ACCESSED; re
|
||||||
static inline pte_t pte_mkwrite(pte_t pte) { (pte).pte_low |= _PAGE_RW; return pte; }
|
static inline pte_t pte_mkwrite(pte_t pte) { (pte).pte_low |= _PAGE_RW; return pte; }
|
||||||
static inline pte_t pte_mkhuge(pte_t pte) { (pte).pte_low |= _PAGE_PSE; return pte; }
|
static inline pte_t pte_mkhuge(pte_t pte) { (pte).pte_low |= _PAGE_PSE; return pte; }
|
||||||
|
|
||||||
extern void vmalloc_sync_all(void);
|
|
||||||
|
|
||||||
#ifdef CONFIG_X86_PAE
|
#ifdef CONFIG_X86_PAE
|
||||||
# include <asm/pgtable-3level.h>
|
# include <asm/pgtable-3level.h>
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -28,21 +28,8 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/notifier.h>
|
#include <linux/notifier.h>
|
||||||
|
|
||||||
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 register_page_fault_notifier(struct notifier_block *);
|
||||||
extern int unregister_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 {
|
enum die_val {
|
||||||
DIE_BREAK = 1,
|
DIE_BREAK = 1,
|
||||||
|
@ -74,18 +61,4 @@ enum die_val {
|
||||||
DIE_KDUMP_LEAVE,
|
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
|
#endif
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
#include <asm-generic/kdebug.h>
|
|
@ -0,0 +1 @@
|
||||||
|
#include <asm-generic/kdebug.h>
|
|
@ -0,0 +1 @@
|
||||||
|
#include <asm-generic/kdebug.h>
|
|
@ -0,0 +1 @@
|
||||||
|
#include <asm-generic/kdebug.h>
|
|
@ -0,0 +1 @@
|
||||||
|
#include <asm-generic/kdebug.h>
|
|
@ -6,18 +6,6 @@
|
||||||
|
|
||||||
#include <linux/notifier.h>
|
#include <linux/notifier.h>
|
||||||
|
|
||||||
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 register_page_fault_notifier(struct notifier_block *);
|
||||||
extern int unregister_page_fault_notifier(struct notifier_block *);
|
extern int unregister_page_fault_notifier(struct notifier_block *);
|
||||||
extern struct atomic_notifier_head powerpc_die_chain;
|
extern struct atomic_notifier_head powerpc_die_chain;
|
||||||
|
@ -32,11 +20,5 @@ enum die_val {
|
||||||
DIE_PAGE_FAULT,
|
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 /* __KERNEL__ */
|
||||||
#endif /* _ASM_POWERPC_KDEBUG_H */
|
#endif /* _ASM_POWERPC_KDEBUG_H */
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
#include <asm-generic/kdebug.h>
|
|
@ -8,21 +8,6 @@
|
||||||
|
|
||||||
struct pt_regs;
|
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 *);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These are only here because kprobes.c wants them to implement a
|
* These are only here because kprobes.c wants them to implement a
|
||||||
* blatant layering violation. Will hopefully go away soon once all
|
* blatant layering violation. Will hopefully go away soon once all
|
||||||
|
@ -37,8 +22,6 @@ static inline int unregister_page_fault_notifier(struct notifier_block *nb)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern struct atomic_notifier_head s390die_chain;
|
|
||||||
|
|
||||||
enum die_val {
|
enum die_val {
|
||||||
DIE_OOPS = 1,
|
DIE_OOPS = 1,
|
||||||
DIE_BPT,
|
DIE_BPT,
|
||||||
|
@ -54,19 +37,6 @@ enum die_val {
|
||||||
DIE_NMI_IPI,
|
DIE_NMI_IPI,
|
||||||
};
|
};
|
||||||
|
|
||||||
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);
|
extern void die(const char *, struct pt_regs *, long);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define __ASM_SH_KDEBUG_H
|
#define __ASM_SH_KDEBUG_H
|
||||||
|
|
||||||
#include <linux/notifier.h>
|
#include <linux/notifier.h>
|
||||||
|
#include <asm-generic/kdebug.h>
|
||||||
|
|
||||||
struct pt_regs;
|
struct pt_regs;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
#include <asm-generic/kdebug.h>
|
|
@ -66,4 +66,8 @@ static inline void sp_enter_debugger(void)
|
||||||
#define KDEBUG_DUNNO2_OFF 0x8
|
#define KDEBUG_DUNNO2_OFF 0x8
|
||||||
#define KDEBUG_TEACH_OFF 0xc
|
#define KDEBUG_TEACH_OFF 0xc
|
||||||
|
|
||||||
|
enum die_val {
|
||||||
|
DIE_UNUSED,
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* !(_SPARC_KDEBUG_H) */
|
#endif /* !(_SPARC_KDEBUG_H) */
|
||||||
|
|
|
@ -7,19 +7,8 @@
|
||||||
|
|
||||||
struct pt_regs;
|
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 register_page_fault_notifier(struct notifier_block *);
|
||||||
extern int unregister_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);
|
extern void bad_trap(struct pt_regs *, long);
|
||||||
|
|
||||||
|
@ -36,16 +25,4 @@ enum die_val {
|
||||||
DIE_PAGE_FAULT,
|
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
|
#endif
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
#include <asm-generic/kdebug.h>
|
|
@ -0,0 +1 @@
|
||||||
|
#include <asm-generic/kdebug.h>
|
|
@ -5,19 +5,8 @@
|
||||||
|
|
||||||
struct pt_regs;
|
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 register_page_fault_notifier(struct notifier_block *);
|
||||||
extern int unregister_page_fault_notifier(struct notifier_block *);
|
extern int unregister_page_fault_notifier(struct notifier_block *);
|
||||||
extern struct atomic_notifier_head die_chain;
|
|
||||||
|
|
||||||
/* Grossly misnamed. */
|
/* Grossly misnamed. */
|
||||||
enum die_val {
|
enum die_val {
|
||||||
|
@ -37,19 +26,6 @@ enum die_val {
|
||||||
DIE_PAGE_FAULT,
|
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 printk_address(unsigned long address);
|
||||||
extern void die(const char *,struct pt_regs *,long);
|
extern void die(const char *,struct pt_regs *,long);
|
||||||
extern void __die(const char *,struct pt_regs *,long);
|
extern void __die(const char *,struct pt_regs *,long);
|
||||||
|
|
|
@ -411,7 +411,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
||||||
|
|
||||||
extern spinlock_t pgd_lock;
|
extern spinlock_t pgd_lock;
|
||||||
extern struct list_head pgd_list;
|
extern struct list_head pgd_list;
|
||||||
void vmalloc_sync_all(void);
|
|
||||||
|
|
||||||
extern int kern_addr_valid(unsigned long addr);
|
extern int kern_addr_valid(unsigned long addr);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
#include <asm-generic/kdebug.h>
|
|
@ -0,0 +1,20 @@
|
||||||
|
#ifndef _LINUX_KDEBUG_H
|
||||||
|
#define _LINUX_KDEBUG_H
|
||||||
|
|
||||||
|
#include <asm/kdebug.h>
|
||||||
|
|
||||||
|
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 */
|
|
@ -53,6 +53,7 @@ extern void vunmap(void *addr);
|
||||||
|
|
||||||
extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
|
extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
|
||||||
unsigned long pgoff);
|
unsigned long pgoff);
|
||||||
|
void vmalloc_sync_all(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Lowlevel-APIs (not for driver use!)
|
* Lowlevel-APIs (not for driver use!)
|
||||||
|
|
|
@ -8,7 +8,7 @@ obj-y = sched.o fork.o exec_domain.o panic.o printk.o profile.o \
|
||||||
signal.o sys.o kmod.o workqueue.o pid.o \
|
signal.o sys.o kmod.o workqueue.o pid.o \
|
||||||
rcupdate.o extable.o params.o posix-timers.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 \
|
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-$(CONFIG_STACKTRACE) += stacktrace.o
|
||||||
obj-y += time/
|
obj-y += time/
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/notifier.h>
|
||||||
|
#include <linux/vmalloc.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
vmalloc_sync_all();
|
||||||
|
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);
|
||||||
|
|
||||||
|
|
|
@ -42,10 +42,10 @@
|
||||||
#include <linux/freezer.h>
|
#include <linux/freezer.h>
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
#include <linux/debugfs.h>
|
#include <linux/debugfs.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
#include <asm-generic/sections.h>
|
#include <asm-generic/sections.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/errno.h>
|
#include <asm/errno.h>
|
||||||
#include <asm/kdebug.h>
|
|
||||||
|
|
||||||
#define KPROBE_HASH_BITS 6
|
#define KPROBE_HASH_BITS 6
|
||||||
#define KPROBE_TABLE_SIZE (1 << KPROBE_HASH_BITS)
|
#define KPROBE_TABLE_SIZE (1 << KPROBE_HASH_BITS)
|
||||||
|
|
|
@ -261,6 +261,14 @@ void vunmap(void *addr)
|
||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Implement a stub for vmalloc_sync_all() if the architecture chose not to
|
||||||
|
* have one.
|
||||||
|
*/
|
||||||
|
void __attribute__((weak)) vmalloc_sync_all(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* sys_brk() for the most part doesn't need the global kernel
|
* sys_brk() for the most part doesn't need the global kernel
|
||||||
* lock, except when an application is doing something nasty
|
* lock, except when an application is doing something nasty
|
||||||
|
|
|
@ -755,3 +755,10 @@ out_einval_locked:
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(remap_vmalloc_range);
|
EXPORT_SYMBOL(remap_vmalloc_range);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Implement a stub for vmalloc_sync_all() if the architecture chose not to
|
||||||
|
* have one.
|
||||||
|
*/
|
||||||
|
void __attribute__((weak)) vmalloc_sync_all(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче