aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-06-03 15:41:05 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-06-03 15:41:05 -0400
commitc1a13ff57ab1ce52a0aae9984594dbfcfbaf68c0 (patch)
treec9f99adf0c1940ab0daeb2c3287152e49b096679
parent7dfb1716d717e41c07410bab52760d865caee12b (diff)
parentbeaf53bff7985ad57b5b6983f3d6142380449370 (diff)
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
* 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6: NET: add MAINTAINERS entry for ucc_geth driver myri10ge: report link up/down in standard ethtool way NetXen: Removal of extra free_irq call Update tulip maintainer email address smc91x: sh solution engine fixes. e1000: disable polling before registering netdevice network drivers: eliminate unneeded kill_vid code atl1: eliminate unneeded kill_vid code 8139cp: fix VLAN unregistration sky2: Fix VLAN unregistration VLAN: kill_vid is only useful for VLAN filtering devices qla3xxx: device doesnt do hardware checksumming.
-rw-r--r--MAINTAINERS9
-rw-r--r--drivers/net/8139cp.c17
-rw-r--r--drivers/net/acenic.c21
-rw-r--r--drivers/net/acenic.h1
-rw-r--r--drivers/net/amd8111e.c11
-rw-r--r--drivers/net/atl1/atl1_main.c33
-rw-r--r--drivers/net/bnx2.c14
-rw-r--r--drivers/net/chelsio/cxgb2.c10
-rw-r--r--drivers/net/cxgb3/cxgb3_main.c6
-rw-r--r--drivers/net/e1000/e1000_main.c11
-rw-r--r--drivers/net/forcedeth.c8
-rw-r--r--drivers/net/gianfar.c16
-rw-r--r--drivers/net/myri10ge/myri10ge.c1
-rw-r--r--drivers/net/netxen/netxen_nic_main.c2
-rw-r--r--drivers/net/ns83820.c12
-rwxr-xr-xdrivers/net/qla3xxx.c2
-rw-r--r--drivers/net/r8169.c11
-rw-r--r--drivers/net/s2io.c12
-rw-r--r--drivers/net/sky2.c31
-rw-r--r--drivers/net/smc91x.h5
-rw-r--r--drivers/net/spider_net.c40
-rw-r--r--drivers/net/tg3.c16
-rw-r--r--drivers/net/typhoon.c11
-rw-r--r--net/8021q/vlan.c10
24 files changed, 45 insertions, 265 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index 124b9508ae2e..f3b5a391e074 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1487,6 +1487,13 @@ L: linux-usb-devel@lists.sourceforge.net
1487L: linuxppc-embedded@ozlabs.org 1487L: linuxppc-embedded@ozlabs.org
1488S: Maintained 1488S: Maintained
1489 1489
1490FREESCALE QUICC ENGINE UCC ETHERNET DRIVER
1491P: Li Yang
1492M: leoli@freescale.com
1493L: netdev@vger.kernel.org
1494L: linuxppc-embedded@ozlabs.org
1495S: Maintained
1496
1490FILE LOCKING (flock() and fcntl()/lockf()) 1497FILE LOCKING (flock() and fcntl()/lockf())
1491P: Matthew Wilcox 1498P: Matthew Wilcox
1492M: matthew@wil.cx 1499M: matthew@wil.cx
@@ -3545,7 +3552,7 @@ S: Maintained
3545 3552
3546TULIP NETWORK DRIVER 3553TULIP NETWORK DRIVER
3547P: Valerie Henson 3554P: Valerie Henson
3548M: val_henson@linux.intel.com 3555M: val@nmt.edu
3549L: tulip-users@lists.sourceforge.net 3556L: tulip-users@lists.sourceforge.net
3550W: http://sourceforge.net/projects/tulip/ 3557W: http://sourceforge.net/projects/tulip/
3551S: Maintained 3558S: Maintained
diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c
index e8c9f27817b0..a804965e6542 100644
--- a/drivers/net/8139cp.c
+++ b/drivers/net/8139cp.c
@@ -435,20 +435,12 @@ static void cp_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
435 435
436 spin_lock_irqsave(&cp->lock, flags); 436 spin_lock_irqsave(&cp->lock, flags);
437 cp->vlgrp = grp; 437 cp->vlgrp = grp;
438 cp->cpcmd |= RxVlanOn; 438 if (grp)
439 cpw16(CpCmd, cp->cpcmd); 439 cp->cpcmd |= RxVlanOn;
440 spin_unlock_irqrestore(&cp->lock, flags); 440 else
441} 441 cp->cpcmd &= ~RxVlanOn;
442
443static void cp_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
444{
445 struct cp_private *cp = netdev_priv(dev);
446 unsigned long flags;
447 442
448 spin_lock_irqsave(&cp->lock, flags);
449 cp->cpcmd &= ~RxVlanOn;
450 cpw16(CpCmd, cp->cpcmd); 443 cpw16(CpCmd, cp->cpcmd);
451 vlan_group_set_device(cp->vlgrp, vid, NULL);
452 spin_unlock_irqrestore(&cp->lock, flags); 444 spin_unlock_irqrestore(&cp->lock, flags);
453} 445}
454#endif /* CP_VLAN_TAG_USED */ 446#endif /* CP_VLAN_TAG_USED */
@@ -1944,7 +1936,6 @@ static int cp_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1944#if CP_VLAN_TAG_USED 1936#if CP_VLAN_TAG_USED
1945 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 1937 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
1946 dev->vlan_rx_register = cp_vlan_rx_register; 1938 dev->vlan_rx_register = cp_vlan_rx_register;
1947 dev->vlan_rx_kill_vid = cp_vlan_rx_kill_vid;
1948#endif 1939#endif
1949 1940
1950 if (pci_using_dac) 1941 if (pci_using_dac)
diff --git a/drivers/net/acenic.c b/drivers/net/acenic.c
index 7122b7ba8d61..04382f979c99 100644
--- a/drivers/net/acenic.c
+++ b/drivers/net/acenic.c
@@ -480,12 +480,10 @@ static int __devinit acenic_probe_one(struct pci_dev *pdev,
480#if ACENIC_DO_VLAN 480#if ACENIC_DO_VLAN
481 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 481 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
482 dev->vlan_rx_register = ace_vlan_rx_register; 482 dev->vlan_rx_register = ace_vlan_rx_register;
483 dev->vlan_rx_kill_vid = ace_vlan_rx_kill_vid;
484#endif 483#endif
485 if (1) { 484
486 dev->tx_timeout = &ace_watchdog; 485 dev->tx_timeout = &ace_watchdog;
487 dev->watchdog_timeo = 5*HZ; 486 dev->watchdog_timeo = 5*HZ;
488 }
489 487
490 dev->open = &ace_open; 488 dev->open = &ace_open;
491 dev->stop = &ace_close; 489 dev->stop = &ace_close;
@@ -2283,19 +2281,6 @@ static void ace_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
2283 ace_unmask_irq(dev); 2281 ace_unmask_irq(dev);
2284 local_irq_restore(flags); 2282 local_irq_restore(flags);
2285} 2283}
2286
2287
2288static void ace_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
2289{
2290 struct ace_private *ap = netdev_priv(dev);
2291 unsigned long flags;
2292
2293 local_irq_save(flags);
2294 ace_mask_irq(dev);
2295 vlan_group_set_device(ap->vlgrp, vid, NULL);
2296 ace_unmask_irq(dev);
2297 local_irq_restore(flags);
2298}
2299#endif /* ACENIC_DO_VLAN */ 2284#endif /* ACENIC_DO_VLAN */
2300 2285
2301 2286
diff --git a/drivers/net/acenic.h b/drivers/net/acenic.h
index 8ca8534d70bf..60ed1837fa8f 100644
--- a/drivers/net/acenic.h
+++ b/drivers/net/acenic.h
@@ -787,7 +787,6 @@ static struct net_device_stats *ace_get_stats(struct net_device *dev);
787static int read_eeprom_byte(struct net_device *dev, unsigned long offset); 787static int read_eeprom_byte(struct net_device *dev, unsigned long offset);
788#if ACENIC_DO_VLAN 788#if ACENIC_DO_VLAN
789static void ace_vlan_rx_register(struct net_device *dev, struct vlan_group *grp); 789static void ace_vlan_rx_register(struct net_device *dev, struct vlan_group *grp);
790static void ace_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid);
791#endif 790#endif
792 791
793#endif /* _ACENIC_H_ */ 792#endif /* _ACENIC_H_ */
diff --git a/drivers/net/amd8111e.c b/drivers/net/amd8111e.c
index 84b81642011c..a61b2f89fc33 100644
--- a/drivers/net/amd8111e.c
+++ b/drivers/net/amd8111e.c
@@ -1728,15 +1728,8 @@ static void amd8111e_vlan_rx_register(struct net_device *dev, struct vlan_group
1728 lp->vlgrp = grp; 1728 lp->vlgrp = grp;
1729 spin_unlock_irq(&lp->lock); 1729 spin_unlock_irq(&lp->lock);
1730} 1730}
1731
1732static void amd8111e_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
1733{
1734 struct amd8111e_priv *lp = netdev_priv(dev);
1735 spin_lock_irq(&lp->lock);
1736 vlan_group_set_device(lp->vlgrp, vid, NULL);
1737 spin_unlock_irq(&lp->lock);
1738}
1739#endif 1731#endif
1732
1740static int amd8111e_enable_magicpkt(struct amd8111e_priv* lp) 1733static int amd8111e_enable_magicpkt(struct amd8111e_priv* lp)
1741{ 1734{
1742 writel( VAL1|MPPLBA, lp->mmio + CMD3); 1735 writel( VAL1|MPPLBA, lp->mmio + CMD3);
@@ -1996,7 +1989,6 @@ static int __devinit amd8111e_probe_one(struct pci_dev *pdev,
1996#if AMD8111E_VLAN_TAG_USED 1989#if AMD8111E_VLAN_TAG_USED
1997 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX ; 1990 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX ;
1998 dev->vlan_rx_register =amd8111e_vlan_rx_register; 1991 dev->vlan_rx_register =amd8111e_vlan_rx_register;
1999 dev->vlan_rx_kill_vid = amd8111e_vlan_rx_kill_vid;
2000#endif 1992#endif
2001 1993
2002 lp = netdev_priv(dev); 1994 lp = netdev_priv(dev);
@@ -2049,7 +2041,6 @@ static int __devinit amd8111e_probe_one(struct pci_dev *pdev,
2049#if AMD8111E_VLAN_TAG_USED 2041#if AMD8111E_VLAN_TAG_USED
2050 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 2042 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
2051 dev->vlan_rx_register =amd8111e_vlan_rx_register; 2043 dev->vlan_rx_register =amd8111e_vlan_rx_register;
2052 dev->vlan_rx_kill_vid = amd8111e_vlan_rx_kill_vid;
2053#endif 2044#endif
2054 /* Probe the external PHY */ 2045 /* Probe the external PHY */
2055 amd8111e_probe_ext_phy(dev); 2046 amd8111e_probe_ext_phy(dev);
diff --git a/drivers/net/atl1/atl1_main.c b/drivers/net/atl1/atl1_main.c
index 78cf00ff3d38..6862c11ff864 100644
--- a/drivers/net/atl1/atl1_main.c
+++ b/drivers/net/atl1/atl1_main.c
@@ -1229,39 +1229,9 @@ static void atl1_vlan_rx_register(struct net_device *netdev,
1229 spin_unlock_irqrestore(&adapter->lock, flags); 1229 spin_unlock_irqrestore(&adapter->lock, flags);
1230} 1230}
1231 1231
1232/* FIXME: justify or remove -- CHS */
1233static void atl1_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
1234{
1235 /* We don't do Vlan filtering */
1236 return;
1237}
1238
1239/* FIXME: this looks wrong too -- CHS */
1240static void atl1_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
1241{
1242 struct atl1_adapter *adapter = netdev_priv(netdev);
1243 unsigned long flags;
1244
1245 spin_lock_irqsave(&adapter->lock, flags);
1246 /* atl1_irq_disable(adapter); */
1247 vlan_group_set_device(adapter->vlgrp, vid, NULL);
1248 /* atl1_irq_enable(adapter); */
1249 spin_unlock_irqrestore(&adapter->lock, flags);
1250 /* We don't do Vlan filtering */
1251 return;
1252}
1253
1254static void atl1_restore_vlan(struct atl1_adapter *adapter) 1232static void atl1_restore_vlan(struct atl1_adapter *adapter)
1255{ 1233{
1256 atl1_vlan_rx_register(adapter->netdev, adapter->vlgrp); 1234 atl1_vlan_rx_register(adapter->netdev, adapter->vlgrp);
1257 if (adapter->vlgrp) {
1258 u16 vid;
1259 for (vid = 0; vid < VLAN_GROUP_ARRAY_LEN; vid++) {
1260 if (!vlan_group_get_device(adapter->vlgrp, vid))
1261 continue;
1262 atl1_vlan_rx_add_vid(adapter->netdev, vid);
1263 }
1264 }
1265} 1235}
1266 1236
1267static u16 tpd_avail(struct atl1_tpd_ring *tpd_ring) 1237static u16 tpd_avail(struct atl1_tpd_ring *tpd_ring)
@@ -2203,8 +2173,7 @@ static int __devinit atl1_probe(struct pci_dev *pdev,
2203 netdev->poll_controller = atl1_poll_controller; 2173 netdev->poll_controller = atl1_poll_controller;
2204#endif 2174#endif
2205 netdev->vlan_rx_register = atl1_vlan_rx_register; 2175 netdev->vlan_rx_register = atl1_vlan_rx_register;
2206 netdev->vlan_rx_add_vid = atl1_vlan_rx_add_vid; 2176
2207 netdev->vlan_rx_kill_vid = atl1_vlan_rx_kill_vid;
2208 netdev->ethtool_ops = &atl1_ethtool_ops; 2177 netdev->ethtool_ops = &atl1_ethtool_ops;
2209 adapter->bd_number = cards_found; 2178 adapter->bd_number = cards_found;
2210 adapter->pci_using_64 = pci_using_64; 2179 adapter->pci_using_64 = pci_using_64;
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index 88b33c6ddda8..da7c3b0c533c 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -4786,19 +4786,6 @@ bnx2_vlan_rx_register(struct net_device *dev, struct vlan_group *vlgrp)
4786 4786
4787 bnx2_netif_start(bp); 4787 bnx2_netif_start(bp);
4788} 4788}
4789
4790/* Called with rtnl_lock */
4791static void
4792bnx2_vlan_rx_kill_vid(struct net_device *dev, uint16_t vid)
4793{
4794 struct bnx2 *bp = netdev_priv(dev);
4795
4796 bnx2_netif_stop(bp);
4797 vlan_group_set_device(bp->vlgrp, vid, NULL);
4798 bnx2_set_rx_mode(dev);
4799
4800 bnx2_netif_start(bp);
4801}
4802#endif 4789#endif
4803 4790
4804/* Called with netif_tx_lock. 4791/* Called with netif_tx_lock.
@@ -6453,7 +6440,6 @@ bnx2_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
6453 dev->watchdog_timeo = TX_TIMEOUT; 6440 dev->watchdog_timeo = TX_TIMEOUT;
6454#ifdef BCM_VLAN 6441#ifdef BCM_VLAN
6455 dev->vlan_rx_register = bnx2_vlan_rx_register; 6442 dev->vlan_rx_register = bnx2_vlan_rx_register;
6456 dev->vlan_rx_kill_vid = bnx2_vlan_rx_kill_vid;
6457#endif 6443#endif
6458 dev->poll = bnx2_poll; 6444 dev->poll = bnx2_poll;
6459 dev->ethtool_ops = &bnx2_ethtool_ops; 6445 dev->ethtool_ops = &bnx2_ethtool_ops;
diff --git a/drivers/net/chelsio/cxgb2.c b/drivers/net/chelsio/cxgb2.c
index 125c9b105869..231ce43b97cf 100644
--- a/drivers/net/chelsio/cxgb2.c
+++ b/drivers/net/chelsio/cxgb2.c
@@ -883,15 +883,6 @@ static void vlan_rx_register(struct net_device *dev,
883 t1_set_vlan_accel(adapter, grp != NULL); 883 t1_set_vlan_accel(adapter, grp != NULL);
884 spin_unlock_irq(&adapter->async_lock); 884 spin_unlock_irq(&adapter->async_lock);
885} 885}
886
887static void vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
888{
889 struct adapter *adapter = dev->priv;
890
891 spin_lock_irq(&adapter->async_lock);
892 vlan_group_set_device(adapter->vlan_grp, vid, NULL);
893 spin_unlock_irq(&adapter->async_lock);
894}
895#endif 886#endif
896 887
897#ifdef CONFIG_NET_POLL_CONTROLLER 888#ifdef CONFIG_NET_POLL_CONTROLLER
@@ -1099,7 +1090,6 @@ static int __devinit init_one(struct pci_dev *pdev,
1099 netdev->features |= 1090 netdev->features |=
1100 NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 1091 NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
1101 netdev->vlan_rx_register = vlan_rx_register; 1092 netdev->vlan_rx_register = vlan_rx_register;
1102 netdev->vlan_rx_kill_vid = vlan_rx_kill_vid;
1103#endif 1093#endif
1104 1094
1105 /* T204: disable TSO */ 1095 /* T204: disable TSO */
diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c
index 67b4b219d927..1b20f4060e2d 100644
--- a/drivers/net/cxgb3/cxgb3_main.c
+++ b/drivers/net/cxgb3/cxgb3_main.c
@@ -2067,11 +2067,6 @@ static void vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
2067 t3_synchronize_rx(adapter, pi); 2067 t3_synchronize_rx(adapter, pi);
2068} 2068}
2069 2069
2070static void vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
2071{
2072 /* nothing */
2073}
2074
2075#ifdef CONFIG_NET_POLL_CONTROLLER 2070#ifdef CONFIG_NET_POLL_CONTROLLER
2076static void cxgb_netpoll(struct net_device *dev) 2071static void cxgb_netpoll(struct net_device *dev)
2077{ 2072{
@@ -2409,7 +2404,6 @@ static int __devinit init_one(struct pci_dev *pdev,
2409 2404
2410 netdev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 2405 netdev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
2411 netdev->vlan_rx_register = vlan_rx_register; 2406 netdev->vlan_rx_register = vlan_rx_register;
2412 netdev->vlan_rx_kill_vid = vlan_rx_kill_vid;
2413 2407
2414 netdev->open = cxgb_open; 2408 netdev->open = cxgb_open;
2415 netdev->stop = cxgb_close; 2409 netdev->stop = cxgb_close;
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
index 9ec35b7a8207..cf8af928a69c 100644
--- a/drivers/net/e1000/e1000_main.c
+++ b/drivers/net/e1000/e1000_main.c
@@ -1142,13 +1142,16 @@ e1000_probe(struct pci_dev *pdev,
1142 !e1000_check_mng_mode(&adapter->hw)) 1142 !e1000_check_mng_mode(&adapter->hw))
1143 e1000_get_hw_control(adapter); 1143 e1000_get_hw_control(adapter);
1144 1144
1145 strcpy(netdev->name, "eth%d");
1146 if ((err = register_netdev(netdev)))
1147 goto err_register;
1148
1149 /* tell the stack to leave us alone until e1000_open() is called */ 1145 /* tell the stack to leave us alone until e1000_open() is called */
1150 netif_carrier_off(netdev); 1146 netif_carrier_off(netdev);
1151 netif_stop_queue(netdev); 1147 netif_stop_queue(netdev);
1148#ifdef CONFIG_E1000_NAPI
1149 netif_poll_disable(netdev);
1150#endif
1151
1152 strcpy(netdev->name, "eth%d");
1153 if ((err = register_netdev(netdev)))
1154 goto err_register;
1152 1155
1153 DPRINTK(PROBE, INFO, "Intel(R) PRO/1000 Network Connection\n"); 1156 DPRINTK(PROBE, INFO, "Intel(R) PRO/1000 Network Connection\n");
1154 1157
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
index 4154fd000746..32788ca40d25 100644
--- a/drivers/net/forcedeth.c
+++ b/drivers/net/forcedeth.c
@@ -4605,12 +4605,7 @@ static void nv_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
4605 writel(np->txrxctl_bits, get_hwbase(dev) + NvRegTxRxControl); 4605 writel(np->txrxctl_bits, get_hwbase(dev) + NvRegTxRxControl);
4606 4606
4607 spin_unlock_irq(&np->lock); 4607 spin_unlock_irq(&np->lock);
4608}; 4608}
4609
4610static void nv_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
4611{
4612 /* nothing to do */
4613};
4614 4609
4615/* The mgmt unit and driver use a semaphore to access the phy during init */ 4610/* The mgmt unit and driver use a semaphore to access the phy during init */
4616static int nv_mgmt_acquire_sema(struct net_device *dev) 4611static int nv_mgmt_acquire_sema(struct net_device *dev)
@@ -4956,7 +4951,6 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
4956 np->vlanctl_bits = NVREG_VLANCONTROL_ENABLE; 4951 np->vlanctl_bits = NVREG_VLANCONTROL_ENABLE;
4957 dev->features |= NETIF_F_HW_VLAN_RX | NETIF_F_HW_VLAN_TX; 4952 dev->features |= NETIF_F_HW_VLAN_RX | NETIF_F_HW_VLAN_TX;
4958 dev->vlan_rx_register = nv_vlan_rx_register; 4953 dev->vlan_rx_register = nv_vlan_rx_register;
4959 dev->vlan_rx_kill_vid = nv_vlan_rx_kill_vid;
4960 } 4954 }
4961 4955
4962 np->msi_flags = 0; 4956 np->msi_flags = 0;
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c
index f5b3cba23fc5..6822bf14267b 100644
--- a/drivers/net/gianfar.c
+++ b/drivers/net/gianfar.c
@@ -140,7 +140,6 @@ int gfar_clean_rx_ring(struct net_device *dev, int rx_work_limit);
140static int gfar_process_frame(struct net_device *dev, struct sk_buff *skb, int length); 140static int gfar_process_frame(struct net_device *dev, struct sk_buff *skb, int length);
141static void gfar_vlan_rx_register(struct net_device *netdev, 141static void gfar_vlan_rx_register(struct net_device *netdev,
142 struct vlan_group *grp); 142 struct vlan_group *grp);
143static void gfar_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid);
144void gfar_halt(struct net_device *dev); 143void gfar_halt(struct net_device *dev);
145void gfar_start(struct net_device *dev); 144void gfar_start(struct net_device *dev);
146static void gfar_clear_exact_match(struct net_device *dev); 145static void gfar_clear_exact_match(struct net_device *dev);
@@ -284,7 +283,6 @@ static int gfar_probe(struct platform_device *pdev)
284 283
285 if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_VLAN) { 284 if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_VLAN) {
286 dev->vlan_rx_register = gfar_vlan_rx_register; 285 dev->vlan_rx_register = gfar_vlan_rx_register;
287 dev->vlan_rx_kill_vid = gfar_vlan_rx_kill_vid;
288 286
289 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 287 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
290 288
@@ -1133,20 +1131,6 @@ static void gfar_vlan_rx_register(struct net_device *dev,
1133 spin_unlock_irqrestore(&priv->rxlock, flags); 1131 spin_unlock_irqrestore(&priv->rxlock, flags);
1134} 1132}
1135 1133
1136
1137static void gfar_vlan_rx_kill_vid(struct net_device *dev, uint16_t vid)
1138{
1139 struct gfar_private *priv = netdev_priv(dev);
1140 unsigned long flags;
1141
1142 spin_lock_irqsave(&priv->rxlock, flags);
1143
1144 vlan_group_set_device(priv->vlgrp, vid, NULL);
1145
1146 spin_unlock_irqrestore(&priv->rxlock, flags);
1147}
1148
1149
1150static int gfar_change_mtu(struct net_device *dev, int new_mtu) 1134static int gfar_change_mtu(struct net_device *dev, int new_mtu)
1151{ 1135{
1152 int tempsize, tempval; 1136 int tempsize, tempval;
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c
index 5d14be7405a3..b53b7ad999bc 100644
--- a/drivers/net/myri10ge/myri10ge.c
+++ b/drivers/net/myri10ge/myri10ge.c
@@ -1472,6 +1472,7 @@ static const struct ethtool_ops myri10ge_ethtool_ops = {
1472 .set_sg = ethtool_op_set_sg, 1472 .set_sg = ethtool_op_set_sg,
1473 .get_tso = ethtool_op_get_tso, 1473 .get_tso = ethtool_op_get_tso,
1474 .set_tso = ethtool_op_set_tso, 1474 .set_tso = ethtool_op_set_tso,
1475 .get_link = ethtool_op_get_link,
1475 .get_strings = myri10ge_get_strings, 1476 .get_strings = myri10ge_get_strings,
1476 .get_stats_count = myri10ge_get_stats_count, 1477 .get_stats_count = myri10ge_get_stats_count,
1477 .get_ethtool_stats = myri10ge_get_ethtool_stats, 1478 .get_ethtool_stats = myri10ge_get_ethtool_stats,
diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c
index 2c5c6d20e6e9..c61181f23bd5 100644
--- a/drivers/net/netxen/netxen_nic_main.c
+++ b/drivers/net/netxen/netxen_nic_main.c
@@ -654,8 +654,6 @@ static void __devexit netxen_nic_remove(struct pci_dev *pdev)
654 if (adapter->portnum == 0) 654 if (adapter->portnum == 0)
655 netxen_free_adapter_offload(adapter); 655 netxen_free_adapter_offload(adapter);
656 656
657 if (adapter->irq)
658 free_irq(adapter->irq, adapter);
659 if(adapter->portnum == 0) { 657 if(adapter->portnum == 0) {
660 /* leave the hw in the same state as reboot */ 658 /* leave the hw in the same state as reboot */
661 writel(0, NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE)); 659 writel(0, NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE));
diff --git a/drivers/net/ns83820.c b/drivers/net/ns83820.c
index 3439f8c649f9..717d8e9b9833 100644
--- a/drivers/net/ns83820.c
+++ b/drivers/net/ns83820.c
@@ -506,17 +506,6 @@ static void ns83820_vlan_rx_register(struct net_device *ndev, struct vlan_group
506 spin_unlock(&dev->tx_lock); 506 spin_unlock(&dev->tx_lock);
507 spin_unlock_irq(&dev->misc_lock); 507 spin_unlock_irq(&dev->misc_lock);
508} 508}
509
510static void ns83820_vlan_rx_kill_vid(struct net_device *ndev, unsigned short vid)
511{
512 struct ns83820 *dev = PRIV(ndev);
513
514 spin_lock_irq(&dev->misc_lock);
515 spin_lock(&dev->tx_lock);
516 vlan_group_set_device(dev->vlgrp, vid, NULL);
517 spin_unlock(&dev->tx_lock);
518 spin_unlock_irq(&dev->misc_lock);
519}
520#endif 509#endif
521 510
522/* Packet Receiver 511/* Packet Receiver
@@ -2083,7 +2072,6 @@ static int __devinit ns83820_init_one(struct pci_dev *pci_dev, const struct pci_
2083 /* We also support hardware vlan acceleration */ 2072 /* We also support hardware vlan acceleration */
2084 ndev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 2073 ndev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
2085 ndev->vlan_rx_register = ns83820_vlan_rx_register; 2074 ndev->vlan_rx_register = ns83820_vlan_rx_register;
2086 ndev->vlan_rx_kill_vid = ns83820_vlan_rx_kill_vid;
2087#endif 2075#endif
2088 2076
2089 if (using_dac) { 2077 if (using_dac) {
diff --git a/drivers/net/qla3xxx.c b/drivers/net/qla3xxx.c
index d8766c0e8255..585be044ebbb 100755
--- a/drivers/net/qla3xxx.c
+++ b/drivers/net/qla3xxx.c
@@ -4044,7 +4044,7 @@ static int __devinit ql3xxx_probe(struct pci_dev *pdev,
4044 if (pci_using_dac) 4044 if (pci_using_dac)
4045 ndev->features |= NETIF_F_HIGHDMA; 4045 ndev->features |= NETIF_F_HIGHDMA;
4046 if (qdev->device_id == QL3032_DEVICE_ID) 4046 if (qdev->device_id == QL3032_DEVICE_ID)
4047 ndev->features |= (NETIF_F_HW_CSUM | NETIF_F_SG); 4047 ndev->features |= NETIF_F_IP_CSUM | NETIF_F_SG;
4048 4048
4049 qdev->mem_map_registers = 4049 qdev->mem_map_registers =
4050 ioremap_nocache(pci_resource_start(pdev, 1), 4050 ioremap_nocache(pci_resource_start(pdev, 1),
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
index 45876a854f00..5ec7752caa48 100644
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
@@ -886,16 +886,6 @@ static void rtl8169_vlan_rx_register(struct net_device *dev,
886 spin_unlock_irqrestore(&tp->lock, flags); 886 spin_unlock_irqrestore(&tp->lock, flags);
887} 887}
888 888
889static void rtl8169_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
890{
891 struct rtl8169_private *tp = netdev_priv(dev);
892 unsigned long flags;
893
894 spin_lock_irqsave(&tp->lock, flags);
895 vlan_group_set_device(tp->vlgrp, vid, NULL);
896 spin_unlock_irqrestore(&tp->lock, flags);
897}
898
899static int rtl8169_rx_vlan_skb(struct rtl8169_private *tp, struct RxDesc *desc, 889static int rtl8169_rx_vlan_skb(struct rtl8169_private *tp, struct RxDesc *desc,
900 struct sk_buff *skb) 890 struct sk_buff *skb)
901{ 891{
@@ -1671,7 +1661,6 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1671#ifdef CONFIG_R8169_VLAN 1661#ifdef CONFIG_R8169_VLAN
1672 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 1662 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
1673 dev->vlan_rx_register = rtl8169_vlan_rx_register; 1663 dev->vlan_rx_register = rtl8169_vlan_rx_register;
1674 dev->vlan_rx_kill_vid = rtl8169_vlan_rx_kill_vid;
1675#endif 1664#endif
1676 1665
1677#ifdef CONFIG_NET_POLL_CONTROLLER 1666#ifdef CONFIG_NET_POLL_CONTROLLER
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c
index e3e6d410d72c..c6ba3dee8ae0 100644
--- a/drivers/net/s2io.c
+++ b/drivers/net/s2io.c
@@ -340,17 +340,6 @@ static void s2io_vlan_rx_register(struct net_device *dev,
340/* A flag indicating whether 'RX_PA_CFG_STRIP_VLAN_TAG' bit is set or not */ 340/* A flag indicating whether 'RX_PA_CFG_STRIP_VLAN_TAG' bit is set or not */
341static int vlan_strip_flag; 341static int vlan_strip_flag;
342 342
343/* Unregister the vlan */
344static void s2io_vlan_rx_kill_vid(struct net_device *dev, unsigned long vid)
345{
346 struct s2io_nic *nic = dev->priv;
347 unsigned long flags;
348
349 spin_lock_irqsave(&nic->tx_lock, flags);
350 vlan_group_set_device(nic->vlgrp, vid, NULL);
351 spin_unlock_irqrestore(&nic->tx_lock, flags);
352}
353
354/* 343/*
355 * Constants to be programmed into the Xena's registers, to configure 344 * Constants to be programmed into the Xena's registers, to configure
356 * the XAUI. 345 * the XAUI.
@@ -7412,7 +7401,6 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre)
7412 SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops); 7401 SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops);
7413 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 7402 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
7414 dev->vlan_rx_register = s2io_vlan_rx_register; 7403 dev->vlan_rx_register = s2io_vlan_rx_register;
7415 dev->vlan_rx_kill_vid = (void *)s2io_vlan_rx_kill_vid;
7416 7404
7417 /* 7405 /*
7418 * will use eth_mac_addr() for dev->set_mac_address 7406 * will use eth_mac_addr() for dev->set_mac_address
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index adfbe81693a6..fe01b961b597 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -1049,26 +1049,22 @@ static void sky2_vlan_rx_register(struct net_device *dev, struct vlan_group *grp
1049 u16 port = sky2->port; 1049 u16 port = sky2->port;
1050 1050
1051 netif_tx_lock_bh(dev); 1051 netif_tx_lock_bh(dev);
1052 netif_poll_disable(sky2->hw->dev[0]);
1052 1053
1053 sky2_write32(hw, SK_REG(port, RX_GMF_CTRL_T), RX_VLAN_STRIP_ON);
1054 sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T), TX_VLAN_TAG_ON);
1055 sky2->vlgrp = grp; 1054 sky2->vlgrp = grp;
1055 if (grp) {
1056 sky2_write32(hw, SK_REG(port, RX_GMF_CTRL_T),
1057 RX_VLAN_STRIP_ON);
1058 sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T),
1059 TX_VLAN_TAG_ON);
1060 } else {
1061 sky2_write32(hw, SK_REG(port, RX_GMF_CTRL_T),
1062 RX_VLAN_STRIP_OFF);
1063 sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T),
1064 TX_VLAN_TAG_OFF);
1065 }
1056 1066
1057 netif_tx_unlock_bh(dev); 1067 netif_poll_enable(sky2->hw->dev[0]);
1058}
1059
1060static void sky2_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
1061{
1062 struct sky2_port *sky2 = netdev_priv(dev);
1063 struct sky2_hw *hw = sky2->hw;
1064 u16 port = sky2->port;
1065
1066 netif_tx_lock_bh(dev);
1067
1068 sky2_write32(hw, SK_REG(port, RX_GMF_CTRL_T), RX_VLAN_STRIP_OFF);
1069 sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T), TX_VLAN_TAG_OFF);
1070 vlan_group_set_device(sky2->vlgrp, vid, NULL);
1071
1072 netif_tx_unlock_bh(dev); 1068 netif_tx_unlock_bh(dev);
1073} 1069}
1074#endif 1070#endif
@@ -3484,7 +3480,6 @@ static __devinit struct net_device *sky2_init_netdev(struct sky2_hw *hw,
3484#ifdef SKY2_VLAN_TAG_USED 3480#ifdef SKY2_VLAN_TAG_USED
3485 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 3481 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
3486 dev->vlan_rx_register = sky2_vlan_rx_register; 3482 dev->vlan_rx_register = sky2_vlan_rx_register;
3487 dev->vlan_rx_kill_vid = sky2_vlan_rx_kill_vid;
3488#endif 3483#endif
3489 3484
3490 /* read the mac address */ 3485 /* read the mac address */
diff --git a/drivers/net/smc91x.h b/drivers/net/smc91x.h
index 111f23d05764..506bffcbc6dc 100644
--- a/drivers/net/smc91x.h
+++ b/drivers/net/smc91x.h
@@ -281,17 +281,14 @@ SMC_outw(u16 val, void __iomem *ioaddr, int reg)
281 281
282#elif defined(CONFIG_SUPERH) 282#elif defined(CONFIG_SUPERH)
283 283
284#if defined(CONFIG_SH_7780_SOLUTION_ENGINE) || defined(CONFIG_SH_7722_SOLUTION_ENGINE) 284#ifdef CONFIG_SOLUTION_ENGINE
285#define SMC_CAN_USE_8BIT 0 285#define SMC_CAN_USE_8BIT 0
286#define SMC_CAN_USE_16BIT 1 286#define SMC_CAN_USE_16BIT 1
287#define SMC_CAN_USE_32BIT 0 287#define SMC_CAN_USE_32BIT 0
288#define SMC_IO_SHIFT 0 288#define SMC_IO_SHIFT 0
289#define SMC_NOWAIT 1 289#define SMC_NOWAIT 1
290 290
291#define SMC_inb(a, r) (inw((a) + ((r)&~1)) >> (8*(r%2)))&0xff
292#define SMC_inw(a, r) inw((a) + (r)) 291#define SMC_inw(a, r) inw((a) + (r))
293#define SMC_outb(v, a, r) outw(((inw((a)+((r)&~1))*(0xff<<8*(r%2)))) | ((v)<<(8*(r&2)))), (a) + ((r)&~1))
294
295#define SMC_outw(v, a, r) outw(v, (a) + (r)) 292#define SMC_outw(v, a, r) outw(v, (a) + (r))
296#define SMC_insw(a, r, p, l) insw((a) + (r), p, l) 293#define SMC_insw(a, r, p, l) insw((a) + (r), p, l)
297#define SMC_outsw(a, r, p, l) outsw((a) + (r), p, l) 294#define SMC_outsw(a, r, p, l) outsw((a) + (r), p, l)
diff --git a/drivers/net/spider_net.c b/drivers/net/spider_net.c
index ef84d7c757a0..b47ad1df2e0c 100644
--- a/drivers/net/spider_net.c
+++ b/drivers/net/spider_net.c
@@ -1191,43 +1191,6 @@ spider_net_poll(struct net_device *netdev, int *budget)
1191} 1191}
1192 1192
1193/** 1193/**
1194 * spider_net_vlan_rx_reg - initializes VLAN structures in the driver and card
1195 * @netdev: interface device structure
1196 * @grp: vlan_group structure that is registered (NULL on destroying interface)
1197 */
1198static void
1199spider_net_vlan_rx_reg(struct net_device *netdev, struct vlan_group *grp)
1200{
1201 /* further enhancement... yet to do */
1202 return;
1203}
1204
1205/**
1206 * spider_net_vlan_rx_add - adds VLAN id to the card filter
1207 * @netdev: interface device structure
1208 * @vid: VLAN id to add
1209 */
1210static void
1211spider_net_vlan_rx_add(struct net_device *netdev, uint16_t vid)
1212{
1213 /* further enhancement... yet to do */
1214 /* add vid to card's VLAN filter table */
1215 return;
1216}
1217
1218/**
1219 * spider_net_vlan_rx_kill - removes VLAN id to the card filter
1220 * @netdev: interface device structure
1221 * @vid: VLAN id to remove
1222 */
1223static void
1224spider_net_vlan_rx_kill(struct net_device *netdev, uint16_t vid)
1225{
1226 /* further enhancement... yet to do */
1227 /* remove vid from card's VLAN filter table */
1228}
1229
1230/**
1231 * spider_net_get_stats - get interface statistics 1194 * spider_net_get_stats - get interface statistics
1232 * @netdev: interface device structure 1195 * @netdev: interface device structure
1233 * 1196 *
@@ -2177,9 +2140,6 @@ spider_net_setup_netdev_ops(struct net_device *netdev)
2177 netdev->poll = &spider_net_poll; 2140 netdev->poll = &spider_net_poll;
2178 netdev->weight = SPIDER_NET_NAPI_WEIGHT; 2141 netdev->weight = SPIDER_NET_NAPI_WEIGHT;
2179 /* HW VLAN */ 2142 /* HW VLAN */
2180 netdev->vlan_rx_register = &spider_net_vlan_rx_reg;
2181 netdev->vlan_rx_add_vid = &spider_net_vlan_rx_add;
2182 netdev->vlan_rx_kill_vid = &spider_net_vlan_rx_kill;
2183#ifdef CONFIG_NET_POLL_CONTROLLER 2143#ifdef CONFIG_NET_POLL_CONTROLLER
2184 /* poll controller */ 2144 /* poll controller */
2185 netdev->poll_controller = &spider_net_poll_controller; 2145 netdev->poll_controller = &spider_net_poll_controller;
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index 923b9c725cc3..023779a581fd 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -9121,21 +9121,6 @@ static void tg3_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
9121 if (netif_running(dev)) 9121 if (netif_running(dev))
9122 tg3_netif_start(tp); 9122 tg3_netif_start(tp);
9123} 9123}
9124
9125static void tg3_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
9126{
9127 struct tg3 *tp = netdev_priv(dev);
9128
9129 if (netif_running(dev))
9130 tg3_netif_stop(tp);
9131
9132 tg3_full_lock(tp, 0);
9133 vlan_group_set_device(tp->vlgrp, vid, NULL);
9134 tg3_full_unlock(tp);
9135
9136 if (netif_running(dev))
9137 tg3_netif_start(tp);
9138}
9139#endif 9124#endif
9140 9125
9141static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec) 9126static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
@@ -11778,7 +11763,6 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
11778#if TG3_VLAN_TAG_USED 11763#if TG3_VLAN_TAG_USED
11779 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 11764 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
11780 dev->vlan_rx_register = tg3_vlan_rx_register; 11765 dev->vlan_rx_register = tg3_vlan_rx_register;
11781 dev->vlan_rx_kill_vid = tg3_vlan_rx_kill_vid;
11782#endif 11766#endif
11783 11767
11784 tp = netdev_priv(dev); 11768 tp = netdev_priv(dev);
diff --git a/drivers/net/typhoon.c b/drivers/net/typhoon.c
index f72573594121..15b2fb8aa492 100644
--- a/drivers/net/typhoon.c
+++ b/drivers/net/typhoon.c
@@ -741,15 +741,6 @@ typhoon_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
741 spin_unlock_bh(&tp->state_lock); 741 spin_unlock_bh(&tp->state_lock);
742} 742}
743 743
744static void
745typhoon_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
746{
747 struct typhoon *tp = netdev_priv(dev);
748 spin_lock_bh(&tp->state_lock);
749 vlan_group_set_device(tp->vlgrp, vid, NULL);
750 spin_unlock_bh(&tp->state_lock);
751}
752
753static inline void 744static inline void
754typhoon_tso_fill(struct sk_buff *skb, struct transmit_ring *txRing, 745typhoon_tso_fill(struct sk_buff *skb, struct transmit_ring *txRing,
755 u32 ring_dma) 746 u32 ring_dma)
@@ -2542,7 +2533,7 @@ typhoon_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
2542 dev->get_stats = typhoon_get_stats; 2533 dev->get_stats = typhoon_get_stats;
2543 dev->set_mac_address = typhoon_set_mac_address; 2534 dev->set_mac_address = typhoon_set_mac_address;
2544 dev->vlan_rx_register = typhoon_vlan_rx_register; 2535 dev->vlan_rx_register = typhoon_vlan_rx_register;
2545 dev->vlan_rx_kill_vid = typhoon_vlan_rx_kill_vid; 2536
2546 SET_ETHTOOL_OPS(dev, &typhoon_ethtool_ops); 2537 SET_ETHTOOL_OPS(dev, &typhoon_ethtool_ops);
2547 2538
2548 /* We can handle scatter gather, up to 16 entries, and 2539 /* We can handle scatter gather, up to 16 entries, and
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
index bd93c45778d4..ceef57c9ab32 100644
--- a/net/8021q/vlan.c
+++ b/net/8021q/vlan.c
@@ -240,10 +240,8 @@ static int unregister_vlan_dev(struct net_device *real_dev,
240 * interlock with HW accelerating devices or SW vlan 240 * interlock with HW accelerating devices or SW vlan
241 * input packet processing. 241 * input packet processing.
242 */ 242 */
243 if (real_dev->features & 243 if (real_dev->features & NETIF_F_HW_VLAN_FILTER)
244 (NETIF_F_HW_VLAN_RX | NETIF_F_HW_VLAN_FILTER)) {
245 real_dev->vlan_rx_kill_vid(real_dev, vlan_id); 244 real_dev->vlan_rx_kill_vid(real_dev, vlan_id);
246 }
247 245
248 vlan_group_set_device(grp, vlan_id, NULL); 246 vlan_group_set_device(grp, vlan_id, NULL);
249 synchronize_net(); 247 synchronize_net();
@@ -409,16 +407,14 @@ static struct net_device *register_vlan_device(const char *eth_IF_name,
409 } 407 }
410 408
411 if ((real_dev->features & NETIF_F_HW_VLAN_RX) && 409 if ((real_dev->features & NETIF_F_HW_VLAN_RX) &&
412 (real_dev->vlan_rx_register == NULL || 410 !real_dev->vlan_rx_register) {
413 real_dev->vlan_rx_kill_vid == NULL)) {
414 printk(VLAN_DBG "%s: Device %s has buggy VLAN hw accel.\n", 411 printk(VLAN_DBG "%s: Device %s has buggy VLAN hw accel.\n",
415 __FUNCTION__, real_dev->name); 412 __FUNCTION__, real_dev->name);
416 goto out_put_dev; 413 goto out_put_dev;
417 } 414 }
418 415
419 if ((real_dev->features & NETIF_F_HW_VLAN_FILTER) && 416 if ((real_dev->features & NETIF_F_HW_VLAN_FILTER) &&
420 (real_dev->vlan_rx_add_vid == NULL || 417 (!real_dev->vlan_rx_add_vid || !real_dev->vlan_rx_kill_vid)) {
421 real_dev->vlan_rx_kill_vid == NULL)) {
422 printk(VLAN_DBG "%s: Device %s has buggy VLAN hw accel.\n", 418 printk(VLAN_DBG "%s: Device %s has buggy VLAN hw accel.\n",
423 __FUNCTION__, real_dev->name); 419 __FUNCTION__, real_dev->name);
424 goto out_put_dev; 420 goto out_put_dev;