linux-mips
[Top] [All Lists]

Re: Float crash. Fix in exit_thread()

To: "Kevin D. Kissell" <kevink@mips.com>
Subject: Re: Float crash. Fix in exit_thread()
From: Kjeld Borch Egevang <kjelde@mips.com>
Date: Thu, 6 Jun 2002 23:00:04 +0200 (CEST)
Cc: linux-mips mailing list <linux-mips@oss.sgi.com>
In-reply-to: <007501c20d86$f339b7a0$10eca8c0@grendel>
Sender: owner-linux-mips@oss.sgi.com
On Thu, 6 Jun 2002, Kevin D. Kissell wrote:

> It's been a while since I worked on the code,
> but I'm not sure why last_task_used_math
> needs to be cleared if there is no FPU.
> The way the FPU emulator was integrated,
> the FPU register storage *is* the thread
> context, so if there is no FPU, there was no 
> FPU context switching, lazy or otherwise.  
> Sounds like someone broke this.

If you check do_cpu in traps.c you'll find:

fp_emul:
        if (last_task_used_math != current) {
                if (!current->used_math) {
                        fpu_emulator_init_fpu();
                        current->used_math = 1;
                }
        }
        sig = fpu_emulator_cop1Handler(0, regs, &current->thread.fpu.soft);
        last_task_used_math = current;
        if (sig)


fpu_emulator_init_fpu() is not called, when two processes are created like 
I described. Alternatively the test "if (last_task_used_math != current)" 
could be removed.

> Beyond that, the CFC1 instruction is presumably
> there because in the R4000 (at least) it is specified
> as the means to force the FP pipeline to drain
> before the context switch.  I would suppose this
> would be done in Linux to avoid mis-attribution
> of FP exceptions. (See chapter 6 of the R4000 
> User's manual, page 160 in the Second Edition).

Great. It was exactly something like that I was looking for. Perhaps a 
comment would be nice in the code here ;-)

/Kjeld

-- 
_    _ ____  ___                       Mailto:kjelde@mips.com
|\  /|||___)(___    MIPS Denmark       Direct: +45 44 86 55 85
| \/ |||    ____)   Lautrupvang 4 B    Switch: +45 44 86 55 55
  TECHNOLOGIES      DK-2750 Ballerup   Fax...: +45 44 86 55 56
                    Denmark            http://www.mips.com/


<Prev in Thread] Current Thread [Next in Thread>