[SKY2]: Fix VLAN unregistration sky2 disables VLAN completely when the first VID is unregistered. It should instead disable VLAN when the group is unregistered by calling sky2_vlan_rx_register with grp = NULL. Signed-off-by: Patrick McHardy --- commit 62d7f463e185a0b65915110d25d8c4c732e67c0a tree dc6efd2d80b927bb45e0b33b33a7b5174d1bf05a parent add81ec9b23f1fbe973093d5999a3d70e9d4c48b author Patrick McHardy Sun, 27 May 2007 20:39:09 +0200 committer Patrick McHardy Sun, 27 May 2007 20:39:09 +0200 drivers/net/sky2.c | 25 ++++++++++++------------- 1 files changed, 12 insertions(+), 13 deletions(-) diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index 832fd69..c973def 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c @@ -1050,8 +1050,17 @@ static void sky2_vlan_rx_register(struct net_device *dev, struct vlan_group *grp netif_tx_lock_bh(dev); - sky2_write32(hw, SK_REG(port, RX_GMF_CTRL_T), RX_VLAN_STRIP_ON); - sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T), TX_VLAN_TAG_ON); + if (grp) { + sky2_write32(hw, SK_REG(port, RX_GMF_CTRL_T), + RX_VLAN_STRIP_ON); + sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T), + TX_VLAN_TAG_ON); + } else { + sky2_write32(hw, SK_REG(port, RX_GMF_CTRL_T), + RX_VLAN_STRIP_OFF); + sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T), + TX_VLAN_TAG_OFF); + } sky2->vlgrp = grp; netif_tx_unlock_bh(dev); @@ -1059,17 +1068,7 @@ static void sky2_vlan_rx_register(struct net_device *dev, struct vlan_group *grp static void sky2_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) { - struct sky2_port *sky2 = netdev_priv(dev); - struct sky2_hw *hw = sky2->hw; - u16 port = sky2->port; - - netif_tx_lock_bh(dev); - - sky2_write32(hw, SK_REG(port, RX_GMF_CTRL_T), RX_VLAN_STRIP_OFF); - sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T), TX_VLAN_TAG_OFF); - vlan_group_set_device(sky2->vlgrp, vid, NULL); - - netif_tx_unlock_bh(dev); + return; } #endif