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