diff options
| author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-07-05 13:13:03 -0400 |
|---|---|---|
| committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-07-05 13:13:03 -0400 |
| commit | 5e66dd6d66ffe758b39b6dcadf2330753ee1159b (patch) | |
| tree | a72cdcff4448e4af9425cc213ddf56ab23e697fe /drivers/net | |
| parent | 026477c1141b67e98e3bd8bdedb7d4b88a3ecd09 (diff) | |
| parent | ca78f6baca863afe2e6a244a0fe94b3a70211d46 (diff) | |
Merge branch 'master' of /home/trondmy/kernel/linux-2.6/
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) | |||
| 1897 | printk(KERN_DEBUG "dev->watchdog_timeo=%d\n", dev->watchdog_timeo); | 1897 | printk(KERN_DEBUG "dev->watchdog_timeo=%d\n", dev->watchdog_timeo); |
| 1898 | } | 1898 | } |
| 1899 | 1899 | ||
| 1900 | disable_irq(dev->irq); | 1900 | disable_irq_lockdep(dev->irq); |
| 1901 | old_window = ioread16(ioaddr + EL3_CMD) >> 13; | 1901 | old_window = ioread16(ioaddr + EL3_CMD) >> 13; |
| 1902 | EL3WINDOW(4); | 1902 | EL3WINDOW(4); |
| 1903 | media_status = ioread16(ioaddr + Wn4_Media); | 1903 | media_status = ioread16(ioaddr + Wn4_Media); |
| @@ -1978,7 +1978,7 @@ leave_media_alone: | |||
| 1978 | dev->name, media_tbl[dev->if_port].name); | 1978 | dev->name, media_tbl[dev->if_port].name); |
| 1979 | 1979 | ||
| 1980 | EL3WINDOW(old_window); | 1980 | EL3WINDOW(old_window); |
| 1981 | enable_irq(dev->irq); | 1981 | enable_irq_lockdep(dev->irq); |
| 1982 | mod_timer(&vp->timer, RUN_AT(next_tick)); | 1982 | mod_timer(&vp->timer, RUN_AT(next_tick)); |
| 1983 | if (vp->deferred) | 1983 | if (vp->deferred) |
| 1984 | iowrite16(FakeIntr, ioaddr + EL3_CMD); | 1984 | 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) | |||
| 249 | 249 | ||
| 250 | /* Ugly but a reset can be slow, yet must be protected */ | 250 | /* Ugly but a reset can be slow, yet must be protected */ |
| 251 | 251 | ||
| 252 | disable_irq_nosync(dev->irq); | 252 | disable_irq_nosync_lockdep(dev->irq); |
| 253 | spin_lock(&ei_local->page_lock); | 253 | spin_lock(&ei_local->page_lock); |
| 254 | 254 | ||
| 255 | /* Try to restart the card. Perhaps the user has fixed something. */ | 255 | /* Try to restart the card. Perhaps the user has fixed something. */ |
| @@ -257,7 +257,7 @@ void ei_tx_timeout(struct net_device *dev) | |||
| 257 | NS8390_init(dev, 1); | 257 | NS8390_init(dev, 1); |
| 258 | 258 | ||
| 259 | spin_unlock(&ei_local->page_lock); | 259 | spin_unlock(&ei_local->page_lock); |
| 260 | enable_irq(dev->irq); | 260 | enable_irq_lockdep(dev->irq); |
| 261 | netif_wake_queue(dev); | 261 | netif_wake_queue(dev); |
| 262 | } | 262 | } |
| 263 | 263 | ||
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) | |||
| 2735 | 2735 | ||
| 2736 | if (!using_multi_irqs(dev)) { | 2736 | if (!using_multi_irqs(dev)) { |
| 2737 | if (np->msi_flags & NV_MSI_X_ENABLED) | 2737 | if (np->msi_flags & NV_MSI_X_ENABLED) |
| 2738 | disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); | 2738 | disable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); |
| 2739 | else | 2739 | else |
| 2740 | disable_irq(dev->irq); | 2740 | disable_irq_lockdep(dev->irq); |
| 2741 | mask = np->irqmask; | 2741 | mask = np->irqmask; |
| 2742 | } else { | 2742 | } else { |
| 2743 | if (np->nic_poll_irq & NVREG_IRQ_RX_ALL) { | 2743 | if (np->nic_poll_irq & NVREG_IRQ_RX_ALL) { |
| 2744 | disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector); | 2744 | disable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector); |
| 2745 | mask |= NVREG_IRQ_RX_ALL; | 2745 | mask |= NVREG_IRQ_RX_ALL; |
| 2746 | } | 2746 | } |
| 2747 | if (np->nic_poll_irq & NVREG_IRQ_TX_ALL) { | 2747 | if (np->nic_poll_irq & NVREG_IRQ_TX_ALL) { |
| 2748 | disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector); | 2748 | disable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector); |
| 2749 | mask |= NVREG_IRQ_TX_ALL; | 2749 | mask |= NVREG_IRQ_TX_ALL; |
| 2750 | } | 2750 | } |
| 2751 | if (np->nic_poll_irq & NVREG_IRQ_OTHER) { | 2751 | if (np->nic_poll_irq & NVREG_IRQ_OTHER) { |
| 2752 | disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_OTHER].vector); | 2752 | disable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_OTHER].vector); |
| 2753 | mask |= NVREG_IRQ_OTHER; | 2753 | mask |= NVREG_IRQ_OTHER; |
| 2754 | } | 2754 | } |
| 2755 | } | 2755 | } |
| @@ -2761,23 +2761,23 @@ static void nv_do_nic_poll(unsigned long data) | |||
| 2761 | pci_push(base); | 2761 | pci_push(base); |
| 2762 | 2762 | ||
| 2763 | if (!using_multi_irqs(dev)) { | 2763 | if (!using_multi_irqs(dev)) { |
| 2764 | nv_nic_irq((int) 0, (void *) data, (struct pt_regs *) NULL); | 2764 | nv_nic_irq(0, dev, NULL); |
| 2765 | if (np->msi_flags & NV_MSI_X_ENABLED) | 2765 | if (np->msi_flags & NV_MSI_X_ENABLED) |
| 2766 | enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); | 2766 | enable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector); |
| 2767 | else | 2767 | else |
| 2768 | enable_irq(dev->irq); | 2768 | enable_irq_lockdep(dev->irq); |
| 2769 | } else { | 2769 | } else { |
| 2770 | if (np->nic_poll_irq & NVREG_IRQ_RX_ALL) { | 2770 | if (np->nic_poll_irq & NVREG_IRQ_RX_ALL) { |
| 2771 | nv_nic_irq_rx((int) 0, (void *) data, (struct pt_regs *) NULL); | 2771 | nv_nic_irq_rx(0, dev, NULL); |
| 2772 | enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector); | 2772 | enable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector); |
| 2773 | } | 2773 | } |
| 2774 | if (np->nic_poll_irq & NVREG_IRQ_TX_ALL) { | 2774 | if (np->nic_poll_irq & NVREG_IRQ_TX_ALL) { |
| 2775 | nv_nic_irq_tx((int) 0, (void *) data, (struct pt_regs *) NULL); | 2775 | nv_nic_irq_tx(0, dev, NULL); |
| 2776 | enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector); | 2776 | enable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector); |
| 2777 | } | 2777 | } |
| 2778 | if (np->nic_poll_irq & NVREG_IRQ_OTHER) { | 2778 | if (np->nic_poll_irq & NVREG_IRQ_OTHER) { |
| 2779 | nv_nic_irq_other((int) 0, (void *) data, (struct pt_regs *) NULL); | 2779 | nv_nic_irq_other(0, dev, NULL); |
| 2780 | enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_OTHER].vector); | 2780 | enable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_OTHER].vector); |
| 2781 | } | 2781 | } |
| 2782 | } | 2782 | } |
| 2783 | } | 2783 | } |
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 | |||
| 242 | } | 242 | } |
| 243 | rc = request_irq(mp->tx_dma_intr, mace_txdma_intr, 0, "MACE-txdma", dev); | 243 | rc = request_irq(mp->tx_dma_intr, mace_txdma_intr, 0, "MACE-txdma", dev); |
| 244 | if (rc) { | 244 | if (rc) { |
| 245 | printk(KERN_ERR "MACE: can't get irq %d\n", mace->intrs[1].line); | 245 | printk(KERN_ERR "MACE: can't get irq %d\n", mp->tx_dma_intr); |
| 246 | goto err_free_irq; | 246 | goto err_free_irq; |
| 247 | } | 247 | } |
| 248 | rc = request_irq(mp->rx_dma_intr, mace_rxdma_intr, 0, "MACE-rxdma", dev); | 248 | rc = request_irq(mp->rx_dma_intr, mace_rxdma_intr, 0, "MACE-rxdma", dev); |
| 249 | if (rc) { | 249 | if (rc) { |
| 250 | printk(KERN_ERR "MACE: can't get irq %d\n", mace->intrs[2].line); | 250 | printk(KERN_ERR "MACE: can't get irq %d\n", mp->rx_dma_intr); |
| 251 | goto err_free_tx_irq; | 251 | goto err_free_tx_irq; |
| 252 | } | 252 | } |
| 253 | 253 | ||
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 @@ | |||
| 68 | 68 | ||
| 69 | #define DRV_MODULE_NAME "tg3" | 69 | #define DRV_MODULE_NAME "tg3" |
| 70 | #define PFX DRV_MODULE_NAME ": " | 70 | #define PFX DRV_MODULE_NAME ": " |
| 71 | #define DRV_MODULE_VERSION "3.61" | 71 | #define DRV_MODULE_VERSION "3.62" |
| 72 | #define DRV_MODULE_RELDATE "June 29, 2006" | 72 | #define DRV_MODULE_RELDATE "June 30, 2006" |
| 73 | 73 | ||
| 74 | #define TG3_DEF_MAC_MODE 0 | 74 | #define TG3_DEF_MAC_MODE 0 |
| 75 | #define TG3_DEF_RX_MODE 0 | 75 | #define TG3_DEF_RX_MODE 0 |
| @@ -3798,18 +3798,24 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 3798 | goto out_unlock; | 3798 | goto out_unlock; |
| 3799 | } | 3799 | } |
| 3800 | 3800 | ||
| 3801 | tcp_opt_len = ((skb->h.th->doff - 5) * 4); | 3801 | if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6) |
| 3802 | ip_tcp_len = (skb->nh.iph->ihl * 4) + sizeof(struct tcphdr); | 3802 | mss |= (skb_headlen(skb) - ETH_HLEN) << 9; |
| 3803 | else { | ||
| 3804 | tcp_opt_len = ((skb->h.th->doff - 5) * 4); | ||
| 3805 | ip_tcp_len = (skb->nh.iph->ihl * 4) + | ||
| 3806 | sizeof(struct tcphdr); | ||
| 3807 | |||
| 3808 | skb->nh.iph->check = 0; | ||
| 3809 | skb->nh.iph->tot_len = htons(mss + ip_tcp_len + | ||
| 3810 | tcp_opt_len); | ||
| 3811 | mss |= (ip_tcp_len + tcp_opt_len) << 9; | ||
| 3812 | } | ||
| 3803 | 3813 | ||
| 3804 | base_flags |= (TXD_FLAG_CPU_PRE_DMA | | 3814 | base_flags |= (TXD_FLAG_CPU_PRE_DMA | |
| 3805 | TXD_FLAG_CPU_POST_DMA); | 3815 | TXD_FLAG_CPU_POST_DMA); |
| 3806 | 3816 | ||
| 3807 | skb->nh.iph->check = 0; | ||
| 3808 | skb->nh.iph->tot_len = htons(mss + ip_tcp_len + tcp_opt_len); | ||
| 3809 | |||
| 3810 | skb->h.th->check = 0; | 3817 | skb->h.th->check = 0; |
| 3811 | 3818 | ||
| 3812 | mss |= (ip_tcp_len + tcp_opt_len) << 9; | ||
| 3813 | } | 3819 | } |
| 3814 | else if (skb->ip_summed == CHECKSUM_HW) | 3820 | else if (skb->ip_summed == CHECKSUM_HW) |
| 3815 | base_flags |= TXD_FLAG_TCPUDP_CSUM; | 3821 | base_flags |= TXD_FLAG_TCPUDP_CSUM; |
| @@ -7887,6 +7893,12 @@ static int tg3_set_tso(struct net_device *dev, u32 value) | |||
| 7887 | return -EINVAL; | 7893 | return -EINVAL; |
| 7888 | return 0; | 7894 | return 0; |
| 7889 | } | 7895 | } |
| 7896 | if (tp->tg3_flags2 & TG3_FLG2_HW_TSO_2) { | ||
| 7897 | if (value) | ||
| 7898 | dev->features |= NETIF_F_TSO6; | ||
| 7899 | else | ||
| 7900 | dev->features &= ~NETIF_F_TSO6; | ||
| 7901 | } | ||
| 7890 | return ethtool_op_set_tso(dev, value); | 7902 | return ethtool_op_set_tso(dev, value); |
| 7891 | } | 7903 | } |
| 7892 | #endif | 7904 | #endif |
| @@ -11507,8 +11519,11 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, | |||
| 11507 | * Firmware TSO on older chips gives lower performance, so it | 11519 | * Firmware TSO on older chips gives lower performance, so it |
| 11508 | * is off by default, but can be enabled using ethtool. | 11520 | * is off by default, but can be enabled using ethtool. |
| 11509 | */ | 11521 | */ |
| 11510 | if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) | 11522 | if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) { |
| 11511 | dev->features |= NETIF_F_TSO; | 11523 | dev->features |= NETIF_F_TSO; |
| 11524 | if (tp->tg3_flags2 & TG3_FLG2_HW_TSO_2) | ||
| 11525 | dev->features |= NETIF_F_TSO6; | ||
| 11526 | } | ||
| 11512 | 11527 | ||
| 11513 | #endif | 11528 | #endif |
| 11514 | 11529 | ||
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 @@ | |||
| 32 | #include <linux/netdevice.h> | 32 | #include <linux/netdevice.h> |
| 33 | #include <linux/pci.h> | 33 | #include <linux/pci.h> |
| 34 | #include <linux/string.h> | 34 | #include <linux/string.h> |
| 35 | #include <linux/version.h> | 35 | #include <linux/utsrelease.h> |
| 36 | 36 | ||
| 37 | 37 | ||
| 38 | static void bcm43xx_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) | 38 | 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) | |||
| 3095 | } | 3095 | } |
| 3096 | 3096 | ||
| 3097 | 3097 | ||
| 3098 | /* | ||
| 3099 | * HostAP uses two layers of net devices, where the inner | ||
| 3100 | * layer gets called all the time from the outer layer. | ||
| 3101 | * This is a natural nesting, which needs a split lock type. | ||
| 3102 | */ | ||
| 3103 | static struct lock_class_key hostap_netdev_xmit_lock_key; | ||
| 3104 | |||
| 3105 | |||
| 3098 | static struct net_device * | 3106 | static struct net_device * |
| 3099 | prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx, | 3107 | prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx, |
| 3100 | struct device *sdev) | 3108 | struct device *sdev) |
| @@ -3259,6 +3267,8 @@ while (0) | |||
| 3259 | SET_NETDEV_DEV(dev, sdev); | 3267 | SET_NETDEV_DEV(dev, sdev); |
| 3260 | if (ret >= 0) | 3268 | if (ret >= 0) |
| 3261 | ret = register_netdevice(dev); | 3269 | ret = register_netdevice(dev); |
| 3270 | |||
| 3271 | lockdep_set_class(&dev->_xmit_lock, &hostap_netdev_xmit_lock_key); | ||
| 3262 | rtnl_unlock(); | 3272 | rtnl_unlock(); |
| 3263 | if (ret < 0) { | 3273 | if (ret < 0) { |
| 3264 | printk(KERN_WARNING "%s: register netdevice failed!\n", | 3274 | printk(KERN_WARNING "%s: register netdevice failed!\n", |
