Date: Tue, 28 Apr 2009 20:32:37 +0300 From: Maxim Ignatenko <gelraen.ua@gmail.com> To: bug-followup@freebsd.org, gdef@wp.pl Cc: freebsd-current@freebsd.org Subject: Re: kern/132715: [lagg] [panic] Panic when creating vlan's on lagg interface Message-ID: <ac42db050904281032y7155332crc96b090893326d65@mail.gmail.com> In-Reply-To: <ac42db050904200846t776579feq6a0f62abe4f88f06@mail.gmail.com> References: <ac42db050904200846t776579feq6a0f62abe4f88f06@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
em(4), igb(4) and ixgbe(4) registers EVENTHANDLER vlan_config, but
don't do any checks that this event generated by adding vlan on top of
their devices.
I'm don't completely sure what the right way to fix this issue, but
attached patch works for me.
[-- Attachment #2 --]
Index: e1000/if_igb.c
===================================================================
--- e1000/if_igb.c (revision 191201)
+++ e1000/if_igb.c (working copy)
@@ -4274,6 +4274,8 @@
struct adapter *adapter = ifp->if_softc;
u32 ctrl, rctl, index, vfta;
+ if (strcmp("igb",ifp->if_dname)) return;
+
ctrl = E1000_READ_REG(&adapter->hw, E1000_CTRL);
ctrl |= E1000_CTRL_VME;
E1000_WRITE_REG(&adapter->hw, E1000_CTRL, ctrl);
@@ -4306,6 +4308,8 @@
struct adapter *adapter = ifp->if_softc;
u32 index, vfta;
+ if (strcmp("igb",ifp->if_dname)) return;
+
/* Remove entry in the hardware filter table */
index = ((vtag >> 5) & 0x7F);
vfta = E1000_READ_REG_ARRAY(&adapter->hw, E1000_VFTA, index);
Index: e1000/if_em.c
===================================================================
--- e1000/if_em.c (revision 191201)
+++ e1000/if_em.c (working copy)
@@ -4771,6 +4771,8 @@
struct adapter *adapter = ifp->if_softc;
u32 ctrl, rctl, index, vfta;
+ if (strcmp("em",ifp->if_dname)) return;
+
ctrl = E1000_READ_REG(&adapter->hw, E1000_CTRL);
ctrl |= E1000_CTRL_VME;
E1000_WRITE_REG(&adapter->hw, E1000_CTRL, ctrl);
@@ -4803,6 +4805,8 @@
struct adapter *adapter = ifp->if_softc;
u32 index, vfta;
+ if (strcmp("em",ifp->if_dname)) return;
+
/* Remove entry in the hardware filter table */
index = ((vtag >> 5) & 0x7F);
vfta = E1000_READ_REG_ARRAY(&adapter->hw, E1000_VFTA, index);
Index: ixgbe/ixgbe.c
===================================================================
--- ixgbe/ixgbe.c (revision 191201)
+++ ixgbe/ixgbe.c (working copy)
@@ -4031,6 +4031,8 @@
struct adapter *adapter = ifp->if_softc;
u32 ctrl, rctl, index, vfta;
+ if (strcmp("ixgbe",ifp->if_dname)) return;
+
ctrl = IXGBE_READ_REG(&adapter->hw, IXGBE_VLNCTRL);
ctrl |= IXGBE_VLNCTRL_VME | IXGBE_VLNCTRL_VFE;
ctrl &= ~IXGBE_VLNCTRL_CFIEN;
@@ -4050,6 +4052,8 @@
struct adapter *adapter = ifp->if_softc;
u32 index, vfta;
+ if (strcmp("ixgbe",ifp->if_dname)) return;
+
/* Remove entry in the hardware filter table */
ixgbe_set_vfta(&adapter->hw, vtag, 0, FALSE);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?ac42db050904281032y7155332crc96b090893326d65>
