mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 05:32:00 +00:00
net: mana: Add gdma stats to ethtool output for mana
Extended performance counter stats in 'ethtool -S <interface>' for MANA VF to include GDMA tx LSO packets and bytes count. Tested-on: Ubuntu22 Testcases: 1. LISA testcase: PERF-NETWORK-TCP-THROUGHPUT-MULTICONNECTION-NTTTCP-Synthetic 2. LISA testcase: PERF-NETWORK-TCP-THROUGHPUT-MULTICONNECTION-NTTTCP-SRIOV 3. Validated the GDMA stat packets and byte counters Signed-off-by: Shradha Gupta <shradhagupta@linux.microsoft.com> Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a20b4c5f3a
commit
ac3899c622
@ -2295,6 +2295,46 @@ int mana_config_rss(struct mana_port_context *apc, enum TRI_STATE rx,
|
||||
return 0;
|
||||
}
|
||||
|
||||
void mana_query_gf_stats(struct mana_port_context *apc)
|
||||
{
|
||||
struct mana_query_gf_stat_resp resp = {};
|
||||
struct mana_query_gf_stat_req req = {};
|
||||
struct net_device *ndev = apc->ndev;
|
||||
int err;
|
||||
|
||||
mana_gd_init_req_hdr(&req.hdr, MANA_QUERY_GF_STAT,
|
||||
sizeof(req), sizeof(resp));
|
||||
req.req_stats = STATISTICS_FLAGS_HC_TX_BYTES |
|
||||
STATISTICS_FLAGS_HC_TX_UCAST_PACKETS |
|
||||
STATISTICS_FLAGS_HC_TX_UCAST_BYTES |
|
||||
STATISTICS_FLAGS_HC_TX_MCAST_PACKETS |
|
||||
STATISTICS_FLAGS_HC_TX_MCAST_BYTES |
|
||||
STATISTICS_FLAGS_HC_TX_BCAST_PACKETS |
|
||||
STATISTICS_FLAGS_HC_TX_BCAST_BYTES;
|
||||
|
||||
err = mana_send_request(apc->ac, &req, sizeof(req), &resp,
|
||||
sizeof(resp));
|
||||
if (err) {
|
||||
netdev_err(ndev, "Failed to query GF stats: %d\n", err);
|
||||
return;
|
||||
}
|
||||
err = mana_verify_resp_hdr(&resp.hdr, MANA_QUERY_GF_STAT,
|
||||
sizeof(resp));
|
||||
if (err || resp.hdr.status) {
|
||||
netdev_err(ndev, "Failed to query GF stats: %d, 0x%x\n", err,
|
||||
resp.hdr.status);
|
||||
return;
|
||||
}
|
||||
|
||||
apc->eth_stats.hc_tx_bytes = resp.hc_tx_bytes;
|
||||
apc->eth_stats.hc_tx_ucast_pkts = resp.hc_tx_ucast_pkts;
|
||||
apc->eth_stats.hc_tx_ucast_bytes = resp.hc_tx_ucast_bytes;
|
||||
apc->eth_stats.hc_tx_bcast_pkts = resp.hc_tx_bcast_pkts;
|
||||
apc->eth_stats.hc_tx_bcast_bytes = resp.hc_tx_bcast_bytes;
|
||||
apc->eth_stats.hc_tx_mcast_pkts = resp.hc_tx_mcast_pkts;
|
||||
apc->eth_stats.hc_tx_mcast_bytes = resp.hc_tx_mcast_bytes;
|
||||
}
|
||||
|
||||
static int mana_init_port(struct net_device *ndev)
|
||||
{
|
||||
struct mana_port_context *apc = netdev_priv(ndev);
|
||||
|
@ -13,6 +13,19 @@ static const struct {
|
||||
} mana_eth_stats[] = {
|
||||
{"stop_queue", offsetof(struct mana_ethtool_stats, stop_queue)},
|
||||
{"wake_queue", offsetof(struct mana_ethtool_stats, wake_queue)},
|
||||
{"hc_tx_bytes", offsetof(struct mana_ethtool_stats, hc_tx_bytes)},
|
||||
{"hc_tx_ucast_pkts", offsetof(struct mana_ethtool_stats,
|
||||
hc_tx_ucast_pkts)},
|
||||
{"hc_tx_ucast_bytes", offsetof(struct mana_ethtool_stats,
|
||||
hc_tx_ucast_bytes)},
|
||||
{"hc_tx_bcast_pkts", offsetof(struct mana_ethtool_stats,
|
||||
hc_tx_bcast_pkts)},
|
||||
{"hc_tx_bcast_bytes", offsetof(struct mana_ethtool_stats,
|
||||
hc_tx_bcast_bytes)},
|
||||
{"hc_tx_mcast_pkts", offsetof(struct mana_ethtool_stats,
|
||||
hc_tx_mcast_pkts)},
|
||||
{"hc_tx_mcast_bytes", offsetof(struct mana_ethtool_stats,
|
||||
hc_tx_mcast_bytes)},
|
||||
{"tx_cq_err", offsetof(struct mana_ethtool_stats, tx_cqe_err)},
|
||||
{"tx_cqe_unknown_type", offsetof(struct mana_ethtool_stats,
|
||||
tx_cqe_unknown_type)},
|
||||
@ -114,6 +127,8 @@ static void mana_get_ethtool_stats(struct net_device *ndev,
|
||||
|
||||
if (!apc->port_is_up)
|
||||
return;
|
||||
/* we call mana function to update stats from GDMA */
|
||||
mana_query_gf_stats(apc);
|
||||
|
||||
for (q = 0; q < ARRAY_SIZE(mana_eth_stats); q++)
|
||||
data[i++] = *(u64 *)(eth_stats + mana_eth_stats[q].offset);
|
||||
|
@ -352,6 +352,13 @@ struct mana_tx_qp {
|
||||
struct mana_ethtool_stats {
|
||||
u64 stop_queue;
|
||||
u64 wake_queue;
|
||||
u64 hc_tx_bytes;
|
||||
u64 hc_tx_ucast_pkts;
|
||||
u64 hc_tx_ucast_bytes;
|
||||
u64 hc_tx_bcast_pkts;
|
||||
u64 hc_tx_bcast_bytes;
|
||||
u64 hc_tx_mcast_pkts;
|
||||
u64 hc_tx_mcast_bytes;
|
||||
u64 tx_cqe_err;
|
||||
u64 tx_cqe_unknown_type;
|
||||
u64 rx_coalesced_err;
|
||||
@ -442,6 +449,7 @@ u32 mana_run_xdp(struct net_device *ndev, struct mana_rxq *rxq,
|
||||
struct bpf_prog *mana_xdp_get(struct mana_port_context *apc);
|
||||
void mana_chn_setxdp(struct mana_port_context *apc, struct bpf_prog *prog);
|
||||
int mana_bpf(struct net_device *ndev, struct netdev_bpf *bpf);
|
||||
void mana_query_gf_stats(struct mana_port_context *apc);
|
||||
|
||||
extern const struct ethtool_ops mana_ethtool_ops;
|
||||
|
||||
@ -583,6 +591,49 @@ struct mana_fence_rq_resp {
|
||||
struct gdma_resp_hdr hdr;
|
||||
}; /* HW DATA */
|
||||
|
||||
/* Query stats RQ */
|
||||
struct mana_query_gf_stat_req {
|
||||
struct gdma_req_hdr hdr;
|
||||
u64 req_stats;
|
||||
}; /* HW DATA */
|
||||
|
||||
struct mana_query_gf_stat_resp {
|
||||
struct gdma_resp_hdr hdr;
|
||||
u64 reported_stats;
|
||||
/* rx errors/discards */
|
||||
u64 discard_rx_nowqe;
|
||||
u64 err_rx_vport_disabled;
|
||||
/* rx bytes/packets */
|
||||
u64 hc_rx_bytes;
|
||||
u64 hc_rx_ucast_pkts;
|
||||
u64 hc_rx_ucast_bytes;
|
||||
u64 hc_rx_bcast_pkts;
|
||||
u64 hc_rx_bcast_bytes;
|
||||
u64 hc_rx_mcast_pkts;
|
||||
u64 hc_rx_mcast_bytes;
|
||||
/* tx errors */
|
||||
u64 err_tx_gf_disabled;
|
||||
u64 err_tx_vport_disabled;
|
||||
u64 err_tx_inval_vport_offset_pkt;
|
||||
u64 err_tx_vlan_enforcement;
|
||||
u64 err_tx_ethtype_enforcement;
|
||||
u64 err_tx_SA_enforecement;
|
||||
u64 err_tx_SQPDID_enforcement;
|
||||
u64 err_tx_CQPDID_enforcement;
|
||||
u64 err_tx_mtu_violation;
|
||||
u64 err_tx_inval_oob;
|
||||
/* tx bytes/packets */
|
||||
u64 hc_tx_bytes;
|
||||
u64 hc_tx_ucast_pkts;
|
||||
u64 hc_tx_ucast_bytes;
|
||||
u64 hc_tx_bcast_pkts;
|
||||
u64 hc_tx_bcast_bytes;
|
||||
u64 hc_tx_mcast_pkts;
|
||||
u64 hc_tx_mcast_bytes;
|
||||
/* tx error */
|
||||
u64 err_tx_gdma;
|
||||
}; /* HW DATA */
|
||||
|
||||
/* Configure vPort Rx Steering */
|
||||
struct mana_cfg_rx_steer_req_v2 {
|
||||
struct gdma_req_hdr hdr;
|
||||
@ -662,6 +713,42 @@ struct mana_deregister_filter_resp {
|
||||
struct gdma_resp_hdr hdr;
|
||||
}; /* HW DATA */
|
||||
|
||||
/* Requested GF stats Flags */
|
||||
/* Rx discards/Errors */
|
||||
#define STATISTICS_FLAGS_RX_DISCARDS_NO_WQE 0x0000000000000001
|
||||
#define STATISTICS_FLAGS_RX_ERRORS_VPORT_DISABLED 0x0000000000000002
|
||||
/* Rx bytes/pkts */
|
||||
#define STATISTICS_FLAGS_HC_RX_BYTES 0x0000000000000004
|
||||
#define STATISTICS_FLAGS_HC_RX_UCAST_PACKETS 0x0000000000000008
|
||||
#define STATISTICS_FLAGS_HC_RX_UCAST_BYTES 0x0000000000000010
|
||||
#define STATISTICS_FLAGS_HC_RX_MCAST_PACKETS 0x0000000000000020
|
||||
#define STATISTICS_FLAGS_HC_RX_MCAST_BYTES 0x0000000000000040
|
||||
#define STATISTICS_FLAGS_HC_RX_BCAST_PACKETS 0x0000000000000080
|
||||
#define STATISTICS_FLAGS_HC_RX_BCAST_BYTES 0x0000000000000100
|
||||
/* Tx errors */
|
||||
#define STATISTICS_FLAGS_TX_ERRORS_GF_DISABLED 0x0000000000000200
|
||||
#define STATISTICS_FLAGS_TX_ERRORS_VPORT_DISABLED 0x0000000000000400
|
||||
#define STATISTICS_FLAGS_TX_ERRORS_INVAL_VPORT_OFFSET_PACKETS \
|
||||
0x0000000000000800
|
||||
#define STATISTICS_FLAGS_TX_ERRORS_VLAN_ENFORCEMENT 0x0000000000001000
|
||||
#define STATISTICS_FLAGS_TX_ERRORS_ETH_TYPE_ENFORCEMENT \
|
||||
0x0000000000002000
|
||||
#define STATISTICS_FLAGS_TX_ERRORS_SA_ENFORCEMENT 0x0000000000004000
|
||||
#define STATISTICS_FLAGS_TX_ERRORS_SQPDID_ENFORCEMENT 0x0000000000008000
|
||||
#define STATISTICS_FLAGS_TX_ERRORS_CQPDID_ENFORCEMENT 0x0000000000010000
|
||||
#define STATISTICS_FLAGS_TX_ERRORS_MTU_VIOLATION 0x0000000000020000
|
||||
#define STATISTICS_FLAGS_TX_ERRORS_INVALID_OOB 0x0000000000040000
|
||||
/* Tx bytes/pkts */
|
||||
#define STATISTICS_FLAGS_HC_TX_BYTES 0x0000000000080000
|
||||
#define STATISTICS_FLAGS_HC_TX_UCAST_PACKETS 0x0000000000100000
|
||||
#define STATISTICS_FLAGS_HC_TX_UCAST_BYTES 0x0000000000200000
|
||||
#define STATISTICS_FLAGS_HC_TX_MCAST_PACKETS 0x0000000000400000
|
||||
#define STATISTICS_FLAGS_HC_TX_MCAST_BYTES 0x0000000000800000
|
||||
#define STATISTICS_FLAGS_HC_TX_BCAST_PACKETS 0x0000000001000000
|
||||
#define STATISTICS_FLAGS_HC_TX_BCAST_BYTES 0x0000000002000000
|
||||
/* Tx error */
|
||||
#define STATISTICS_FLAGS_TX_ERRORS_GDMA_ERROR 0x0000000004000000
|
||||
|
||||
#define MANA_MAX_NUM_QUEUES 64
|
||||
|
||||
#define MANA_SHORT_VPORT_OFFSET_MAX ((1U << 8) - 1)
|
||||
|
Loading…
Reference in New Issue
Block a user