Floating point math in kernel interrupt -- am I doing this right? (repost)

Dan Malek dan at embeddedalley.com
Mon Feb 6 23:27:43 EST 2006


On Feb 5, 2006, at 9:29 PM, Jeremy Friesner wrote:

> ....   and the mixing is done inside an
> interrupt routine that runs 6000 times per second, and calculates 8 
> samples
> per interrupt.

Bad news.  No Floating Point allowed in the kernel.

> In order to do the necessary floating point math, without corrupting 
> the state
> of any other processes that might be using the FPU, the interrupt 
> routine
> first saves the state of the FPU registers to the stack, then does the 
> math,
> then restores FPU registers again, before returning.

Not on 82xx.  All floating point is done in hardware.

> ....  The oops
> looks like this:

These aren't helpful without some supporting information, like
symbols, or learn to use ksymoops.

> So my question is, is there some minor detail that my 
> FPU-state-save/restore
> code is missing, that would cause these sort of symptoms?

Just get all of this out of the kernel.  If you used the standard ALSA
drivers and framework, lots of mixing features are available to you.
If you need some custom mixing, just write a plug-in to do it.
Your data rates are so low they don't justify making any hacks
like this.

Thanks.

	-- Dan




More information about the Linuxppc-embedded mailing list