summaryrefslogtreecommitdiffstats
path: root/sys/net/if_ethersubr.c
diff options
context:
space:
mode:
authordlg <dlg@openbsd.org>2008-04-10 23:15:45 +0000
committerdlg <dlg@openbsd.org>2008-04-10 23:15:45 +0000
commitd8b862828c08d9746eca849db0fd96b6e99eb466 (patch)
tree021f6316c2c7e6e6a680b104619427528c4789c1 /sys/net/if_ethersubr.c
parentAlso count multicast packets and input bytes for interfaces enslaved by (diff)
downloadwireguard-openbsd-d8b862828c08d9746eca849db0fd96b6e99eb466.tar.xz
wireguard-openbsd-d8b862828c08d9746eca849db0fd96b6e99eb466.zip
introduce mitigation for the calling of an interfaces start routine.
decent drivers prefer to have a lot of packets on the send queue so they can queue a lot of them up on the tx ring and then post them all in one big chunk. unfortunately our stack queues one packet onto the send queue and then calls the start handler immediately. this mitigates against that queue, send, queue, send behaviour by trying to call the start routine only once per softnet. now its queue, queue, queue, send. this is the result of a lot of discussion with claudio@ tested by many.
Diffstat (limited to 'sys/net/if_ethersubr.c')
-rw-r--r--sys/net/if_ethersubr.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c
index 08c3c67968e..6d3247f628b 100644
--- a/sys/net/if_ethersubr.c
+++ b/sys/net/if_ethersubr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_ethersubr.c,v 1.115 2008/04/10 22:33:14 brad Exp $ */
+/* $OpenBSD: if_ethersubr.c,v 1.116 2008/04/10 23:15:45 dlg Exp $ */
/* $NetBSD: if_ethersubr.c,v 1.19 1996/05/07 02:40:30 thorpej Exp $ */
/*
@@ -432,8 +432,7 @@ ether_output(ifp0, m0, dst, rt0)
#endif /* NCARP > 0 */
if (mflags & M_MCAST)
ifp->if_omcasts++;
- if ((ifp->if_flags & IFF_OACTIVE) == 0)
- (*ifp->if_start)(ifp);
+ if_start(ifp);
splx(s);
return (error);