From owner-freebsd-hackers Sun Aug 17 01:11:31 1997 Return-Path: Received: (from root@localhost) by hub.freebsd.org (8.8.5/8.8.5) id BAA16132 for hackers-outgoing; Sun, 17 Aug 1997 01:11:31 -0700 (PDT) Received: from agni.nuko.com (dummy.nuko.com [206.79.130.80]) by hub.freebsd.org (8.8.5/8.8.5) with ESMTP id BAA16126 for ; Sun, 17 Aug 1997 01:11:29 -0700 (PDT) Received: (from vinay@localhost) by agni.nuko.com (8.8.5/8.7.3) id BAA25936; Sun, 17 Aug 1997 01:09:46 -0700 (PDT) From: Vinay Bannai Message-Id: <199708170809.BAA25936@agni.nuko.com> Subject: Re: Device drivers and DMA details?? To: dg@root.com Date: Sun, 17 Aug 1997 01:09:46 -0700 (PDT) Cc: freebsd-hackers@FreeBSD.ORG In-Reply-To: <199708170133.SAA04271@implode.root.com> from "David Greenman" at "Aug 16, 97 06:33:20 pm" X-Mailer: ELM [version 2.4ME+ PL22 (25)] MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: owner-freebsd-hackers@FreeBSD.ORG X-Loop: FreeBSD.org Precedence: bulk According to David Greenman: > >Also, while examining the fxp driver, the fxp_start() seems to be > >invoked at the time of each incoming packet (or interrupt from the > >device). Wouldn't this not create a delay in sending packets? Or is it > >that the fxp_start() also gets invoked whenever a packet is shoved on > >the network IF queues? > > The driver start routine is also called when a packet is sent. See the > end of the ether_output() function in /sys/net/if_ethersubr.c. > > -DG > > David Greenman > Core-team/Principal Architect, The FreeBSD Project Ah!! I see that the interface's if_start() routine is called when the network is not busy (IFF_OACTIVE). This means that IFF_OACTIVE is set for the interface while receiving the packet or when the controller is busy. In fact it appears that the fxp driver never has the need to set the IFF_OACTIVE, so the fxp_start() gets called everytime a packet is queued on the interface queue unless it is running at a priority of the hardware interrupt from the network controller. In that case since the hardware interrupt from the network controller being higher than splimp() will make it possible for the IF queues to be flushed before the priority drops back to splimp or whatever. Is that a correct assesment? Thanks Vinay