Stop entering the network epoch in ether_input(), unless driver

is marked with IFF_NEEDSEPOCH.
This commit is contained in:
glebius 2020-01-23 01:47:43 +00:00
parent 961867cbc5
commit c224706f7b

View File

@ -809,7 +809,8 @@ ether_input(struct ifnet *ifp, struct mbuf *m)
* them up. This allows the drivers to amortize the receive lock.
*/
CURVNET_SET_QUIET(ifp->if_vnet);
NET_EPOCH_ENTER(et);
if (__predict_false(ifp->if_flags & IFF_NEEDSEPOCH))
NET_EPOCH_ENTER(et);
while (m) {
mn = m->m_nextpkt;
m->m_nextpkt = NULL;
@ -824,7 +825,8 @@ ether_input(struct ifnet *ifp, struct mbuf *m)
netisr_dispatch(NETISR_ETHER, m);
m = mn;
}
NET_EPOCH_EXIT(et);
if (__predict_false(ifp->if_flags & IFF_NEEDSEPOCH))
NET_EPOCH_EXIT(et);
CURVNET_RESTORE();
}