diff options
Diffstat (limited to 'drivers/net')
| -rw-r--r-- | drivers/net/3c59x.c | 4 | ||||
| -rw-r--r-- | drivers/net/8390.c | 4 | ||||
| -rw-r--r-- | drivers/net/forcedeth.c | 28 | ||||
| -rw-r--r-- | drivers/net/mace.c | 4 | ||||
| -rw-r--r-- | drivers/net/tg3.c | 33 | ||||
| -rw-r--r-- | drivers/net/wireless/bcm43xx/bcm43xx_ethtool.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/hostap/hostap_hw.c | 10 | 
7 files changed, 55 insertions, 30 deletions
| diff --git a/drivers/net/3c59x.c b/drivers/net/3c59x.c index 8ab03b4a885e..2819de79442c 100644 --- a/drivers/net/3c59x.c +++ b/drivers/net/3c59x.c @@ -1897,7 +1897,7 @@ vortex_timer(unsigned long data)  		printk(KERN_DEBUG "dev->watchdog_timeo=%d\n", dev->watchdog_timeo);  	} -	disable_irq(dev->irq); +	disable_irq_lockdep(dev->irq);  	old_window = ioread16(ioaddr + EL3_CMD) >> 13;  	EL3WINDOW(4);  	media_status = ioread16(ioaddr + Wn4_Media); @@ -1978,7 +1978,7 @@ leave_media_alone:  			 dev->name, media_tbl[dev->if_port].name);  	EL3WINDOW(old_window); -	enable_irq(dev->irq); +	enable_irq_lockdep(dev->irq);  	mod_timer(&vp->timer, RUN_AT(next_tick));  	if (vp->deferred)  		iowrite16(FakeIntr, ioaddr + EL3_CMD); diff --git a/drivers/net/8390.c b/drivers/net/8390.c index 86be96af9c8f..d2935ae39814 100644 --- a/drivers/net/8390.c +++ b/drivers/net/8390.c @@ -249,7 +249,7 @@ void ei_tx_timeout(struct net_device *dev)  	/* Ugly but a reset can be slow, yet must be protected */ -	disable_irq_nosync(dev->irq); +	disable_irq_nosync_lockdep(dev->irq);  	spin_lock(&ei_local->page_lock);  	/* Try to restart the card.  Perhaps the user has fixed something. */ @@ -257,7 +257,7 @@ void ei_tx_timeout(struct net_device *dev)  	NS8390_init(dev, 1);  	spin_unlock(&ei_local->page_lock); -	enable_irq(dev->irq); +	enable_irq_lockdep(dev->irq);  	netif_wake_queue(dev);  } diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c index 3c90003f4230..037d870712ff 100644 --- a/drivers/net/forcedeth.c +++ b/drivers/net/forcedeth.c @@ -2735,21 +2735,21 @@ static void nv_do_nic_poll(unsigned long data)  	if (!using_multi_irqs(dev)) {  		if (np->msi_flags & NV_MSI_X_ENABLED) -			disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); +			disable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector);  		else -			disable_irq(dev->irq); +			disable_irq_lockdep(dev->irq);  		mask = np->irqmask;  	} else {  		if (np->nic_poll_irq & NVREG_IRQ_RX_ALL) { -			disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector); +			disable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector);  			mask |= NVREG_IRQ_RX_ALL;  		}  		if (np->nic_poll_irq & NVREG_IRQ_TX_ALL) { -			disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector); +			disable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector);  			mask |= NVREG_IRQ_TX_ALL;  		}  		if (np->nic_poll_irq & NVREG_IRQ_OTHER) { -			disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_OTHER].vector); +			disable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_OTHER].vector);  			mask |= NVREG_IRQ_OTHER;  		}  	} @@ -2761,23 +2761,23 @@ static void nv_do_nic_poll(unsigned long data)  	pci_push(base);  	if (!using_multi_irqs(dev)) { -		nv_nic_irq((int) 0, (void *) data, (struct pt_regs *) NULL); +		nv_nic_irq(0, dev, NULL);  		if (np->msi_flags & NV_MSI_X_ENABLED) -			enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); +			enable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector);  		else -			enable_irq(dev->irq); +			enable_irq_lockdep(dev->irq);  	} else {  		if (np->nic_poll_irq & NVREG_IRQ_RX_ALL) { -			nv_nic_irq_rx((int) 0, (void *) data, (struct pt_regs *) NULL); -			enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector); +			nv_nic_irq_rx(0, dev, NULL); +			enable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector);  		}  		if (np->nic_poll_irq & NVREG_IRQ_TX_ALL) { -			nv_nic_irq_tx((int) 0, (void *) data, (struct pt_regs *) NULL); -			enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector); +			nv_nic_irq_tx(0, dev, NULL); +			enable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector);  		}  		if (np->nic_poll_irq & NVREG_IRQ_OTHER) { -			nv_nic_irq_other((int) 0, (void *) data, (struct pt_regs *) NULL); -			enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_OTHER].vector); +			nv_nic_irq_other(0, dev, NULL); +			enable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_OTHER].vector);  		}  	}  } diff --git a/drivers/net/mace.c b/drivers/net/mace.c index f2c0bf89f0c7..29e4b5aa6ead 100644 --- a/drivers/net/mace.c +++ b/drivers/net/mace.c @@ -242,12 +242,12 @@ static int __devinit mace_probe(struct macio_dev *mdev, const struct of_device_i  	}  	rc = request_irq(mp->tx_dma_intr, mace_txdma_intr, 0, "MACE-txdma", dev);  	if (rc) { -		printk(KERN_ERR "MACE: can't get irq %d\n", mace->intrs[1].line); +		printk(KERN_ERR "MACE: can't get irq %d\n", mp->tx_dma_intr);  		goto err_free_irq;  	}  	rc = request_irq(mp->rx_dma_intr, mace_rxdma_intr, 0, "MACE-rxdma", dev);  	if (rc) { -		printk(KERN_ERR "MACE: can't get irq %d\n", mace->intrs[2].line); +		printk(KERN_ERR "MACE: can't get irq %d\n", mp->rx_dma_intr);  		goto err_free_tx_irq;  	} diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index e5e1b2962936..f645921aff8b 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c @@ -68,8 +68,8 @@  #define DRV_MODULE_NAME		"tg3"  #define PFX DRV_MODULE_NAME	": " -#define DRV_MODULE_VERSION	"3.61" -#define DRV_MODULE_RELDATE	"June 29, 2006" +#define DRV_MODULE_VERSION	"3.62" +#define DRV_MODULE_RELDATE	"June 30, 2006"  #define TG3_DEF_MAC_MODE	0  #define TG3_DEF_RX_MODE		0 @@ -3798,18 +3798,24 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)  			goto out_unlock;  		} -		tcp_opt_len = ((skb->h.th->doff - 5) * 4); -		ip_tcp_len = (skb->nh.iph->ihl * 4) + sizeof(struct tcphdr); +		if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6) +			mss |= (skb_headlen(skb) - ETH_HLEN) << 9; +		else { +			tcp_opt_len = ((skb->h.th->doff - 5) * 4); +			ip_tcp_len = (skb->nh.iph->ihl * 4) + +				     sizeof(struct tcphdr); + +			skb->nh.iph->check = 0; +			skb->nh.iph->tot_len = htons(mss + ip_tcp_len + +						     tcp_opt_len); +			mss |= (ip_tcp_len + tcp_opt_len) << 9; +		}  		base_flags |= (TXD_FLAG_CPU_PRE_DMA |  			       TXD_FLAG_CPU_POST_DMA); -		skb->nh.iph->check = 0; -		skb->nh.iph->tot_len = htons(mss + ip_tcp_len + tcp_opt_len); -  		skb->h.th->check = 0; -		mss |= (ip_tcp_len + tcp_opt_len) << 9;  	}  	else if (skb->ip_summed == CHECKSUM_HW)  		base_flags |= TXD_FLAG_TCPUDP_CSUM; @@ -7887,6 +7893,12 @@ static int tg3_set_tso(struct net_device *dev, u32 value)  			return -EINVAL;  		return 0;  	} +	if (tp->tg3_flags2 & TG3_FLG2_HW_TSO_2) { +		if (value) +			dev->features |= NETIF_F_TSO6; +		else +			dev->features &= ~NETIF_F_TSO6; +	}  	return ethtool_op_set_tso(dev, value);  }  #endif @@ -11507,8 +11519,11 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,  	 * Firmware TSO on older chips gives lower performance, so it  	 * is off by default, but can be enabled using ethtool.  	 */ -	if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) +	if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {  		dev->features |= NETIF_F_TSO; +		if (tp->tg3_flags2 & TG3_FLG2_HW_TSO_2) +			dev->features |= NETIF_F_TSO6; +	}  #endif diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_ethtool.c b/drivers/net/wireless/bcm43xx/bcm43xx_ethtool.c index b3ffcf501311..e386dcc32e8c 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_ethtool.c +++ b/drivers/net/wireless/bcm43xx/bcm43xx_ethtool.c @@ -32,7 +32,7 @@  #include <linux/netdevice.h>  #include <linux/pci.h>  #include <linux/string.h> -#include <linux/version.h> +#include <linux/utsrelease.h>  static void bcm43xx_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c index b764cfda6e84..dafaa5ff5aa6 100644 --- a/drivers/net/wireless/hostap/hostap_hw.c +++ b/drivers/net/wireless/hostap/hostap_hw.c @@ -3095,6 +3095,14 @@ static void prism2_clear_set_tim_queue(local_info_t *local)  } +/* + * HostAP uses two layers of net devices, where the inner + * layer gets called all the time from the outer layer. + * This is a natural nesting, which needs a split lock type. + */ +static struct lock_class_key hostap_netdev_xmit_lock_key; + +  static struct net_device *  prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx,  		       struct device *sdev) @@ -3259,6 +3267,8 @@ while (0)  	SET_NETDEV_DEV(dev, sdev);  	if (ret >= 0)  		ret = register_netdevice(dev); + +	lockdep_set_class(&dev->_xmit_lock, &hostap_netdev_xmit_lock_key);  	rtnl_unlock();  	if (ret < 0) {  		printk(KERN_WARNING "%s: register netdevice failed!\n", | 
