2004-01-08 00:00:13

by Pekka Pietikäinen

[permalink] [raw]
Subject: Use of floating point in the kernel

Hi

There are a few instances of use of floating point in 2.6,

--- linux-2.6.0-1.30/drivers/media/dvb/ttpci/av7110.c~ 2004-01-07 23:14:14.000000000 +0200
+++ linux-2.6.0-1.30/drivers/media/dvb/ttpci/av7110.c 2004-01-07 23:14:14.000000000 +0200
@@ -2673,9 +2673,9 @@
buf[1] = div & 0xff;
buf[2] = 0x8e;

- if (freq < (u32) 16*168.25 )
+ if (freq < 2692 ) /* 16*168.25 */
config = 0xa0;
- else if (freq < (u32) 16*447.25)
+ else if (freq < 7156) /* 16*447.25 */
config = 0x90;
else
config = 0x30;

(If I'm not mistaken a similar patch for this has already been sent to
Linus, just making sure the DVB people get this in their trees as well)
(u32) (16*168.25) would work too, I suppose.

The other case is a bit more widespread, patch below is mostly rhetoric :-)
http://www.winischhofer.net/linuxsisvga.shtml#download contains the latest version
of the sisfb that doesn't use floating point at all, so that is certainly the better
option.

--- linux-2.6.0-1.30/drivers/video/sis/sis_main.c~ 2004-01-08 01:27:44.909006216 +0200
+++ linux-2.6.0-1.30/drivers/video/sis/sis_main.c 2004-01-08 01:28:19.111806600 +0200
@@ -616,6 +616,7 @@
var->left_margin + var->xres + var->right_margin +
var->hsync_len;
unsigned int vtotal = 0;
+#error Use of floating point in the kernel is NOT safe!
double drate = 0, hrate = 0;
int found_mode = 0;
int old_mode;
--- linux-2.6.0-1.30/drivers/video/Kconfig~ 2004-01-08 01:25:37.570364632 +0200
+++ linux-2.6.0-1.30/drivers/video/Kconfig 2004-01-08 01:25:37.571364480 +0200
@@ -704,7 +704,7 @@

config FB_SIS
tristate "SIS acceleration"
- depends on FB && PCI
+ depends on FB && PCI && BROKEN
help
This is the frame buffer device driver for the SiS 630 and 640 Super
Socket 7 UMA cards. Specs available at <http://www.sis.com.tw/>.


--
Pekka Pietikainen


2004-01-08 03:34:26

by H. Peter Anvin

[permalink] [raw]
Subject: Re: Use of floating point in the kernel

Pekka Pietikainen wrote:
> Hi
>
> There are a few instances of use of floating point in 2.6,
>

Has anyone considered asking the gcc people to add an -fno-fpu (or
-mno-fpu) option, throwing an error if any FP instructions are used?

-hpa

2004-01-08 03:48:42

by Dave Jones

[permalink] [raw]
Subject: Re: Use of floating point in the kernel

On Wed, Jan 07, 2004 at 07:34:06PM -0800, H. Peter Anvin wrote:

> Has anyone considered asking the gcc people to add an -fno-fpu (or
> -mno-fpu) option, throwing an error if any FP instructions are used?

building with -msoft-float gets you this.

Dave

2004-01-08 03:52:44

by Linus Torvalds

[permalink] [raw]
Subject: Re: Use of floating point in the kernel



On Wed, 7 Jan 2004, H. Peter Anvin wrote:
>
> Pekka Pietikainen wrote:
> >
> > There are a few instances of use of floating point in 2.6,
>
> Has anyone considered asking the gcc people to add an -fno-fpu (or
> -mno-fpu) option, throwing an error if any FP instructions are used?

We really should, but there really are some rare cases where it is
actually ok.

In particular, you _can_ do math, if you just do the proper
"kernel_fpu_begin()"/"kernel_fpu_end()" around it, and you have reason to
believe that you can assume a math processor exists.

Is it needed? I dunno. I'd frown on it in general, but I don't see it
being fundamentally wrong under the rigth circumstances.

Linus

2004-01-08 03:54:49

by H. Peter Anvin

[permalink] [raw]
Subject: Re: Use of floating point in the kernel

Linus Torvalds wrote:
>
> We really should, but there really are some rare cases where it is
> actually ok.
>
> In particular, you _can_ do math, if you just do the proper
> "kernel_fpu_begin()"/"kernel_fpu_end()" around it, and you have reason to
> believe that you can assume a math processor exists.
>
> Is it needed? I dunno. I'd frown on it in general, but I don't see it
> being fundamentally wrong under the rigth circumstances.
>

Sure; however, perhaps those can be marked separately in the Makefile.

-hpa

2004-01-08 04:13:03

by Andi Kleen

[permalink] [raw]
Subject: Re: Use of floating point in the kernel

Dave Jones <[email protected]> writes:

> On Wed, Jan 07, 2004 at 07:34:06PM -0800, H. Peter Anvin wrote:
>
> > Has anyone considered asking the gcc people to add an -fno-fpu (or
> > -mno-fpu) option, throwing an error if any FP instructions are used?
>
> building with -msoft-float gets you this.

I think they will need an -fno-fpu option for the kernel at some point
anyways. As soon as gcc starts using SSE2 registers for integer
operations on SSE2 targets. My impression is that this point isn't
that far away anymore.

-Andi