From owner-freebsd-hackers Thu May 27 15: 7:16 1999 Delivered-To: freebsd-hackers@freebsd.org Received: from etinc.com (et-gw.etinc.com [207.252.1.2]) by hub.freebsd.org (Postfix) with ESMTP id 13A7E14C4E for ; Thu, 27 May 1999 15:06:50 -0700 (PDT) (envelope-from dennis@etinc.com) Received: from dbsys (dbsys.etinc.com [207.252.1.18]) by etinc.com (8.9.3/8.9.3) with SMTP id SAA04846; Thu, 27 May 1999 18:06:37 -0400 (EDT) Message-Id: <199905272206.SAA04846@etinc.com> X-Sender: dennis@etinc.com X-Mailer: QUALCOMM Windows Eudora Pro Version 4.0 Date: Thu, 27 May 1999 17:03:12 -0400 To: Julian Elischer From: Dennis Subject: Re: mbuf stuff Cc: hackers@freebsd.org In-Reply-To: References: <199905272140.RAA04730@etinc.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG At 02:57 PM 5/27/99 -0700, you wrote: > > >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 is easy to do, but the question is, I guess, what can be done to avoid it. Since most of the high speed drivers manipulate mbufs now, should the code that can cause mbuf allocation failures be at splimp()? Dennis To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message