Re: PROBLEM: 2.6 kernels on x86 do not preserve FPU flags acrosscontext switches

From: Andi Kleen
Date: Wed Jun 16 2004 - 16:42:49 EST



eliot@xxxxxxxxxx writes:

> I am the team lead and chief VM developer for a Smaltalk
> implementation based on a JIT execution engine. Our customers
> have been seeing rare incorrect floating-point results in
> intensive fp applications on 2.6 kernels using various x86
> compatible processors. These problems do not occur on
> previous kernel versons. We recently had occasion to
> reimplement our fp primitives to avoid severe performance
> problems on Xeon processors that were traced to Xeon's
> relatively slow implementation of fnclex and fstsw. The older

Funny, Linux just added fnclex to a critical path on popular request.
But I guess it will need to be removed again, we already discussed
that.


> I don't know whether any action on your part is appropriate. The
> use of the FPU status flags is presumably rare on linux (I believe
> that neither gcc nor glibc make use of them). But "exotic"
> execution machinery such as runtimes for dynamic or functional
> languages (language implementations that may not use IEEE arithmetic
> and instead flag Infs and NaNs as an error) may fall foul of this
> issue. Since previous versions of the kernel on x86 apparently do
> preserve the FPU status flags perhaps its simple to preserve the old
> behaviour. At the very least let me suggest you document the
> limitation.

This sounds like a serious kernel bug that should be fixed if
true. Can you perhaps create a simple demo program that shows the
problem and post it?

On what CPUs does the failure occur? Linux uses different paths
depending on if the CPU supports SSE or not.

Does your program receive signals? Could it be related to them?

-Andi

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