net: move skb_mark_napi_id() into core networking stack
We would like to automatically provide busy polling support to all NAPI drivers, without them having to implement anything. skb_mark_napi_id() can be called from napi_gro_receive() and napi_get_frags(). Few drivers are still calling skb_mark_napi_id() because they use netif_receive_skb(). They should eventually call napi_gro_receive() instead. I will leave this to drivers maintainers. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									868fdb0606
								
							
						
					
					
						commit
						93f93a4404
					
				| @ -2024,7 +2024,6 @@ read_again: | ||||
| 		skb->dev = netdev; | ||||
| 		skb->protocol = eth_type_trans(skb, netdev); | ||||
| 		skb_record_rx_queue(skb, channel->queue_index); | ||||
| 		skb_mark_napi_id(skb, napi); | ||||
| 
 | ||||
| 		napi_gro_receive(napi, skb); | ||||
| 
 | ||||
|  | ||||
| @ -1094,8 +1094,6 @@ reuse_rx: | ||||
| 			__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), | ||||
| 					       le16_to_cpu(cqe_fp->vlan_tag)); | ||||
| 
 | ||||
| 		skb_mark_napi_id(skb, &fp->napi); | ||||
| 
 | ||||
| 		napi_gro_receive(&fp->napi, skb); | ||||
| next_rx: | ||||
| 		rx_buf->data = NULL; | ||||
|  | ||||
| @ -1864,7 +1864,6 @@ static void do_gro(struct sge_eth_rxq *rxq, const struct pkt_gl *gl, | ||||
| 	skb->truesize += skb->data_len; | ||||
| 	skb->ip_summed = CHECKSUM_UNNECESSARY; | ||||
| 	skb_record_rx_queue(skb, rxq->rspq.idx); | ||||
| 	skb_mark_napi_id(skb, &rxq->rspq.napi); | ||||
| 	pi = netdev_priv(skb->dev); | ||||
| 	if (pi->rxtstamp) | ||||
| 		cxgb4_sgetim_to_hwtstamp(adapter, skb_hwtstamps(skb), | ||||
|  | ||||
| @ -2184,7 +2184,6 @@ static void be_rx_compl_process_gro(struct be_rx_obj *rxo, | ||||
| 		skb_set_hash(skb, rxcp->rss_hash, PKT_HASH_TYPE_L3); | ||||
| 
 | ||||
| 	skb->csum_level = rxcp->tunneled; | ||||
| 	skb_mark_napi_id(skb, napi); | ||||
| 
 | ||||
| 	if (rxcp->vlanf) | ||||
| 		__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), rxcp->vlan_tag); | ||||
|  | ||||
| @ -1632,7 +1632,6 @@ static int i40e_clean_rx_irq_ps(struct i40e_ring *rx_ring, int budget) | ||||
| 			continue; | ||||
| 		} | ||||
| #endif | ||||
| 		skb_mark_napi_id(skb, &rx_ring->q_vector->napi); | ||||
| 		i40e_receive_skb(rx_ring, skb, vlan_tag); | ||||
| 
 | ||||
| 		rx_desc->wb.qword1.status_error_len = 0; | ||||
|  | ||||
| @ -1090,7 +1090,6 @@ static int i40e_clean_rx_irq_ps(struct i40e_ring *rx_ring, int budget) | ||||
| 			continue; | ||||
| 		} | ||||
| #endif | ||||
| 		skb_mark_napi_id(skb, &rx_ring->q_vector->napi); | ||||
| 		i40e_receive_skb(rx_ring, skb, vlan_tag); | ||||
| 
 | ||||
| 		rx_desc->wb.qword1.status_error_len = 0; | ||||
|  | ||||
| @ -1659,6 +1659,7 @@ static void ixgbe_process_skb_fields(struct ixgbe_ring *rx_ring, | ||||
| static void ixgbe_rx_skb(struct ixgbe_q_vector *q_vector, | ||||
| 			 struct sk_buff *skb) | ||||
| { | ||||
| 	skb_mark_napi_id(skb, &q_vector->napi); | ||||
| 	if (ixgbe_qv_busy_polling(q_vector)) | ||||
| 		netif_receive_skb(skb); | ||||
| 	else | ||||
| @ -2123,7 +2124,6 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector, | ||||
| 		} | ||||
| 
 | ||||
| #endif /* IXGBE_FCOE */ | ||||
| 		skb_mark_napi_id(skb, &q_vector->napi); | ||||
| 		ixgbe_rx_skb(q_vector, skb); | ||||
| 
 | ||||
| 		/* update budget accounting */ | ||||
|  | ||||
| @ -925,7 +925,6 @@ int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int bud | ||||
| 						PKT_HASH_TYPE_L3); | ||||
| 
 | ||||
| 			skb_record_rx_queue(gro_skb, cq->ring); | ||||
| 			skb_mark_napi_id(gro_skb, &cq->napi); | ||||
| 
 | ||||
| 			if (ring->hwtstamp_rx_filter == HWTSTAMP_FILTER_ALL) { | ||||
| 				timestamp = mlx4_en_get_cqe_ts(cqe); | ||||
| @ -988,8 +987,6 @@ int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int bud | ||||
| 					       timestamp); | ||||
| 		} | ||||
| 
 | ||||
| 		skb_mark_napi_id(skb, &cq->napi); | ||||
| 
 | ||||
| 		napi_gro_receive(&cq->napi, skb); | ||||
| next: | ||||
| 		for (nr = 0; nr < priv->num_frags; nr++) | ||||
|  | ||||
| @ -243,7 +243,6 @@ int mlx5e_poll_rx_cq(struct mlx5e_cq *cq, int budget) | ||||
| 		wqe            = mlx5_wq_ll_get_wqe(&rq->wq, wqe_counter); | ||||
| 		skb            = rq->skb[wqe_counter]; | ||||
| 		prefetch(skb->data); | ||||
| 		skb_mark_napi_id(skb, cq->napi); | ||||
| 		rq->skb[wqe_counter] = NULL; | ||||
| 
 | ||||
| 		dma_unmap_single(rq->pdev, | ||||
|  | ||||
| @ -1488,7 +1488,6 @@ myri10ge_rx_done(struct myri10ge_slice_state *ss, int len, __wsum csum) | ||||
| 	} | ||||
| 	myri10ge_vlan_rx(mgp->dev, va, skb); | ||||
| 	skb_record_rx_queue(skb, ss - &mgp->ss[0]); | ||||
| 	skb_mark_napi_id(skb, &ss->napi); | ||||
| 
 | ||||
| 	if (polling) { | ||||
| 		int hlen; | ||||
| @ -1506,6 +1505,7 @@ myri10ge_rx_done(struct myri10ge_slice_state *ss, int len, __wsum csum) | ||||
| 		skb->data_len -= hlen; | ||||
| 		skb->tail += hlen; | ||||
| 		skb->protocol = eth_type_trans(skb, dev); | ||||
| 		skb_mark_napi_id(skb, &ss->napi); | ||||
| 		netif_receive_skb(skb); | ||||
| 	} | ||||
| 	else | ||||
|  | ||||
| @ -463,7 +463,6 @@ efx_rx_packet_gro(struct efx_channel *channel, struct efx_rx_buffer *rx_buf, | ||||
| 
 | ||||
| 	skb_record_rx_queue(skb, channel->rx_queue.core_index); | ||||
| 
 | ||||
| 	skb_mark_napi_id(skb, &channel->napi_str); | ||||
| 	gro_result = napi_gro_frags(napi); | ||||
| 	if (gro_result != GRO_DROP) | ||||
| 		channel->irq_mod_score += 2; | ||||
|  | ||||
| @ -516,8 +516,6 @@ static void receive_buf(struct virtnet_info *vi, struct receive_queue *rq, | ||||
| 		skb_shinfo(skb)->gso_segs = 0; | ||||
| 	} | ||||
| 
 | ||||
| 	skb_mark_napi_id(skb, &rq->napi); | ||||
| 
 | ||||
| 	napi_gro_receive(&rq->napi, skb); | ||||
| 	return; | ||||
| 
 | ||||
|  | ||||
| @ -4356,6 +4356,7 @@ static gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb) | ||||
| 
 | ||||
| gro_result_t napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb) | ||||
| { | ||||
| 	skb_mark_napi_id(skb, napi); | ||||
| 	trace_napi_gro_receive_entry(skb); | ||||
| 
 | ||||
| 	skb_gro_reset_offset(skb); | ||||
| @ -4390,6 +4391,7 @@ struct sk_buff *napi_get_frags(struct napi_struct *napi) | ||||
| 	if (!skb) { | ||||
| 		skb = napi_alloc_skb(napi, GRO_MAX_HEAD); | ||||
| 		napi->skb = skb; | ||||
| 		skb_mark_napi_id(skb, napi); | ||||
| 	} | ||||
| 	return skb; | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user