floating points in kernel space

Greg Freemyer greg.freemyer at gmail.com
Tue Jan 4 17:32:25 EST 2011


On Tue, Jan 4, 2011 at 5:19 PM, julie Sullivan <kernelmail.jms at gmail.com> wrote:
>
>>
>> On Tue, Jan 4, 2011 at 22:44, Dave Hylands <dhylands at gmail.com> wrote:
>> > That is correct. In some architectures, attempts to use floating point
>> > from the kernel will work. I've seen some x86 code that uses it.
>>
>>
>> AFAIK, once x86 didn't supported due to floating point related
>> registers are not correctly (or even doing?) saved and restored during
>> context switching. So maybe it is fixed now...
>>
>> --
>
> I've often wondered about this oft-cited kernel behaviour too, in my
> naivety.  I understand
> that this must be on a per-arch basis, but does this mean that the kernel
> doesn't police FP
> access at _all_ (perhaps this is what Mohit means too)? Does code like X for
> example have to access it directly, or does it just use the GPU? What about
> other user-space code - does it
> have a separate library and do its own security? Video drivers?
> Sorry if these are basic questions, I grepped for float in the kernel but
> as-yet the associated
> code looks really arcane to me - if anyone could answer any of these
> questions generally
> (if that's possible) that would be very helpful with visualizing the
> mechanism.
> Maybe I'm looking in the wrong place.
>
> When I started looking at the kernel I imagined this small, neat, concise
> piece of highly
> efficient code so I wasn't surprised there was no float (don't laugh - how
> one learns :-/ ) ...
> I suppose any float per-arch 'hacks' (to get a larger word size) would not
> be worth
> the overhead of the mode switch and extra code?
>
> Thanks
> Julie

Julie,

I think the issue is the kernel is extremely concerned with the
efficiency of the syscall path.

Very legitimately some benchmarks just measure that one path to see
how many thousands of syscalls per second can be made.

To accelerate that path as much as possible, the linux kenel chooses
not to incur the overhead of preserving the FP registers on every
syscall.

So kernel code that uses FP must first ensure any registers it uses
are preserved.  I don't recall ever writing any FP kernel code, so I
don't know what facilities are available to do that.

Greg



More information about the Kernelnewbies mailing list