121 lines
3.7 KiB
Plaintext
121 lines
3.7 KiB
Plaintext
Dieser Patch loest eienen Reboot-nach-Panic aus, damit ein Server
|
|
unbeaufsichtigt neustarten kann.
|
|
|
|
Optional.
|
|
|
|
|
|
diff -rub --unidir /pub/src/linux/kernel/linux/kernel/panic.c ./kernel/panic.c
|
|
--- /pub/src/linux/kernel/linux/kernel/panic.c Wed Mar 1 12:31:54 1995
|
|
+++ ./kernel/panic.c Fri Mar 3 05:32:15 1995
|
|
@@ -13,20 +13,38 @@
|
|
#include <linux/kernel.h>
|
|
#include <linux/sched.h>
|
|
|
|
+#include <linux/delay.h>
|
|
+
|
|
asmlinkage void sys_sync(void); /* it's really int */
|
|
+extern void hard_reset_now(void);
|
|
+
|
|
+int in_panic = 0;
|
|
|
|
NORET_TYPE void panic(const char * fmt, ...)
|
|
{
|
|
static char buf[1024];
|
|
va_list args;
|
|
|
|
+ cli();
|
|
+
|
|
va_start(args, fmt);
|
|
vsprintf(buf, fmt, args);
|
|
va_end(args);
|
|
+
|
|
+ if(!in_panic++) {
|
|
printk(KERN_EMERG "Kernel panic: %s\n",buf);
|
|
+ *((char *)0)=0;
|
|
+ }
|
|
+
|
|
+#if 0
|
|
if (current == task[0])
|
|
printk(KERN_EMERG "In swapper task - not syncing\n");
|
|
else
|
|
sys_sync();
|
|
- for(;;);
|
|
+#endif
|
|
+ {
|
|
+ int i,j;
|
|
+ for(i=0;i<300;i++) for(j=0;j<1000;j++) udelay(1000);
|
|
+ }
|
|
+ hard_reset_now();
|
|
}
|
|
diff -rub --unidir /pub/src/linux/kernel/linux/arch/i386/kernel/traps.c ./arch/i386/kernel/traps.c
|
|
--- /pub/src/linux/kernel/linux/arch/i386/kernel/traps.c Wed Feb 8 12:54:00 1995
|
|
+++ ./arch/i386/kernel/traps.c Wed Mar 22 15:33:47 1995
|
|
@@ -100,6 +100,7 @@
|
|
unsigned short ss;
|
|
unsigned long *stack, addr, module_start, module_end;
|
|
extern char start_kernel, etext;
|
|
+ extern int in_panic;
|
|
|
|
esp = (unsigned long) ®s->esp;
|
|
ss = KERNEL_DS;
|
|
@@ -109,29 +110,27 @@
|
|
esp = regs->esp;
|
|
ss = regs->ss;
|
|
}
|
|
- console_verbose();
|
|
- printk("%s: %04lx\n", str, err & 0xffff);
|
|
- printk("EIP: %04x:%08lx\nEFLAGS: %08lx\n", 0xffff & regs->cs,regs->eip,regs->eflags);
|
|
- printk("eax: %08lx ebx: %08lx ecx: %08lx edx: %08lx\n",
|
|
+ console_verbose(); cli();
|
|
+ printk("\n" KERN_EMERG "%s: %04lx ", str, err & 0xffff);
|
|
+ printk(KERN_EMERG "EIP: %04x:%08lx EFLAGS: %08lx\n", 0xffff & regs->cs,regs->eip,regs->eflags);
|
|
+ printk(KERN_EMERG "eax: %08lx ebx: %08lx ecx: %08lx edx: %08lx\n",
|
|
regs->eax, regs->ebx, regs->ecx, regs->edx);
|
|
- printk("esi: %08lx edi: %08lx ebp: %08lx esp: %08lx\n",
|
|
+ printk(KERN_EMERG "esi: %08lx edi: %08lx ebp: %08lx esp: %08lx\n",
|
|
regs->esi, regs->edi, regs->ebp, esp);
|
|
- printk("ds: %04x es: %04x fs: %04x gs: %04x ss: %04x\n",
|
|
+ printk(KERN_EMERG "ds: %04x es: %04x fs: %04x gs: %04x ss: %04x\n",
|
|
regs->ds, regs->es, regs->fs, regs->gs, ss);
|
|
store_TR(i);
|
|
if (STACK_MAGIC != *(unsigned long *)current->kernel_stack_page)
|
|
- printk("Corrupted stack page\n");
|
|
- printk("Process %s (pid: %d, process nr: %d, stackpage=%08lx)\nStack: ",
|
|
+ printk(KERN_EMERG "Corrupted stack page; ");
|
|
+ printk(KERN_EMERG "Process %s (pid: %d, process nr: %d, stackpage=%08lx)\nStack: ",
|
|
current->comm, current->pid, 0xffff & i, current->kernel_stack_page);
|
|
stack = (unsigned long *) esp;
|
|
for(i=0; i < kstack_depth_to_print; i++) {
|
|
if (((long) stack & 4095) == 0)
|
|
break;
|
|
- if (i && ((i % 8) == 0))
|
|
- printk("\n ");
|
|
- printk("%08lx ", get_seg_long(ss,stack++));
|
|
+ printk("%lx ", get_seg_long(ss,stack++));
|
|
}
|
|
- printk("\nCall Trace: ");
|
|
+ printk("\n" KERN_EMERG "Call Trace: ");
|
|
stack = (unsigned long *) esp;
|
|
i = 1;
|
|
module_start = ((high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1));
|
|
@@ -149,16 +148,12 @@
|
|
if (((addr >= (unsigned long) &start_kernel) &&
|
|
(addr <= (unsigned long) &etext)) ||
|
|
((addr >= module_start) && (addr <= module_end))) {
|
|
- if (i && ((i % 8) == 0))
|
|
- printk("\n ");
|
|
- printk("%08lx ", addr);
|
|
+ printk("%lx ", addr);
|
|
i++;
|
|
}
|
|
}
|
|
- printk("\nCode: ");
|
|
- for(i=0;i<20;i++)
|
|
- printk("%02x ",0xff & get_seg_byte(regs->cs,(i+(char *)regs->eip)));
|
|
- printk("\n");
|
|
+ in_panic++;
|
|
+ panic("Crash");
|
|
do_exit(SIGSEGV);
|
|
}
|
|
|