Skip site navigation (1)Skip section navigation (2)
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>