Re: Floating point in kernel

From: Paul Zimmerman (
Date: Wed May 03 2000 - 16:11:46 EST

>> I know this is not legal. However, I'm reviewing some kernel module code
>> which basically does:
>> unsigned long foo = some_other_ulong * 1.234;
>> This code has apparently been working for some time. According to C rules
>> of type promotion, "some_other_ulong" should be promoted to a double to
>> store the result of the expression, before discarding the fraction and
>> assigning to foo.
>> My question is, what are the likely problems to expect from this when
>> running in kernel-space (on x86 w/FPU)?

> RARE random errors in programs with FPU usage. Since kernel doing lazy
> store/restore FPU state and will just store garbage from your instruction
> instead of correct data. Of course in most cases it'll not change anything
> (only few flags and bottom of FPU stack should be changed and it's not
> oftent important info). Code itself should work fine :-)

Perhaps this code is in the initialization part of the module? In that
case, it would normally be run only once when the module is loaded
(usually at system startup), and thus have a very low probability of causing
a problem.

Nevertheless, you should e-mail the maintainer of the module and let him
know of the error.

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
Please read the FAQ at

This archive was generated by hypermail 2b29 : Sun May 07 2000 - 21:00:13 EST