@@ -2310,7 +2310,7 @@ static void ibmvnic_tx_scrq_clean_buffer(struct ibmvnic_adapter *adapter,
23102310 tx_buff = & tx_pool -> tx_buff [index ];
23112311 adapter -> netdev -> stats .tx_packets -- ;
23122312 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 -- ;
23142314 adapter -> tx_stats_buffers [queue_num ].bytes -=
23152315 tx_buff -> skb -> len ;
23162316 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)
24022402 unsigned int tx_map_failed = 0 ;
24032403 union sub_crq indir_arr [16 ];
24042404 unsigned int tx_dropped = 0 ;
2405- unsigned int tx_packets = 0 ;
2405+ unsigned int tx_dpackets = 0 ;
2406+ unsigned int tx_bpackets = 0 ;
24062407 unsigned int tx_bytes = 0 ;
24072408 dma_addr_t data_dma_addr ;
24082409 struct netdev_queue * txq ;
@@ -2573,6 +2574,7 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
25732574 if (lpar_rc != H_SUCCESS )
25742575 goto tx_err ;
25752576
2577+ tx_dpackets ++ ;
25762578 goto early_exit ;
25772579 }
25782580
@@ -2601,14 +2603,15 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
26012603 goto tx_err ;
26022604 }
26032605
2606+ tx_bpackets ++ ;
2607+
26042608early_exit :
26052609 if (atomic_add_return (num_entries , & tx_scrq -> used )
26062610 >= adapter -> req_tx_entries_per_subcrq ) {
26072611 netdev_dbg (netdev , "Stopping queue %d\n" , queue_num );
26082612 netif_stop_subqueue (netdev , queue_num );
26092613 }
26102614
2611- tx_packets ++ ;
26122615 tx_bytes += skb -> len ;
26132616 txq_trans_cond_update (txq );
26142617 ret = NETDEV_TX_OK ;
@@ -2638,10 +2641,11 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
26382641 rcu_read_unlock ();
26392642 netdev -> stats .tx_dropped += tx_dropped ;
26402643 netdev -> stats .tx_bytes += tx_bytes ;
2641- netdev -> stats .tx_packets += tx_packets ;
2644+ netdev -> stats .tx_packets += tx_bpackets + tx_dpackets ;
26422645 adapter -> tx_send_failed += tx_send_failed ;
26432646 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 ;
26452649 adapter -> tx_stats_buffers [queue_num ].bytes += tx_bytes ;
26462650 adapter -> tx_stats_buffers [queue_num ].dropped_packets += tx_dropped ;
26472651
@@ -3806,7 +3810,10 @@ static void ibmvnic_get_strings(struct net_device *dev, u32 stringset, u8 *data)
38063810 memcpy (data , ibmvnic_stats [i ].name , ETH_GSTRING_LEN );
38073811
38083812 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 );
38103817 data += ETH_GSTRING_LEN ;
38113818
38123819 snprintf (data , ETH_GSTRING_LEN , "tx%d_bytes" , i );
@@ -3871,7 +3878,9 @@ static void ibmvnic_get_ethtool_stats(struct net_device *dev,
38713878 (adapter , ibmvnic_stats [i ].offset ));
38723879
38733880 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 ;
38753884 i ++ ;
38763885 data [i ] = adapter -> tx_stats_buffers [j ].bytes ;
38773886 i ++ ;
0 commit comments