forked from mirrors/linux
		
	igc: Add TransmissionOverrun counter
Add TransmissionOverrun as per defined by IEEE 802.1Q Bridges. TransmissionOverrun counter shall be incremented if the implementation detects that a frame from a given queue is still being transmitted by the MAC when that gate-close event for that queue occurs. This counter is utilised by the Certification conformance test to inform the user application whether any packets are currently being transmitted on a particular queue during a gate-close event. Intel Discrete I225/I226 have a mechanism to not transmit a packets if the gate open time is insufficient for the packet transmission by setting the Strict_End bit. Thus, it is expected for this counter to be always zero at this moment. Inspired from enetc_taprio_stats() and enetc_taprio_queue_stats(), now driver also report the tx_overruns counter per traffic class. User can get this counter by using below command: 1) tc -s qdisc show dev <interface> root 2) tc -s class show dev <interface> Test Result (Before): class mq :1 root Sent 1289 bytes 20 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 class mq :2 root Sent 124 bytes 2 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 class mq :3 root Sent 46028 bytes 86 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 class mq :4 root Sent 2596 bytes 14 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Test Result (After): class taprio 100:1 root Sent 8491 bytes 38 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Transmit overruns: 0 class taprio 100:2 root Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Transmit overruns: 0 class taprio 100:3 root Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Transmit overruns: 0 class taprio 100:4 root Sent 994 bytes 11 pkt (dropped 0, overlimits 0 requeues 1) backlog 0b 0p requeues 1 Transmit overruns: 0 Signed-off-by: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@intel.com> Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com> Tested-by: Naama Meir <naamax.meir@linux.intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> Link: https://lore.kernel.org/r/20230714201428.1718097-1-anthony.l.nguyen@intel.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
		
							parent
							
								
									9ffc4de5c6
								
							
						
					
					
						commit
						d3750076d4
					
				
					 1 changed files with 32 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -6115,6 +6115,26 @@ static int igc_tsn_clear_schedule(struct igc_adapter *adapter)
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void igc_taprio_stats(struct net_device *dev,
 | 
			
		||||
			     struct tc_taprio_qopt_stats *stats)
 | 
			
		||||
{
 | 
			
		||||
	/* When Strict_End is enabled, the tx_overruns counter
 | 
			
		||||
	 * will always be zero.
 | 
			
		||||
	 */
 | 
			
		||||
	stats->tx_overruns = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void igc_taprio_queue_stats(struct net_device *dev,
 | 
			
		||||
				   struct tc_taprio_qopt_queue_stats *queue_stats)
 | 
			
		||||
{
 | 
			
		||||
	struct tc_taprio_qopt_stats *stats = &queue_stats->stats;
 | 
			
		||||
 | 
			
		||||
	/* When Strict_End is enabled, the tx_overruns counter
 | 
			
		||||
	 * will always be zero.
 | 
			
		||||
	 */
 | 
			
		||||
	stats->tx_overruns = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int igc_save_qbv_schedule(struct igc_adapter *adapter,
 | 
			
		||||
				 struct tc_taprio_qopt_offload *qopt)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -6125,11 +6145,20 @@ static int igc_save_qbv_schedule(struct igc_adapter *adapter,
 | 
			
		|||
	size_t n;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	if (qopt->cmd == TAPRIO_CMD_DESTROY)
 | 
			
		||||
	switch (qopt->cmd) {
 | 
			
		||||
	case TAPRIO_CMD_REPLACE:
 | 
			
		||||
		break;
 | 
			
		||||
	case TAPRIO_CMD_DESTROY:
 | 
			
		||||
		return igc_tsn_clear_schedule(adapter);
 | 
			
		||||
 | 
			
		||||
	if (qopt->cmd != TAPRIO_CMD_REPLACE)
 | 
			
		||||
	case TAPRIO_CMD_STATS:
 | 
			
		||||
		igc_taprio_stats(adapter->netdev, &qopt->stats);
 | 
			
		||||
		return 0;
 | 
			
		||||
	case TAPRIO_CMD_QUEUE_STATS:
 | 
			
		||||
		igc_taprio_queue_stats(adapter->netdev, &qopt->queue_stats);
 | 
			
		||||
		return 0;
 | 
			
		||||
	default:
 | 
			
		||||
		return -EOPNOTSUPP;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (qopt->base_time < 0)
 | 
			
		||||
		return -ERANGE;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue