On Tue, May 2, 2017 at 6:10 AM, Miroslav Lichvar <mlich...@redhat.com> wrote: > Since commit b68581778cd0 ("net: Make skb->skb_iif always track > skb->dev") skbs don't have the original index of the interface which > received the packet. This information is now needed for a new control > message related to hardware timestamping. > > Instead of adding a new field to skb, we can find the device by the NAPI > ID if it is available, i.e. CONFIG_NET_RX_BUSY_POLL is enabled and the > driver is using NAPI. Add dev_get_by_napi_id() and also skb_napi_id() to > hide the CONFIG_NET_RX_BUSY_POLL ifdef. > > CC: Richard Cochran <richardcoch...@gmail.com> > CC: Willem de Bruijn <will...@google.com> > Suggested-by: Willem de Bruijn <will...@google.com> > Signed-off-by: Miroslav Lichvar <mlich...@redhat.com>
> /** > + * dev_get_by_napi_id - find a device by napi_id > + * @napi_id: ID of the NAPI struct > + * > + * Search for an interface by NAPI ID. Returns %NULL if the device > + * is not found or a pointer to the device. The device has not had > + * its reference counter increased so the caller must be careful > + * about locking. The caller must hold RCU lock. Instead of a comment, can check with WARN_ON_ONCE(!rcu_read_lock_held()); > + */ > + > +struct net_device *dev_get_by_napi_id(unsigned int napi_id) > +{ > + struct napi_struct *napi; > + > + if (napi_id < MIN_NAPI_ID) > + return NULL; > + > + napi = napi_by_id(napi_id); > + if (napi) > + return napi->dev; > + > + return NULL; make return NULL the branch expected not taken. return napi ? napi->dev : NULL;