Re: arithmetic functions for linux driver

From: Richard B. Johnson
Date: Wed Mar 17 2004 - 13:36:31 EST


On Wed, 17 Mar 2004, VINOD GOPAL wrote:

> Hi,
> I am new to linux world and this mailing list.
>
> I need to use the arithmetic functions like sin, cos,
> exp, log, etc in linux device driver.
>
> On search read , not to use libm from kernel driver
> as it will harm the fpu registers.
>
> Do you have any insight how to support these
> functions in linux driver or any code that is
> available which I can make use of?
>
> thanks
> vinod

There are at least three problems.
(1) The kernel does not save and restore FPU registers across
system calls, only context-switches. This means that you will
probably break some user-mode code that is using the FPU.
You could, of course, save then restore the FPU state in your
code. However, there are other problems, read on.

(2) Some versions of the GCC compiler rely on the floating-
point library and do not generate FPU instructions in-line.
You absolutely-positively cannot link your kernel code against
such a library. The shared libraries don't even exist from
within the kernel, and the static library assumes user-mode
code.

(3) The use of FP within the kernel means that you have
lost the reason for a kernel module. Any such code must
execute in user-mode. The Unix/Linux way involves a
task called a daemon. Such a task does all the user-mode
stuff like floating-point math and file-I/O. It interfaces
with your driver either through the POSIX API (open/close/read/write),
/proc, or sockets.

A Unix/Linux "driver" is NOT anything like a Windows "driver".
Most Windows drivers are not drivers at all, but Libraries!
Such Libraries run in user-mode. Making such a library
in Linux is easy, just compile your library-code and link
against it. You can use any resources other user-mode code
can use.

Cheers,
Dick Johnson
Penguin : Linux version 2.4.24 on an i686 machine (797.90 BogoMips).
Note 96.31% of all statistics are fiction.


-
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/