kern/132715: [lagg] [panic] Panic when creating vlan's on lagg
interface
Maxim Ignatenko
gelraen.ua at gmail.com
Tue Apr 28 17:32:39 UTC 2009
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.
-------------- next part --------------
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);
More information about the freebsd-current
mailing list