From 4dda992fe01746aeb9bc3127da9a6c986a47691b Mon Sep 17 00:00:00 2001 From: Igor Romanov Date: Thu, 24 Sep 2020 13:12:23 +0100 Subject: [PATCH] common/sfc_efx/base: introduce UDP tunnel destruct operation 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 Signed-off-by: Andrew Rybchenko Reviewed-by: Andy Moreton --- 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 @@ fail1: 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 @@ fail1: 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.20.1