[PATCH v2 3/3] common/sfc_efx/base: switch netport stats to use EVB port ID

Ivan Malov <[email protected]>
Newsgroups org.dpdk.dev
Message-ID <[email protected]>
From: Andy Moreton <[email protected]>

Support for VADAPTER stats requires passing the EVB port handle.
Use GET_NETPORT_STATISTICS_V2 to do that.

Also for clarity adjust the argument order for efx_np_mac_stats
to match the legacy efx_mcdi_mac_stats.

Signed-off-by: Andy Moreton <[email protected]>
Reviewed-by: Ivan Malov <[email protected]>
Reviewed-by: Viacheslav Galaktionov <[email protected]>
---
 drivers/common/sfc_efx/base/efx_impl.h     |  3 ++-
 drivers/common/sfc_efx/base/efx_mcdi.c     |  2 +-
 drivers/common/sfc_efx/base/efx_np.c       | 15 ++++++++++++---
 drivers/common/sfc_efx/base/medford4_mac.c | 12 +++++++-----
 4 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/drivers/common/sfc_efx/base/efx_impl.h b/drivers/common/sfc_efx/base/efx_impl.h
index c91fbbb61b..6dc7ca870d 100644
--- a/drivers/common/sfc_efx/base/efx_impl.h
+++ b/drivers/common/sfc_efx/base/efx_impl.h
@@ -1988,8 +1988,9 @@ extern	__checkReturn	efx_rc_t
 efx_np_mac_stats(
 	__in		efx_nic_t *enp,
 	__in		efx_np_handle_t nph,
-	__in		efx_stats_action_t action,
+	__in		uint32_t vport_id,
 	__in_opt	const efsys_mem_t *esmp,
+	__in		efx_stats_action_t action,
 	__in		uint16_t period_ms);
 #endif /* EFSYS_OPT_MAC_STATS */
 
diff --git a/drivers/common/sfc_efx/base/efx_mcdi.c b/drivers/common/sfc_efx/base/efx_mcdi.c
index 8f14f38cdc..f8306460fa 100644
--- a/drivers/common/sfc_efx/base/efx_mcdi.c
+++ b/drivers/common/sfc_efx/base/efx_mcdi.c
@@ -2250,7 +2250,7 @@ efx_mcdi_mac_stats_clear(
 
 	if (efx_np_supported(enp) != B_FALSE) {
 		rc = efx_np_mac_stats(enp, epp->ep_np_handle,
-			    EFX_STATS_CLEAR, NULL, 0);
+		    enp->en_vport_id, NULL, EFX_STATS_CLEAR, 0);
 	} else {
 		rc = efx_mcdi_mac_stats(enp, enp->en_vport_id, NULL,
 				EFX_STATS_CLEAR, 0);
diff --git a/drivers/common/sfc_efx/base/efx_np.c b/drivers/common/sfc_efx/base/efx_np.c
index ca6ae0a9b1..0e1cd35591 100644
--- a/drivers/common/sfc_efx/base/efx_np.c
+++ b/drivers/common/sfc_efx/base/efx_np.c
@@ -1607,12 +1607,13 @@ efx_np_mac_ctrl(
 efx_np_mac_stats(
 	__in		efx_nic_t *enp,
 	__in		efx_np_handle_t nph,
-	__in		efx_stats_action_t action,
+	__in		uint32_t vport_id,
 	__in_opt	const efsys_mem_t *esmp,
+	__in		efx_stats_action_t action,
 	__in		uint16_t period_ms)
 {
 	EFX_MCDI_DECLARE_BUF(payload,
-	    MC_CMD_GET_NETPORT_STATISTICS_IN_LEN,
+	    MC_CMD_GET_NETPORT_STATISTICS_V2_IN_LEN,
 	    MC_CMD_GET_NETPORT_STATISTICS_OUT_LENMIN);
 	boolean_t enable = (action == EFX_STATS_ENABLE_NOEVENTS);
 	boolean_t events = (action == EFX_STATS_ENABLE_EVENTS);
@@ -1623,7 +1624,7 @@ efx_np_mac_stats(
 	efx_rc_t rc;
 
 	req.emr_out_length = MC_CMD_GET_NETPORT_STATISTICS_OUT_LENMIN;
-	req.emr_in_length = MC_CMD_GET_NETPORT_STATISTICS_IN_LEN;
+	req.emr_in_length = MC_CMD_GET_NETPORT_STATISTICS_V2_IN_LEN;
 	req.emr_cmd = MC_CMD_GET_NETPORT_STATISTICS;
 	req.emr_out_buf = payload;
 	req.emr_in_buf = payload;
@@ -1665,6 +1666,14 @@ efx_np_mac_stats(
 		MCDI_IN_SET_DWORD(req, GET_NETPORT_STATISTICS_IN_DMA_LEN, sz);
 	}
 
+	/*
+	 * NOTE: Do not use EVB_PORT_ID_ASSIGNED when disabling periodic stats,
+	 *	 as this may fail (and leave periodic DMA enabled) if the
+	 *	 vadapter has already been deleted.
+	 */
+	MCDI_IN_SET_DWORD(req, GET_NETPORT_STATISTICS_V2_IN_PORT_ID,
+		(disable ? EVB_PORT_ID_NULL : vport_id));
+
 	efx_mcdi_execute(enp, &req);
 
 	if (req.emr_rc != 0) {
diff --git a/drivers/common/sfc_efx/base/medford4_mac.c b/drivers/common/sfc_efx/base/medford4_mac.c
index 8ef84c69c6..b6000cf6b9 100644
--- a/drivers/common/sfc_efx/base/medford4_mac.c
+++ b/drivers/common/sfc_efx/base/medford4_mac.c
@@ -172,8 +172,8 @@ medford4_mac_stats_upload(
 	efx_port_t *epp = &(enp->en_port);
 	efx_rc_t rc;
 
-	rc = efx_np_mac_stats(enp,
-		    epp->ep_np_handle, EFX_STATS_UPLOAD, esmp, 0);
+	rc = efx_np_mac_stats(enp, epp->ep_np_handle, enp->en_vport_id,
+	    esmp, EFX_STATS_UPLOAD, 0);
 	if (rc != 0)
 		goto fail1;
 
@@ -196,13 +196,15 @@ medford4_mac_stats_periodic(
 
 	if (period_ms == 0) {
 		rc = efx_np_mac_stats(enp, epp->ep_np_handle,
-			    EFX_STATS_DISABLE, NULL, 0);
+		    enp->en_vport_id, NULL, EFX_STATS_DISABLE, 0);
 	} else if (events != B_FALSE) {
 		rc = efx_np_mac_stats(enp, epp->ep_np_handle,
-			    EFX_STATS_ENABLE_EVENTS, esmp, period_ms);
+		    enp->en_vport_id, esmp, EFX_STATS_ENABLE_EVENTS,
+		    period_ms);
 	} else {
 		rc = efx_np_mac_stats(enp, epp->ep_np_handle,
-			    EFX_STATS_ENABLE_NOEVENTS, esmp, period_ms);
+		    enp->en_vport_id, esmp, EFX_STATS_ENABLE_NOEVENTS,
+		    period_ms);
 	}
 
 	if (rc != 0)
-- 
2.47.3
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.