Hi, when hvn(4) attaches it sends commands and waits for replies to come back in, hence the interrupt function is being polled. Unfortunately it seems that the 'receive pipe' has both command completion and data packets. As it turns out, while hvn(4) is just setting up the pipes, it can already receive packets, which I have seen happening on Hyper-V.
This essentially means that if_input() is being called *before* the card is set up (or UP). This seems wrong. Apparently on drivers like em(4) we only read packets if IFF_RUNNING is set. I think in the case of hvn(4), we should drop packets unless IFF_RUNNING is set. Opinions? Patrick diff --git a/sys/dev/pv/if_hvn.c b/sys/dev/pv/if_hvn.c index f12e2f935ca..4306f717baf 100644 --- a/sys/dev/pv/if_hvn.c +++ b/sys/dev/pv/if_hvn.c @@ -1470,7 +1470,10 @@ hvn_rndis_input(struct hvn_softc *sc, uint64_t tid, void *arg) } hvn_nvs_ack(sc, tid); - if_input(ifp, &ml); + if (ifp->if_flags & IFF_RUNNING) + if_input(ifp, &ml); + else + ml_purge(&ml); } static inline struct mbuf *