Subject: Re: malloc above splimp
To: Niklas Hallqvist <niklas@appli.se>
From: None <chopps@emunix.emich.edu>
List: amiga-dev
Date: 08/31/1994 12:39:41
> I'm getting successful with the GoldenGate and the com driver.  Now I
> can actually use it for logging in and dialout.  However at high speeds
> there can occur some problems, one of them being malloc messing up its
> internal state.  After some investigation I found that malloc does
> splimp which is spl3 in the amiga port.  As I use si_addcallback at
> spl6 this can (and will) result in bad behaviour.  This morning I saw
> the following call chain (from memory, excuse me if I don't remember
> the exact names):

The point of si_callbacks as far as I saw was that you wanted to 
delay processing of a certain interrupt code to lower priority.  I
guess I need to here why your callbacks need splhigh() protection
(if I understand what your requesting).

If its do to interrupts from the IO bridge, is it possible to use
interrupt level 2 instead?  This is the level that IO should take
place at not level 6.  Interrupt level 6 is reserved for system clocks
and other things (?) of such high importance.

Changing splimp() to splhigh() whould have many unwanted side-effects
I would think.  I don't like the idea at all.  For example spltty()
would be interrupted by a level 6 interrupt to what would you do for that?

I have run into a similar problem however with the ASDG LAN Rover.
My board interrupts only at level 6.  To solve this I will use an
si_callback that processes most of the interrupt.  With the actual
level 6 handler just clearing the interrupt and saving it in a software
register for processing by the call back.  This is messy but its really
the only way to handle such problems.

> using a callback pool instead.  This would both be faster than malloc
> and an easy fix as it will only have local influences.  The drawback
> is that it has to be a static limit of callbacks, but as the descriptors

Using malloc is nice in that it doesn't waste any memory and it can
accomadte many requests all made at `once'.  I think we should keep it.

> On a related topic, we need to redo the interrupt system a bit in order
> to have drivers being LKMs.  We must have a interrupt handling
> registration during attachment like the i386 port.  I'm willing to
> write this if Chris says go.

I was going to write this and put it in after the release.  If you can wait
I would appreciate it.  If you need it now however go ahead.

Chris.

------------------------------------------------------------------------------