diff options
Diffstat (limited to 'include/linux/netdevice.h')
| -rw-r--r-- | include/linux/netdevice.h | 55 | 
1 files changed, 38 insertions, 17 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 05d6f3facd5a..eddf8ee270e7 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -253,11 +253,17 @@ struct netdev_hw_addr_list {  #define netdev_uc_empty(dev) netdev_hw_addr_list_empty(&(dev)->uc)  #define netdev_for_each_uc_addr(ha, dev) \  	netdev_hw_addr_list_for_each(ha, &(dev)->uc) +#define netdev_for_each_synced_uc_addr(_ha, _dev) \ +	netdev_for_each_uc_addr((_ha), (_dev)) \ +		if ((_ha)->sync_cnt)  #define netdev_mc_count(dev) netdev_hw_addr_list_count(&(dev)->mc)  #define netdev_mc_empty(dev) netdev_hw_addr_list_empty(&(dev)->mc)  #define netdev_for_each_mc_addr(ha, dev) \  	netdev_hw_addr_list_for_each(ha, &(dev)->mc) +#define netdev_for_each_synced_mc_addr(_ha, _dev) \ +	netdev_for_each_mc_addr((_ha), (_dev)) \ +		if ((_ha)->sync_cnt)  struct hh_cache {  	unsigned int	hh_len; @@ -546,8 +552,8 @@ static inline bool napi_if_scheduled_mark_missed(struct napi_struct *n)  {  	unsigned long val, new; +	val = READ_ONCE(n->state);  	do { -		val = READ_ONCE(n->state);  		if (val & NAPIF_STATE_DISABLE)  			return true; @@ -555,7 +561,7 @@ static inline bool napi_if_scheduled_mark_missed(struct napi_struct *n)  			return false;  		new = val | NAPIF_STATE_MISSED; -	} while (cmpxchg(&n->state, val, new) != val); +	} while (!try_cmpxchg(&n->state, &val, new));  	return true;  } @@ -934,6 +940,7 @@ struct net_device_path_ctx {  };  enum tc_setup_type { +	TC_QUERY_CAPS,  	TC_SETUP_QDISC_MQPRIO,  	TC_SETUP_CLSU32,  	TC_SETUP_CLSFLOWER, @@ -1851,7 +1858,6 @@ enum netdev_ml_priv_type {   *	@tipc_ptr:	TIPC specific data   *	@atalk_ptr:	AppleTalk link   *	@ip_ptr:	IPv4 specific data - *	@dn_ptr:	DECnet specific data   *	@ip6_ptr:	IPv6 specific data   *	@ax25_ptr:	AX.25 specific data   *	@ieee80211_ptr:	IEEE 802.11 specific data, assign before registering @@ -2147,9 +2153,6 @@ struct net_device {  #if IS_ENABLED(CONFIG_ATALK)  	void 			*atalk_ptr;  #endif -#if IS_ENABLED(CONFIG_DECNET) -	struct dn_dev __rcu     *dn_ptr; -#endif  #if IS_ENABLED(CONFIG_AX25)  	void			*ax25_ptr;  #endif @@ -2551,16 +2554,15 @@ void netif_napi_add_weight(struct net_device *dev, struct napi_struct *napi,   * @dev:  network device   * @napi: NAPI context   * @poll: polling function - * @weight: default weight   *   * netif_napi_add() must be used to initialize a NAPI context prior to calling   * *any* of the other NAPI-related functions.   */  static inline void  netif_napi_add(struct net_device *dev, struct napi_struct *napi, -	       int (*poll)(struct napi_struct *, int), int weight) +	       int (*poll)(struct napi_struct *, int))  { -	netif_napi_add_weight(dev, napi, poll, weight); +	netif_napi_add_weight(dev, napi, poll, NAPI_POLL_WEIGHT);  }  static inline void @@ -2573,8 +2575,6 @@ netif_napi_add_tx_weight(struct net_device *dev,  	netif_napi_add_weight(dev, napi, poll, weight);  } -#define netif_tx_napi_add netif_napi_add_tx_weight -  /**   * netif_napi_add_tx() - initialize a NAPI context to be used for Tx only   * @dev:  network device @@ -3357,6 +3357,16 @@ static inline void netdev_txq_bql_complete_prefetchw(struct netdev_queue *dev_qu  #endif  } +/** + *	netdev_tx_sent_queue - report the number of bytes queued to a given tx queue + *	@dev_queue: network device queue + *	@bytes: number of bytes queued to the device queue + * + *	Report the number of bytes queued for sending/completion to the network + *	device hardware queue. @bytes should be a good approximation and should + *	exactly match netdev_completed_queue() @bytes. + *	This is typically called once per packet, from ndo_start_xmit(). + */  static inline void netdev_tx_sent_queue(struct netdev_queue *dev_queue,  					unsigned int bytes)  { @@ -3402,13 +3412,14 @@ static inline bool __netdev_tx_sent_queue(struct netdev_queue *dev_queue,  }  /** - * 	netdev_sent_queue - report the number of bytes queued to hardware - * 	@dev: network device - * 	@bytes: number of bytes queued to the hardware device queue + *	netdev_sent_queue - report the number of bytes queued to hardware + *	@dev: network device + *	@bytes: number of bytes queued to the hardware device queue   * - * 	Report the number of bytes queued for sending/completion to the network - * 	device hardware queue. @bytes should be a good approximation and should - * 	exactly match netdev_completed_queue() @bytes + *	Report the number of bytes queued for sending/completion to the network + *	device hardware queue#0. @bytes should be a good approximation and should + *	exactly match netdev_completed_queue() @bytes. + *	This is typically called once per packet, from ndo_start_xmit().   */  static inline void netdev_sent_queue(struct net_device *dev, unsigned int bytes)  { @@ -3423,6 +3434,15 @@ static inline bool __netdev_sent_queue(struct net_device *dev,  				      xmit_more);  } +/** + *	netdev_tx_completed_queue - report number of packets/bytes at TX completion. + *	@dev_queue: network device queue + *	@pkts: number of packets (currently ignored) + *	@bytes: number of bytes dequeued from the device queue + * + *	Must be called at most once per TX completion round (and not per + *	individual packet), so that BQL can adjust its limits appropriately. + */  static inline void netdev_tx_completed_queue(struct netdev_queue *dev_queue,  					     unsigned int pkts, unsigned int bytes)  { @@ -3802,6 +3822,7 @@ void netif_receive_skb_list(struct list_head *head);  gro_result_t napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb);  void napi_gro_flush(struct napi_struct *napi, bool flush_old);  struct sk_buff *napi_get_frags(struct napi_struct *napi); +void napi_get_frags_check(struct napi_struct *napi);  gro_result_t napi_gro_frags(struct napi_struct *napi);  struct packet_offload *gro_find_receive_by_type(__be16 type);  struct packet_offload *gro_find_complete_by_type(__be16 type);  |