Date: Thu, 19 Dec 2024 09:08:26 -0800 From: Ravi Pokala <rpokala@freebsd.org> To: Mark Johnston <markj@FreeBSD.org>, <src-committers@FreeBSD.org>, <dev-commits-src-all@FreeBSD.org>, <dev-commits-src-main@FreeBSD.org> Subject: Re: 38663adb6144 - main - Revert "ixl: fix multicast filters handling" Message-ID: <AAC0C0AA-95CB-418C-BF52-A1267E13EF20@panasas.com> In-Reply-To: <202412191349.4BJDnnV4010675@gitrepo.freebsd.org> References: <202412191349.4BJDnnV4010675@gitrepo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
> Revert "ixl: fix multicast filters handling" Yes, but *why*? -Ravi (rpokala@) =EF=BB=BF-----Original Message----- From: <owner-src-committers@freebsd.org <mailto:owner-src-committers@freebs= d.org>> on behalf of Mark Johnston <markj@FreeBSD.org <mailto:markj@FreeBSD.= org>> Date: Thursday, December 19, 2024 at 05:49 To: <src-committers@FreeBSD.org <mailto:src-committers@FreeBSD.org>>, <dev-= commits-src-all@FreeBSD.org <mailto:dev-commits-src-all@FreeBSD.org>>, <dev-= commits-src-main@FreeBSD.org <mailto:dev-commits-src-main@FreeBSD.org>> Subject: git: 38663adb6144 - main - Revert "ixl: fix multicast filters hand= ling" The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=3D38663adb61440bd659fb457909782b= 71ba8806fa <https://cgit.FreeBSD.org/src/commit/?id=3D38663adb61440bd659fb4579= 09782b71ba8806fa> commit 38663adb61440bd659fb457909782b71ba8806fa Author: Franco Fichtner <franco@opnsense.org <mailto:franco@opnsense.org>> AuthorDate: 2024-12-11 14:08:40 +0000 Commit: Mark Johnston <markj@FreeBSD.org <mailto:markj@FreeBSD.org>> CommitDate: 2024-12-19 13:49:30 +0000 Revert "ixl: fix multicast filters handling" This reverts commit 89e73359424a338a7900a4854ad7439f5848ebb8. PR: 281125 Reviewed by: Krzysztof Galazka <krzysztof.galazka@intel.com <mailto:krzyszt= of.galazka@intel.com>> MFC after: 3 days Pull Request: https://github.com/freebsd/freebsd-src/pull/1545 <https://git= hub.com/freebsd/freebsd-src/pull/1545> --- sys/dev/ixl/ixl_pf_main.c | 97 +++++---------------------------------------= --- 1 file changed, 10 insertions(+), 87 deletions(-) diff --git a/sys/dev/ixl/ixl_pf_main.c b/sys/dev/ixl/ixl_pf_main.c index 9755136df848..1752efc02fff 100644 --- a/sys/dev/ixl/ixl_pf_main.c +++ b/sys/dev/ixl/ixl_pf_main.c @@ -593,15 +593,6 @@ ixl_add_maddr(void *arg, struct sockaddr_dl *sdl, u_in= t cnt) * Routines for multicast and vlan filter management. * *********************************************************************/ - -/** - * ixl_add_multi - Add multicast filters to the hardware - * @vsi: The VSI structure - * - * In case number of multicast filters in the IFP exceeds 127 entries, - * multicast promiscuous mode will be enabled and the filters will be remo= ved - * from the hardware - */ void ixl_add_multi(struct ixl_vsi *vsi) { @@ -609,20 +600,14 @@ ixl_add_multi(struct ixl_vsi *vsi) struct i40e_hw *hw =3D vsi->hw; int mcnt =3D 0; struct ixl_add_maddr_arg cb_arg; - enum i40e_status_code status; IOCTL_DEBUGOUT("ixl_add_multi: begin"); mcnt =3D if_llmaddr_count(ifp); if (__predict_false(mcnt >=3D MAX_MULTICAST_ADDR)) { - status =3D i40e_aq_set_vsi_multicast_promiscuous(hw, vsi->seid, - TRUE, NULL); - if (status !=3D I40E_SUCCESS) - if_printf(ifp, "Failed to enable multicast promiscuous " - "mode, status: %s\n", i40e_stat_str(hw, status)); - else - if_printf(ifp, "Enabled multicast promiscuous mode\n"); - /* Delete all existing MC filters */ + i40e_aq_set_vsi_multicast_promiscuous(hw, + vsi->seid, TRUE, NULL); + /* delete all existing MC filters */ ixl_del_multi(vsi, true); return; } @@ -648,92 +633,30 @@ ixl_match_maddr(void *arg, struct sockaddr_dl *sdl, u= _int cnt) return (0); } -/** - * ixl_dis_multi_promisc - Disable multicast promiscuous mode - * @vsi: The VSI structure - * @vsi_mcnt: Number of multicast filters in the VSI - * - * Disable multicast promiscuous mode based on number of entries in the IF= P - * and the VSI, then re-add multicast filters. - * - */ -static void -ixl_dis_multi_promisc(struct ixl_vsi *vsi, int vsi_mcnt) -{ - struct ifnet *ifp =3D vsi->ifp; - struct i40e_hw *hw =3D vsi->hw; - int ifp_mcnt =3D 0; - enum i40e_status_code status; - - ifp_mcnt =3D if_llmaddr_count(ifp); - /* - * Equal lists or empty ifp list mean the list has not been changed - * and in such case avoid disabling multicast promiscuous mode as it - * was not previously enabled. Case where multicast promiscuous mode has - * been enabled is when vsi_mcnt =3D=3D 0 && ifp_mcnt > 0. - */ - if (ifp_mcnt =3D=3D vsi_mcnt || ifp_mcnt =3D=3D 0 || - ifp_mcnt >=3D MAX_MULTICAST_ADDR) - return; - - status =3D i40e_aq_set_vsi_multicast_promiscuous(hw, vsi->seid, - FALSE, NULL); - if (status !=3D I40E_SUCCESS) { - if_printf(ifp, "Failed to disable multicast promiscuous " - "mode, status: %s\n", i40e_stat_str(hw, status)); - - return; - } - - if_printf(ifp, "Disabled multicast promiscuous mode\n"); - - ixl_add_multi(vsi); -} - -/** - * ixl_del_multi - Delete multicast filters from the hardware - * @vsi: The VSI structure - * @all: Bool to determine if all the multicast filters should be removed - * - * In case number of multicast filters in the IFP drops to 127 entries, - * multicast promiscuous mode will be disabled and the filters will be rea= pplied - * to the hardware. - */ void ixl_del_multi(struct ixl_vsi *vsi, bool all) { - int to_del_cnt =3D 0, vsi_mcnt =3D 0; + struct ixl_ftl_head to_del; if_t ifp =3D vsi->ifp; struct ixl_mac_filter *f, *fn; - struct ixl_ftl_head to_del; + int mcnt =3D 0; IOCTL_DEBUGOUT("ixl_del_multi: begin"); LIST_INIT(&to_del); /* Search for removed multicast addresses */ LIST_FOREACH_SAFE(f, &vsi->ftl, ftle, fn) { - if ((f->flags & IXL_FILTER_MC) =3D=3D 0) - continue; - - /* Count all the multicast filters in the VSI for comparison */ - vsi_mcnt++; - - if (!all && if_foreach_llmaddr(ifp, ixl_match_maddr, f) !=3D 0) + if ((f->flags & IXL_FILTER_MC) =3D=3D 0 || + (!all && (if_foreach_llmaddr(ifp, ixl_match_maddr, f) =3D=3D 0))) continue; LIST_REMOVE(f, ftle); LIST_INSERT_HEAD(&to_del, f, ftle); - to_del_cnt++; - } - - if (to_del_cnt > 0) { - ixl_del_hw_filters(vsi, &to_del, to_del_cnt); - return; + mcnt++; } - ixl_dis_multi_promisc(vsi, vsi_mcnt); - - IOCTL_DEBUGOUT("ixl_del_multi: end"); + if (mcnt > 0) + ixl_del_hw_filters(vsi, &to_del, mcnt); } void
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AAC0C0AA-95CB-418C-BF52-A1267E13EF20>