On Thu, Feb 7, 2019 at 12:27 PM Eric Dumazet <eduma...@google.com> wrote: > > netif_rx() must be called under a strict contract. > > At device dismantle phase, core networking clears IFF_UP > and flush_all_backlogs() is called after rcu grace period > to make sure no incoming packet might be in a cpu backlog > and still referencing the device. > > Most drivers call netif_rx() from their interrupt handler, > and since the interrupts are disabled at device dismantle, > netif_rx() does not have to check dev->flags & IFF_UP > > Virtual drivers do not have this guarantee, and must > therefore make the check themselves.
Since other netif_rx() callers seem to have the same issue, I wonder if we simply could add a generic check. Most high performance drivers no longer call netif_rx() so an extra check in it wont be a problem.