lkml.org 
[lkml]   [2001]   [Aug]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [OOPS] repeatable 2.4.8-ac7, 2.4.7-ac6 just run xdos
Andi Kleen wrote:
>
> 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.

Yes. What happened here is that %ds and %es were not being updated
atomically. Under normal operation, this would just leave %es with
USER_DS, which is sufficiently equivalent to KERNEL_DS to not cause a
fault. Coming out of vm86 mode however forces the data segment
registers to null after saving the real mode values on the stack. If an
interrupt happened between setting %ds and %es (what are the odds?) then
that assumption would fail and leave %es null, causing the next string
instruction to go boom. The same fix should be applied to entry.S as
well.

--

Brian Gerst
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 12:57    [W:0.083 / U:0.032 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site