Skip to content

Commit 356bc7a

Browse files
Nick Childjfvogel
authored andcommitted
ibmvnic: Add stat for tx direct vs tx batched
[ Upstream commit 2ee73c5 ] Allow tracking of packets sent with send_subcrq direct vs indirect. `ethtool -S <dev>` will now provide a counter of the number of uses of each xmit method. This metric will be useful in performance debugging. Signed-off-by: Nick Child <[email protected]> Reviewed-by: Simon Horman <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]> Stable-dep-of: bdf5d13 ("ibmvnic: Don't reference skb after sending to VIOS") Signed-off-by: Sasha Levin <[email protected]> (cherry picked from commit 0ad0093cf0a8ae1f6916a9eed05b87e3d9850cf3) Signed-off-by: Jack Vogel <[email protected]>
1 parent 7517ac4 commit 356bc7a

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

drivers/net/ethernet/ibm/ibmvnic.c

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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;
@@ -2575,6 +2576,7 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
25752576
if (lpar_rc != H_SUCCESS)
25762577
goto tx_err;
25772578

2579+
tx_dpackets++;
25782580
goto early_exit;
25792581
}
25802582

@@ -2603,14 +2605,15 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
26032605
goto tx_err;
26042606
}
26052607

2608+
tx_bpackets++;
2609+
26062610
early_exit:
26072611
if (atomic_add_return(num_entries, &tx_scrq->used)
26082612
>= adapter->req_tx_entries_per_subcrq) {
26092613
netdev_dbg(netdev, "Stopping queue %d\n", queue_num);
26102614
netif_stop_subqueue(netdev, queue_num);
26112615
}
26122616

2613-
tx_packets++;
26142617
tx_bytes += skb->len;
26152618
txq_trans_cond_update(txq);
26162619
ret = NETDEV_TX_OK;
@@ -2640,10 +2643,11 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
26402643
rcu_read_unlock();
26412644
netdev->stats.tx_dropped += tx_dropped;
26422645
netdev->stats.tx_bytes += tx_bytes;
2643-
netdev->stats.tx_packets += tx_packets;
2646+
netdev->stats.tx_packets += tx_bpackets + tx_dpackets;
26442647
adapter->tx_send_failed += tx_send_failed;
26452648
adapter->tx_map_failed += tx_map_failed;
2646-
adapter->tx_stats_buffers[queue_num].packets += tx_packets;
2649+
adapter->tx_stats_buffers[queue_num].batched_packets += tx_bpackets;
2650+
adapter->tx_stats_buffers[queue_num].direct_packets += tx_dpackets;
26472651
adapter->tx_stats_buffers[queue_num].bytes += tx_bytes;
26482652
adapter->tx_stats_buffers[queue_num].dropped_packets += tx_dropped;
26492653

@@ -3808,7 +3812,10 @@ static void ibmvnic_get_strings(struct net_device *dev, u32 stringset, u8 *data)
38083812
memcpy(data, ibmvnic_stats[i].name, ETH_GSTRING_LEN);
38093813

38103814
for (i = 0; i < adapter->req_tx_queues; i++) {
3811-
snprintf(data, ETH_GSTRING_LEN, "tx%d_packets", i);
3815+
snprintf(data, ETH_GSTRING_LEN, "tx%d_batched_packets", i);
3816+
data += ETH_GSTRING_LEN;
3817+
3818+
snprintf(data, ETH_GSTRING_LEN, "tx%d_direct_packets", i);
38123819
data += ETH_GSTRING_LEN;
38133820

38143821
snprintf(data, ETH_GSTRING_LEN, "tx%d_bytes", i);
@@ -3873,7 +3880,9 @@ static void ibmvnic_get_ethtool_stats(struct net_device *dev,
38733880
(adapter, ibmvnic_stats[i].offset));
38743881

38753882
for (j = 0; j < adapter->req_tx_queues; j++) {
3876-
data[i] = adapter->tx_stats_buffers[j].packets;
3883+
data[i] = adapter->tx_stats_buffers[j].batched_packets;
3884+
i++;
3885+
data[i] = adapter->tx_stats_buffers[j].direct_packets;
38773886
i++;
38783887
data[i] = adapter->tx_stats_buffers[j].bytes;
38793888
i++;

drivers/net/ethernet/ibm/ibmvnic.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,8 @@ struct ibmvnic_statistics {
213213

214214
#define NUM_TX_STATS 3
215215
struct ibmvnic_tx_queue_stats {
216-
u64 packets;
216+
u64 batched_packets;
217+
u64 direct_packets;
217218
u64 bytes;
218219
u64 dropped_packets;
219220
};

0 commit comments

Comments
 (0)