mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-14 12:37:32 +00:00
octeontx2-pf: ethtool expose qos stats
This patch extends ethtool stats support for QoS send queues as well. upon the number of transmit channels change request, Ensures the real number of transmit queues are equal to active QoS send queues plus configured transmit queues. ethtool -S eth0 txq_qos0: bytes: 3021391800 txq_qos0: frames: 1998275 txq_qos1: bytes: 4619766312 txq_qos1: frames: 3055401 ... ... Signed-off-by: Hariprasad Kelam <hkelam@marvell.com> Signed-off-by: Sunil Kovvuri Goutham <sgoutham@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5e6808b4c6
commit
6cebb6a4b1
1 changed files with 20 additions and 9 deletions
|
@ -92,10 +92,16 @@ static void otx2_get_qset_strings(struct otx2_nic *pfvf, u8 **data, int qset)
|
|||
*data += ETH_GSTRING_LEN;
|
||||
}
|
||||
}
|
||||
for (qidx = 0; qidx < pfvf->hw.tx_queues; qidx++) {
|
||||
|
||||
for (qidx = 0; qidx < otx2_get_total_tx_queues(pfvf); qidx++) {
|
||||
for (stats = 0; stats < otx2_n_queue_stats; stats++) {
|
||||
sprintf(*data, "txq%d: %s", qidx + start_qidx,
|
||||
otx2_queue_stats[stats].name);
|
||||
if (qidx >= pfvf->hw.non_qos_queues)
|
||||
sprintf(*data, "txq_qos%d: %s",
|
||||
qidx + start_qidx - pfvf->hw.non_qos_queues,
|
||||
otx2_queue_stats[stats].name);
|
||||
else
|
||||
sprintf(*data, "txq%d: %s", qidx + start_qidx,
|
||||
otx2_queue_stats[stats].name);
|
||||
*data += ETH_GSTRING_LEN;
|
||||
}
|
||||
}
|
||||
|
@ -159,7 +165,7 @@ static void otx2_get_qset_stats(struct otx2_nic *pfvf,
|
|||
[otx2_queue_stats[stat].index];
|
||||
}
|
||||
|
||||
for (qidx = 0; qidx < pfvf->hw.tx_queues; qidx++) {
|
||||
for (qidx = 0; qidx < otx2_get_total_tx_queues(pfvf); qidx++) {
|
||||
if (!otx2_update_sq_stats(pfvf, qidx)) {
|
||||
for (stat = 0; stat < otx2_n_queue_stats; stat++)
|
||||
*((*data)++) = 0;
|
||||
|
@ -254,7 +260,7 @@ static int otx2_get_sset_count(struct net_device *netdev, int sset)
|
|||
return -EINVAL;
|
||||
|
||||
qstats_count = otx2_n_queue_stats *
|
||||
(pfvf->hw.rx_queues + pfvf->hw.tx_queues);
|
||||
(pfvf->hw.rx_queues + otx2_get_total_tx_queues(pfvf));
|
||||
if (!test_bit(CN10K_RPM, &pfvf->hw.cap_flag))
|
||||
mac_stats = CGX_RX_STATS_COUNT + CGX_TX_STATS_COUNT;
|
||||
otx2_update_lmac_fec_stats(pfvf);
|
||||
|
@ -282,7 +288,7 @@ static int otx2_set_channels(struct net_device *dev,
|
|||
{
|
||||
struct otx2_nic *pfvf = netdev_priv(dev);
|
||||
bool if_up = netif_running(dev);
|
||||
int err = 0;
|
||||
int err, qos_txqs;
|
||||
|
||||
if (!channel->rx_count || !channel->tx_count)
|
||||
return -EINVAL;
|
||||
|
@ -296,14 +302,19 @@ static int otx2_set_channels(struct net_device *dev,
|
|||
if (if_up)
|
||||
dev->netdev_ops->ndo_stop(dev);
|
||||
|
||||
err = otx2_set_real_num_queues(dev, channel->tx_count,
|
||||
qos_txqs = bitmap_weight(pfvf->qos.qos_sq_bmap,
|
||||
OTX2_QOS_MAX_LEAF_NODES);
|
||||
|
||||
err = otx2_set_real_num_queues(dev, channel->tx_count + qos_txqs,
|
||||
channel->rx_count);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
pfvf->hw.rx_queues = channel->rx_count;
|
||||
pfvf->hw.tx_queues = channel->tx_count;
|
||||
pfvf->qset.cq_cnt = pfvf->hw.tx_queues + pfvf->hw.rx_queues;
|
||||
if (pfvf->xdp_prog)
|
||||
pfvf->hw.xdp_queues = channel->rx_count;
|
||||
pfvf->hw.non_qos_queues = pfvf->hw.tx_queues + pfvf->hw.xdp_queues;
|
||||
|
||||
if (if_up)
|
||||
err = dev->netdev_ops->ndo_open(dev);
|
||||
|
@ -1405,7 +1416,7 @@ static int otx2vf_get_sset_count(struct net_device *netdev, int sset)
|
|||
return -EINVAL;
|
||||
|
||||
qstats_count = otx2_n_queue_stats *
|
||||
(vf->hw.rx_queues + vf->hw.tx_queues);
|
||||
(vf->hw.rx_queues + otx2_get_total_tx_queues(vf));
|
||||
|
||||
return otx2_n_dev_stats + otx2_n_drv_stats + qstats_count + 1;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue