@@ -2310,7 +2310,7 @@ static void ibmvnic_tx_scrq_clean_buffer(struct ibmvnic_adapter *adapter,
2310
2310
tx_buff = & tx_pool -> tx_buff [index ];
2311
2311
adapter -> netdev -> stats .tx_packets -- ;
2312
2312
adapter -> netdev -> stats .tx_bytes -= tx_buff -> skb -> len ;
2313
- adapter -> tx_stats_buffers [queue_num ].packets -- ;
2313
+ adapter -> tx_stats_buffers [queue_num ].batched_packets -- ;
2314
2314
adapter -> tx_stats_buffers [queue_num ].bytes -=
2315
2315
tx_buff -> skb -> len ;
2316
2316
dev_kfree_skb_any (tx_buff -> skb );
@@ -2402,7 +2402,8 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
2402
2402
unsigned int tx_map_failed = 0 ;
2403
2403
union sub_crq indir_arr [16 ];
2404
2404
unsigned int tx_dropped = 0 ;
2405
- unsigned int tx_packets = 0 ;
2405
+ unsigned int tx_dpackets = 0 ;
2406
+ unsigned int tx_bpackets = 0 ;
2406
2407
unsigned int tx_bytes = 0 ;
2407
2408
dma_addr_t data_dma_addr ;
2408
2409
struct netdev_queue * txq ;
@@ -2573,6 +2574,7 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
2573
2574
if (lpar_rc != H_SUCCESS )
2574
2575
goto tx_err ;
2575
2576
2577
+ tx_dpackets ++ ;
2576
2578
goto early_exit ;
2577
2579
}
2578
2580
@@ -2601,14 +2603,15 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
2601
2603
goto tx_err ;
2602
2604
}
2603
2605
2606
+ tx_bpackets ++ ;
2607
+
2604
2608
early_exit :
2605
2609
if (atomic_add_return (num_entries , & tx_scrq -> used )
2606
2610
>= adapter -> req_tx_entries_per_subcrq ) {
2607
2611
netdev_dbg (netdev , "Stopping queue %d\n" , queue_num );
2608
2612
netif_stop_subqueue (netdev , queue_num );
2609
2613
}
2610
2614
2611
- tx_packets ++ ;
2612
2615
tx_bytes += skb -> len ;
2613
2616
txq_trans_cond_update (txq );
2614
2617
ret = NETDEV_TX_OK ;
@@ -2638,10 +2641,11 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
2638
2641
rcu_read_unlock ();
2639
2642
netdev -> stats .tx_dropped += tx_dropped ;
2640
2643
netdev -> stats .tx_bytes += tx_bytes ;
2641
- netdev -> stats .tx_packets += tx_packets ;
2644
+ netdev -> stats .tx_packets += tx_bpackets + tx_dpackets ;
2642
2645
adapter -> tx_send_failed += tx_send_failed ;
2643
2646
adapter -> tx_map_failed += tx_map_failed ;
2644
- adapter -> tx_stats_buffers [queue_num ].packets += tx_packets ;
2647
+ adapter -> tx_stats_buffers [queue_num ].batched_packets += tx_bpackets ;
2648
+ adapter -> tx_stats_buffers [queue_num ].direct_packets += tx_dpackets ;
2645
2649
adapter -> tx_stats_buffers [queue_num ].bytes += tx_bytes ;
2646
2650
adapter -> tx_stats_buffers [queue_num ].dropped_packets += tx_dropped ;
2647
2651
@@ -3806,7 +3810,10 @@ static void ibmvnic_get_strings(struct net_device *dev, u32 stringset, u8 *data)
3806
3810
memcpy (data , ibmvnic_stats [i ].name , ETH_GSTRING_LEN );
3807
3811
3808
3812
for (i = 0 ; i < adapter -> req_tx_queues ; i ++ ) {
3809
- snprintf (data , ETH_GSTRING_LEN , "tx%d_packets" , i );
3813
+ snprintf (data , ETH_GSTRING_LEN , "tx%d_batched_packets" , i );
3814
+ data += ETH_GSTRING_LEN ;
3815
+
3816
+ snprintf (data , ETH_GSTRING_LEN , "tx%d_direct_packets" , i );
3810
3817
data += ETH_GSTRING_LEN ;
3811
3818
3812
3819
snprintf (data , ETH_GSTRING_LEN , "tx%d_bytes" , i );
@@ -3871,7 +3878,9 @@ static void ibmvnic_get_ethtool_stats(struct net_device *dev,
3871
3878
(adapter , ibmvnic_stats [i ].offset ));
3872
3879
3873
3880
for (j = 0 ; j < adapter -> req_tx_queues ; j ++ ) {
3874
- data [i ] = adapter -> tx_stats_buffers [j ].packets ;
3881
+ data [i ] = adapter -> tx_stats_buffers [j ].batched_packets ;
3882
+ i ++ ;
3883
+ data [i ] = adapter -> tx_stats_buffers [j ].direct_packets ;
3875
3884
i ++ ;
3876
3885
data [i ] = adapter -> tx_stats_buffers [j ].bytes ;
3877
3886
i ++ ;
0 commit comments