diff options
| author | 2008-04-10 23:15:45 +0000 | |
|---|---|---|
| committer | 2008-04-10 23:15:45 +0000 | |
| commit | d8b862828c08d9746eca849db0fd96b6e99eb466 (patch) | |
| tree | 021f6316c2c7e6e6a680b104619427528c4789c1 /sys/net/if_ethersubr.c | |
| parent | Also count multicast packets and input bytes for interfaces enslaved by (diff) | |
| download | wireguard-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.c | 5 |
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); |
