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>
next in thread | raw e-mail | index | archive | help
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)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?FE045D4D9F7AED4CBFF1B3B813C8533701918C71>