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

Andi Kleen
2004-06-16T21:40:26Z

eliot@cincom.com 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