lkml.org 
[lkml]   [2003]   [Nov]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH][2.6-mm] Fix 4G/4G X11/vm86 oops
    On Thu, Nov 20, 2003 at 01:44:05AM -0600, Matt Mackall wrote:
    > On Wed, Nov 19, 2003 at 05:09:28PM -0600, Matt Mackall wrote:
    > > On Wed, Nov 19, 2003 at 02:32:10PM -0600, Matt Mackall wrote:
    > > >
    > > > Zwane's got a K6-2 500MHz. I've just managed to reproduce this on my
    > > > 1.4GHz Opteron box (with Debian gcc 3.2). Here, the "ooh la la" bit
    > > > doesn't help. So my suspicion is that the printk is changing the
    > > > timing just enough on Zwane's box that he's getting a timer interrupt
    > > > knocking him out of vm86 mode before he hits a fatal bit in the fault
    > > > handling path for 4/4. Printks in handle_vm86_trap, handle_vm86_fault,
    > > > do_trap:vm86_trap, and do_general_protection:gp_in_vm86 never fire so
    > > > there's probably something amiss in the trampoline code.
    > >
    > > Some more datapoints:
    > >
    > > CPU distro compiler video X result
    > > K6-2/500 connectiva 9 2.96 trident 4.3 reboot (zwane)
    > > K6-2/500 connectiva 9 3.2.2 trident 4.3 reboot (zwane)
    > > Opteron 240 debian unstable 3.2 S3 4.2.1 reboot
    > > Athlon 2100 debian unstable 3.2 radeon 7500 4.2.1 works
    > > P4M 1800 debian unstable 3.2 radeon m7 4.2.1 reboot
    >
    > And indeed it does turn out to be a problem with the trampoline
    > mechanics. The fix for -mm4:

    Cleanup, as pointed out by Zwane:

    Fix triple faulting on some boxes with 4G/4G


    mm-mpm/arch/i386/kernel/vm86.c | 3 +--
    1 files changed, 1 insertion(+), 2 deletions(-)

    diff -puN arch/i386/kernel/vm86.c~virtual-esp arch/i386/kernel/vm86.c
    --- mm/arch/i386/kernel/vm86.c~virtual-esp 2003-11-20 01:36:32.000000000 -0600
    +++ mm-mpm/arch/i386/kernel/vm86.c 2003-11-20 02:08:38.000000000 -0600
    @@ -303,10 +303,9 @@ static void do_sys_vm86(struct kernel_vm

    tss = init_tss + get_cpu();
    tsk->thread.esp0 = (unsigned long) &info->VM86_TSS_ESP0;
    - tss->esp0 = virtual_esp0(tsk);
    if (cpu_has_sep)
    tsk->thread.sysenter_cs = 0;
    - load_esp0(tss, &tsk->thread);
    + load_virtual_esp0(tss, tsk);
    put_cpu();

    tsk->thread.screen_bitmap = info->screen_bitmap;
    _



    --
    Matt Mackall : http://www.selenic.com : Linux development and consulting
    -
    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 13:58    [W:0.026 / U:29.404 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site