[dpdk-dev] [PATCH v2 48/60] common/sfc_efx/base: introduce UDP tunnel destruct operation

Andrew Rybchenko arybchenko at solarflare.com
Tue Sep 22 11:34:36 CEST 2020


From: Igor Romanov <igor.romanov at oktetlabs.ru>

The procedures for destroying UDP tunnels are NIC family specific,
so they should be implemented separately for each of them.

Check for supported UDP encapsulation is removed from generic
operations since it is no longer used by the generic libefx API.

Signed-off-by: Igor Romanov <igor.romanov at oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <arybchenko at solarflare.com>
Reviewed-by: Andy Moreton <amoreton at xilinx.com>
---
 drivers/common/sfc_efx/base/efx_impl.h   |  2 +-
 drivers/common/sfc_efx/base/efx_tunnel.c | 39 +++++++++++++++---------
 2 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/drivers/common/sfc_efx/base/efx_impl.h b/drivers/common/sfc_efx/base/efx_impl.h
index dfe5f1fecf..64156de884 100644
--- a/drivers/common/sfc_efx/base/efx_impl.h
+++ b/drivers/common/sfc_efx/base/efx_impl.h
@@ -303,8 +303,8 @@ efx_filter_reconfigure(
 
 #if EFSYS_OPT_TUNNEL
 typedef struct efx_tunnel_ops_s {
-	boolean_t	(*eto_udp_encap_supported)(efx_nic_t *);
 	efx_rc_t	(*eto_reconfigure)(efx_nic_t *);
+	void		(*eto_fini)(efx_nic_t *);
 } efx_tunnel_ops_t;
 #endif /* EFSYS_OPT_TUNNEL */
 
diff --git a/drivers/common/sfc_efx/base/efx_tunnel.c b/drivers/common/sfc_efx/base/efx_tunnel.c
index b1d1407bd2..5f2186c4c8 100644
--- a/drivers/common/sfc_efx/base/efx_tunnel.c
+++ b/drivers/common/sfc_efx/base/efx_tunnel.c
@@ -12,8 +12,8 @@
 
 #if EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_RIVERHEAD
 static const efx_tunnel_ops_t	__efx_tunnel_dummy_ops = {
-	NULL,	/* eto_udp_encap_supported */
 	NULL,	/* eto_reconfigure */
+	NULL,	/* eto_fini */
 };
 #endif /* EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_RIVERHEAD */
 
@@ -26,9 +26,13 @@ static	__checkReturn	efx_rc_t
 ef10_tunnel_reconfigure(
 	__in		efx_nic_t *enp);
 
+static			void
+ef10_tunnel_fini(
+	__in		efx_nic_t *enp);
+
 static const efx_tunnel_ops_t	__efx_tunnel_ef10_ops = {
-	ef10_udp_encap_supported,	/* eto_udp_encap_supported */
 	ef10_tunnel_reconfigure,	/* eto_reconfigure */
+	ef10_tunnel_fini,		/* eto_fini */
 };
 #endif /* EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2 */
 
@@ -204,22 +208,12 @@ efx_tunnel_init(
 efx_tunnel_fini(
 	__in		efx_nic_t *enp)
 {
-	boolean_t resetting;
-
 	EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
 	EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PROBE);
 	EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_TUNNEL);
 
-	if ((enp->en_etop->eto_udp_encap_supported != NULL) &&
-	    enp->en_etop->eto_udp_encap_supported(enp)) {
-		/*
-		 * The UNLOADING flag allows the MC to suppress the datapath
-		 * reset if it was set on the last call to
-		 * MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS by all functions
-		 */
-		(void) efx_mcdi_set_tunnel_encap_udp_ports(enp, NULL, B_TRUE,
-		    &resetting);
-	}
+	if (enp->en_etop->eto_fini != NULL)
+		enp->en_etop->eto_fini(enp);
 
 	enp->en_etop = NULL;
 	enp->en_mod_flags &= ~EFX_MOD_TUNNEL;
@@ -476,6 +470,23 @@ ef10_tunnel_reconfigure(
 
 	return (rc);
 }
+
+static			void
+ef10_tunnel_fini(
+	__in		efx_nic_t *enp)
+{
+	boolean_t resetting;
+
+	if (ef10_udp_encap_supported(enp) != B_FALSE) {
+		/*
+		 * The UNLOADING flag allows the MC to suppress the datapath
+		 * reset if it was set on the last call to
+		 * MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS by all functions
+		 */
+		(void) efx_mcdi_set_tunnel_encap_udp_ports(enp, NULL, B_TRUE,
+		    &resetting);
+	}
+}
 #endif /* EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2 */
 
 #endif /* EFSYS_OPT_TUNNEL */
-- 
2.17.1



More information about the dev mailing list