Date: Thu, 10 Aug 2023 00:28:14 GMT From: Kevin Bowling <kbowling@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: fd2b36319c1f - stable/13 - ixv: Separate VFTA table for each interface Message-ID: <202308100028.37A0SENd025624@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=fd2b36319c1fee3ac8f914548705cfc0a79011d9 commit fd2b36319c1fee3ac8f914548705cfc0a79011d9 Author: Yuichiro Naito <naito.yuichiro@gmail.com> AuthorDate: 2023-08-03 20:36:21 +0000 Commit: Kevin Bowling <kbowling@FreeBSD.org> CommitDate: 2023-08-10 00:27:45 +0000 ixv: Separate VFTA table for each interface The vlan setting is independent for each interface. Use VFTA table in 'struct ixgbe_softc' that is already defined. This pull request fixes following bug scenario. create ixv0.10 create ixv1.10 destroy ixv1.10 create ixv0.11 ixv0.10 no longer receives vlan 10 packets. In this case, destroying ixv1.10 affects to ixv0. Pull Request: https://github.com/freebsd/freebsd-src/pull/774 (cherry picked from commit 61a8231d152c38ac96b697ea3ca8ff220f3aa536) --- sys/dev/ixgbe/if_ixv.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/sys/dev/ixgbe/if_ixv.c b/sys/dev/ixgbe/if_ixv.c index 813a8d5fc3ed..5bd71ab2b5eb 100644 --- a/sys/dev/ixgbe/if_ixv.c +++ b/sys/dev/ixgbe/if_ixv.c @@ -198,12 +198,6 @@ TUNABLE_INT("hw.ixv.flow_control", &ixv_flow_control); static int ixv_header_split = false; TUNABLE_INT("hw.ixv.hdr_split", &ixv_header_split); -/* - * Shadow VFTA table, this is needed because - * the real filter table gets cleared during - * a soft reset and we need to repopulate it. - */ -static u32 ixv_shadow_vfta[IXGBE_VFTA_SIZE]; extern struct if_txrx ixgbe_txrx; static struct if_shared_ctx ixv_sctx_init = { @@ -1541,9 +1535,9 @@ ixv_setup_vlan_support(if_ctx_t ctx) * we need to repopulate it now. */ for (int i = 0; i < IXGBE_VFTA_SIZE; i++) { - if (ixv_shadow_vfta[i] == 0) + if (sc->shadow_vfta[i] == 0) continue; - vfta = ixv_shadow_vfta[i]; + vfta = sc->shadow_vfta[i]; /* * Reconstruct the vlan id's * based on the bits set in each @@ -1579,7 +1573,7 @@ ixv_if_register_vlan(if_ctx_t ctx, u16 vtag) index = (vtag >> 5) & 0x7F; bit = vtag & 0x1F; - ixv_shadow_vfta[index] |= (1 << bit); + sc->shadow_vfta[index] |= (1 << bit); ++sc->num_vlans; } /* ixv_if_register_vlan */ @@ -1597,7 +1591,7 @@ ixv_if_unregister_vlan(if_ctx_t ctx, u16 vtag) index = (vtag >> 5) & 0x7F; bit = vtag & 0x1F; - ixv_shadow_vfta[index] &= ~(1 << bit); + sc->shadow_vfta[index] &= ~(1 << bit); --sc->num_vlans; } /* ixv_if_unregister_vlan */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202308100028.37A0SENd025624>