forked from mirrors/linux
		
	netdev-genl: Elide napi_id when not present
There are at least two cases where napi_id may not present and the napi_id should be elided: 1. Queues could be created, but napi_enable may not have been called yet. In this case, there may be a NAPI but it may not have an ID and output of a napi_id should be elided. 2. TX-only NAPIs currently do not have NAPI IDs. If a TX queue happens to be linked with a TX-only NAPI, elide the NAPI ID from the netlink output as a NAPI ID of 0 is not useful for users. Signed-off-by: Joe Damato <jdamato@fastly.com> Reviewed-by: Sridhar Samudrala <sridhar.samudrala@intel.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Link: https://patch.msgid.link/20250205193751.297211-1-jdamato@fastly.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
		
							parent
							
								
									71f0dd5a32
								
							
						
					
					
						commit
						6597e8d358
					
				
					 2 changed files with 14 additions and 5 deletions
				
			
		|  | @ -24,6 +24,11 @@ | |||
|  */ | ||||
| #define MIN_NAPI_ID ((unsigned int)(NR_CPUS + 1)) | ||||
| 
 | ||||
| static inline bool napi_id_valid(unsigned int napi_id) | ||||
| { | ||||
| 	return napi_id >= MIN_NAPI_ID; | ||||
| } | ||||
| 
 | ||||
| #define BUSY_POLL_BUDGET 8 | ||||
| 
 | ||||
| #ifdef CONFIG_NET_RX_BUSY_POLL | ||||
|  |  | |||
|  | @ -365,6 +365,13 @@ int netdev_nl_napi_set_doit(struct sk_buff *skb, struct genl_info *info) | |||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| static int nla_put_napi_id(struct sk_buff *skb, const struct napi_struct *napi) | ||||
| { | ||||
| 	if (napi && napi_id_valid(napi->napi_id)) | ||||
| 		return nla_put_u32(skb, NETDEV_A_QUEUE_NAPI_ID, napi->napi_id); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| netdev_nl_queue_fill_one(struct sk_buff *rsp, struct net_device *netdev, | ||||
| 			 u32 q_idx, u32 q_type, const struct genl_info *info) | ||||
|  | @ -386,9 +393,7 @@ netdev_nl_queue_fill_one(struct sk_buff *rsp, struct net_device *netdev, | |||
| 	switch (q_type) { | ||||
| 	case NETDEV_QUEUE_TYPE_RX: | ||||
| 		rxq = __netif_get_rx_queue(netdev, q_idx); | ||||
| 
 | ||||
| 		if (rxq->napi && nla_put_u32(rsp, NETDEV_A_QUEUE_NAPI_ID, | ||||
| 					     rxq->napi->napi_id)) | ||||
| 		if (nla_put_napi_id(rsp, rxq->napi)) | ||||
| 			goto nla_put_failure; | ||||
| 
 | ||||
| 		params = &rxq->mp_params; | ||||
|  | @ -398,8 +403,7 @@ netdev_nl_queue_fill_one(struct sk_buff *rsp, struct net_device *netdev, | |||
| 		break; | ||||
| 	case NETDEV_QUEUE_TYPE_TX: | ||||
| 		txq = netdev_get_tx_queue(netdev, q_idx); | ||||
| 		if (txq->napi && nla_put_u32(rsp, NETDEV_A_QUEUE_NAPI_ID, | ||||
| 					     txq->napi->napi_id)) | ||||
| 		if (nla_put_napi_id(rsp, txq->napi)) | ||||
| 			goto nla_put_failure; | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Joe Damato
						Joe Damato