Re: [OOPS] repeatable 2.4.8-ac7, 2.4.7-ac6 just run xdos

Andi Kleen
2001-08-22T11:16:24Z

Brian Gerst <bgerst@didntduck.org> writes:

> >
> > CPU: 0
> > EIP: 0010:[<c0180a18>]
> > Using defaults from ksymoops -t elf32-i386 -a i386
> > EFLAGS: 00010002
> > eax: 00001000 ebx: c4562368 ecx: 00000000 edx: 00000001
> > esi: c4562368 edi: c4a954d4 ebp: 00000001 esp: c6887d88
> > ds: 008 es: 0000 ss: 0018
> ^^^^
> Here is your problem. %es is set to the null segment. I had my
> suspicions about the segment reload optimisation in the -ac kernels, and
> this proves it. Try backing out the changes to arch/i386/kernel/entry.S
> and include/asm-i386/hw_irq.h and see if that fixes the problem.

This patch should fix the problem. One assumption coded into the reload
optimization is violated by vm86 mode. Please test.

--- linux-2.4.8-ac7-work/include/asm-i386/hw_irq.h-SEG2 Mon Aug 20 02:54:53 2001
+++ linux-2.4.8-ac7-work/include/asm-i386/hw_irq.h Wed Aug 22 13:02:16 2001
@@ -114,8 +114,10 @@
"cmpl %eax,7*4(%esp)\n\t" \
"je 1f\n\t" \
"movl %eax,%ds\n\t" \
+ "1: cmpl %eax,8*4(%esp)\n\t" \
+ "je 2f\n\t" \
"movl %eax,%es\n\t" \
- "1:\n\t"
+ "2:\n\t"

#define IRQ_NAME2(nr) nr##_interrupt(void)
#define IRQ_NAME(nr) IRQ_NAME2(IRQ##nr)

-Andi