Date: Wed, 21 May 2003 17:03:39 -0400 From: Dave Dolson <ddolson@sandvine.com> To: freebsd-net@freebsd.org Subject: netgraph: why does ng_ether bother enqueuing packets? Message-ID: <FE045D4D9F7AED4CBFF1B3B813C8533701918C71@mail.sandvine.com>
index | next in thread | raw e-mail
For reasons of performance, I tried the following modification to ng_ether.c
in FreeBSD 4.7, and it seemed to work fine.
The change is to call ng_send_data() vs. ng_queue_data().
We are running in polling mode, so ng_ether_input is called @ netisr anyhow.
(Always ?)
static void
ng_ether_input2(node_p node, struct mbuf **mp, struct ether_header *eh)
{
const priv_p priv = node->private;
meta_p meta = NULL;
int error;
/* Glue Ethernet header back on */
if ((error = ng_ether_glueback_header(mp, eh)) != 0)
return;
/* Send out lower/orphan hook */
+ #ifdef DEVICE_POLLING
+ /* send directly, since we're already @ splnet */
+ (void)ng_send_data(priv->lower, *mp, meta);
+ #else
(void)ng_queue_data(priv->lower, *mp, meta);
+ #endif
*mp = NULL;
}
Does anyone know why this might be bad?
Any reason why this couldn't be done in interrupt (non-polling) mode also?
The system's main purpose is to process packets.
Thanks,
David Dolson (ddolson@sandvine.com, www.sandvine.com)
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?FE045D4D9F7AED4CBFF1B3B813C8533701918C71>
