Message ID | 20090901001250.31418.88709.stgit@localhost.localdomain |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On Mon, 31 Aug 2009, Jeff Kirsher wrote: > From: Graham, David <david.graham@intel.com> <CUT> > A complete solution to this issue would require further driver changes. > The driver would need to discover if (and which) management VLANs are > active before enabling VLAN filtering, so that it could ensure that the > managed VLANs are included in the VLAN filter table. This discovery > requires that the BMC identifies its VLAN in registers accessible > to the driver, and at least on Dell PE2850 systems the BMC does not > identify its VLAN to allow such discovery. Intel is pursuing this issue > with the BMC vendor. > > Signed-off-by: Dave Graham <david.graham@intel.com> > Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Tested-by: Krzysztof Piotr Oledzki <ole@ans.pl> Thank you for both pushing this fix into the mainline and trying to convince Dell to fix the BMC code. BTW: this problem also exists on Dell 1425SC and probably on all e1000-based Dell servers. Best regards, Krzysztof Olędzki
From: Krzysztof Oledzki <ole@ans.pl> Date: Tue, 1 Sep 2009 02:53:29 +0200 (CEST) > > > On Mon, 31 Aug 2009, Jeff Kirsher wrote: > >> From: Graham, David <david.graham@intel.com> > > <CUT> >> A complete solution to this issue would require further driver >> changes. >> The driver would need to discover if (and which) management VLANs are >> active before enabling VLAN filtering, so that it could ensure that >> the >> managed VLANs are included in the VLAN filter table. This discovery >> requires that the BMC identifies its VLAN in registers accessible >> to the driver, and at least on Dell PE2850 systems the BMC does not >> identify its VLAN to allow such discovery. Intel is pursuing this >> issue >> with the BMC vendor. >> >> Signed-off-by: Dave Graham <david.graham@intel.com> >> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> > > Tested-by: Krzysztof Piotr Oledzki <ole@ans.pl> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index d7df00c..4bdbadc 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c @@ -2401,7 +2401,9 @@ static void e1000_set_rx_mode(struct net_device *netdev) rctl &= ~E1000_RCTL_MPE; } if (adapter->hw.mac_type != e1000_ich8lan) - rctl |= E1000_RCTL_VFE; + /* Enable VLAN filter if there is a VLAN */ + if (adapter->vlgrp) + rctl |= E1000_RCTL_VFE; } if (netdev->uc.count > rar_entries - 1) { @@ -4854,6 +4856,8 @@ static void e1000_vlan_rx_register(struct net_device *netdev, /* enable VLAN receive filtering */ rctl = er32(RCTL); rctl &= ~E1000_RCTL_CFIEN; + if (!(netdev->flags & IFF_PROMISC)) + rctl |= E1000_RCTL_VFE; ew32(RCTL, rctl); e1000_update_mng_vlan(adapter); } @@ -4864,6 +4868,11 @@ static void e1000_vlan_rx_register(struct net_device *netdev, ew32(CTRL, ctrl); if (adapter->hw.mac_type != e1000_ich8lan) { + /* disable VLAN receive filtering */ + rctl = er32(RCTL); + rctl &= ~E1000_RCTL_VFE; + ew32(RCTL, rctl); + if (adapter->mng_vlan_id != (u16)E1000_MNG_VLAN_NONE) { e1000_vlan_rx_kill_vid(netdev,