8139cp: fix VLAN unregistration
The 8139cp driver did VLAN unregistration incorrectly. It disables VLAN completely when the first VID is unregistered. It should instead disable VLAN when the group is unregistered by calling cp_vlan_rx_register with a NULL grp. Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
3d4e66f5cd
commit
7b332244a6
1 changed files with 4 additions and 13 deletions
|
@ -435,20 +435,12 @@ static void cp_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
|
||||||
|
|
||||||
spin_lock_irqsave(&cp->lock, flags);
|
spin_lock_irqsave(&cp->lock, flags);
|
||||||
cp->vlgrp = grp;
|
cp->vlgrp = grp;
|
||||||
|
if (grp)
|
||||||
cp->cpcmd |= RxVlanOn;
|
cp->cpcmd |= RxVlanOn;
|
||||||
cpw16(CpCmd, cp->cpcmd);
|
else
|
||||||
spin_unlock_irqrestore(&cp->lock, flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void cp_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
|
|
||||||
{
|
|
||||||
struct cp_private *cp = netdev_priv(dev);
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&cp->lock, flags);
|
|
||||||
cp->cpcmd &= ~RxVlanOn;
|
cp->cpcmd &= ~RxVlanOn;
|
||||||
|
|
||||||
cpw16(CpCmd, cp->cpcmd);
|
cpw16(CpCmd, cp->cpcmd);
|
||||||
vlan_group_set_device(cp->vlgrp, vid, NULL);
|
|
||||||
spin_unlock_irqrestore(&cp->lock, flags);
|
spin_unlock_irqrestore(&cp->lock, flags);
|
||||||
}
|
}
|
||||||
#endif /* CP_VLAN_TAG_USED */
|
#endif /* CP_VLAN_TAG_USED */
|
||||||
|
@ -1944,7 +1936,6 @@ static int cp_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
#if CP_VLAN_TAG_USED
|
#if CP_VLAN_TAG_USED
|
||||||
dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
|
dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
|
||||||
dev->vlan_rx_register = cp_vlan_rx_register;
|
dev->vlan_rx_register = cp_vlan_rx_register;
|
||||||
dev->vlan_rx_kill_vid = cp_vlan_rx_kill_vid;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (pci_using_dac)
|
if (pci_using_dac)
|
||||||
|
|
Loading…
Reference in a new issue