On Thu, 27 May 1999, Dennis wrote:

> At 12:26 PM 5/27/99 -0700, you wrote:
> >> 
> >> We've encountered a situation where mbuf allocations inside a device
> >> interrupt handler fails occasionally...and it always seems to happen when
> >> rtalloc() is interrupted. Is this due to some sort of locking (rtalloc is
> >> run at splnet())...should it perhaps be run at splimp() to avoid this
> problem?
> >
> >It sounds like your device's interrupt handler should be in the 'net' 
> >mask; you certainly shouldn't be doing anything that manipulates mbufs 
> >in a non-'net'-masked interrupt handler.
> 
> Well how does one check/set this?

Splnet is a 'soft interrupt' level.

the device drivers should all use splimp()

Soft interrupts are by definition held off while a hardware interrupt is
being processes,
however you may need to occasionally rais your spl level to splimp() 
when you need to ensure that a hardware interrupt is held off.

I believe the old 'net' keyword in config files implied splimp, rather
than splnet.

julian


> 
> >
> >> What other causes for mbuf failures might reasonably be expected? Is
> >> allocating mbufs at interrupt time something that wasnt expected in the
> >> original system design?
> >
> >The mbuf pool might be empty.

You should always be ready to handle a mbuf allocation failure at the
lowest levels where you cannot sleep. The problem may be maomentary but as
you can't sleep() you can't wait for it to fix itself.


> 
> This one I figured out :-)
> 
> Dennis
> 
> 
> 
> To Unsubscribe: send mail to majord...@freebsd.org
> with "unsubscribe freebsd-hackers" in the body of the message
> 



To Unsubscribe: send mail to majord...@freebsd.org
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to