Re: This can freeze linux 2.0 on 486 [patch included]

Ingo Molnar (mingo@pc5829.hil.siemens.at)
Sat, 25 Jan 1997 15:08:10 +0100 (MET)


On Sat, 25 Jan 1997, Praveen Dwivedi wrote:

> I have a 486/DX4 100Mhz. I don't know the stepping id.

> This happened when you do a ls immediately after previous steps
> The shell is killed.
>
>
> Jan 26 06:58:04 quark kernel: Oops: 0002
> Jan 26 06:58:04 quark kernel: CPU: 0
> Jan 26 06:58:04 quark kernel: EIP: 0010:[<00120281>]

could you please try this patch?

It goes cleanly both into 2.0.28 and 2.1.22. You simply have to do a 'make
zImage' (or whatever you use) after applying the patch. Only one C module
gets recompiled.

[ snip out the patch from this mail and do a
'cd /usr/src;patch -p0 < thispatch'. Assuming that you have your kernel
sources in /usr/src/linux ]

-- mingo

--- linux/arch/i386/kernel/traps.c.original Sat Jan 25 15:03:14 1997
+++ linux/arch/i386/kernel/traps.c Sat Jan 25 15:03:42 1997
@@ -190,6 +190,19 @@
DO_ERROR(12, SIGBUS, "stack segment", stack_segment, current)
DO_ERROR(17, SIGSEGV, "alignment check", alignment_check, current)
DO_ERROR(18, SIGSEGV, "reserved", reserved, current)
+DO_ERROR(19, SIGSEGV, "cache flush denied", cache_flush_denied, current)
+
+asmlinkage void cache_flush_denied(struct pt_regs * regs, long error_code)
+{
+ if (regs->eflags & VM_MASK) {
+ handle_vm86_fault((struct kernel_vm86_regs *) regs, error_code);
+ return;
+ }
+ die_if_kernel("cache flush denied",regs,error_code);
+ current->tss.error_code = error_code;
+ current->tss.trap_no = 19;
+ force_sig(SIGSEGV, current);
+}

asmlinkage void do_general_protection(struct pt_regs * regs, long error_code)
{