diff options
Diffstat (limited to 'drivers/net')
| -rw-r--r-- | drivers/net/bnx2x.h | 4 | ||||
| -rw-r--r-- | drivers/net/bnx2x_main.c | 42 | ||||
| -rw-r--r-- | drivers/net/bonding/bond_alb.c | 2 | ||||
| -rw-r--r-- | drivers/net/declance.c | 6 | ||||
| -rw-r--r-- | drivers/net/igb/igb_main.c | 9 | ||||
| -rw-r--r-- | drivers/net/ixgbe/ixgbe_main.c | 9 | ||||
| -rw-r--r-- | drivers/net/macvlan.c | 10 | ||||
| -rw-r--r-- | drivers/net/macvtap.c | 18 | ||||
| -rw-r--r-- | drivers/net/s2io.h | 2 | ||||
| -rw-r--r-- | drivers/net/tun.c | 14 | ||||
| -rw-r--r-- | drivers/net/wimax/i2400m/i2400m-usb.h | 1 | ||||
| -rw-r--r-- | drivers/net/wimax/i2400m/usb.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/recv.c | 4 |
13 files changed, 95 insertions, 28 deletions
diff --git a/drivers/net/bnx2x.h b/drivers/net/bnx2x.h index 8bd23687c530..bb0872a63315 100644 --- a/drivers/net/bnx2x.h +++ b/drivers/net/bnx2x.h | |||
| @@ -1062,6 +1062,10 @@ struct bnx2x { | |||
| 1062 | 1062 | ||
| 1063 | /* used to synchronize stats collecting */ | 1063 | /* used to synchronize stats collecting */ |
| 1064 | int stats_state; | 1064 | int stats_state; |
| 1065 | |||
| 1066 | /* used for synchronization of concurrent threads statistics handling */ | ||
| 1067 | spinlock_t stats_lock; | ||
| 1068 | |||
| 1065 | /* used by dmae command loader */ | 1069 | /* used by dmae command loader */ |
| 1066 | struct dmae_command stats_dmae; | 1070 | struct dmae_command stats_dmae; |
| 1067 | int executer_idx; | 1071 | int executer_idx; |
diff --git a/drivers/net/bnx2x_main.c b/drivers/net/bnx2x_main.c index 57ff5b3bcce6..46167c081727 100644 --- a/drivers/net/bnx2x_main.c +++ b/drivers/net/bnx2x_main.c | |||
| @@ -57,8 +57,8 @@ | |||
| 57 | #include "bnx2x_init_ops.h" | 57 | #include "bnx2x_init_ops.h" |
| 58 | #include "bnx2x_dump.h" | 58 | #include "bnx2x_dump.h" |
| 59 | 59 | ||
| 60 | #define DRV_MODULE_VERSION "1.52.53-1" | 60 | #define DRV_MODULE_VERSION "1.52.53-2" |
| 61 | #define DRV_MODULE_RELDATE "2010/18/04" | 61 | #define DRV_MODULE_RELDATE "2010/21/07" |
| 62 | #define BNX2X_BC_VER 0x040200 | 62 | #define BNX2X_BC_VER 0x040200 |
| 63 | 63 | ||
| 64 | #include <linux/firmware.h> | 64 | #include <linux/firmware.h> |
| @@ -3789,6 +3789,8 @@ static void bnx2x_storm_stats_post(struct bnx2x *bp) | |||
| 3789 | struct eth_query_ramrod_data ramrod_data = {0}; | 3789 | struct eth_query_ramrod_data ramrod_data = {0}; |
| 3790 | int i, rc; | 3790 | int i, rc; |
| 3791 | 3791 | ||
| 3792 | spin_lock_bh(&bp->stats_lock); | ||
| 3793 | |||
| 3792 | ramrod_data.drv_counter = bp->stats_counter++; | 3794 | ramrod_data.drv_counter = bp->stats_counter++; |
| 3793 | ramrod_data.collect_port = bp->port.pmf ? 1 : 0; | 3795 | ramrod_data.collect_port = bp->port.pmf ? 1 : 0; |
| 3794 | for_each_queue(bp, i) | 3796 | for_each_queue(bp, i) |
| @@ -3802,6 +3804,8 @@ static void bnx2x_storm_stats_post(struct bnx2x *bp) | |||
| 3802 | bp->spq_left++; | 3804 | bp->spq_left++; |
| 3803 | bp->stats_pending = 1; | 3805 | bp->stats_pending = 1; |
| 3804 | } | 3806 | } |
| 3807 | |||
| 3808 | spin_unlock_bh(&bp->stats_lock); | ||
| 3805 | } | 3809 | } |
| 3806 | } | 3810 | } |
| 3807 | 3811 | ||
| @@ -4367,6 +4371,14 @@ static int bnx2x_storm_stats_update(struct bnx2x *bp) | |||
| 4367 | struct host_func_stats *fstats = bnx2x_sp(bp, func_stats); | 4371 | struct host_func_stats *fstats = bnx2x_sp(bp, func_stats); |
| 4368 | struct bnx2x_eth_stats *estats = &bp->eth_stats; | 4372 | struct bnx2x_eth_stats *estats = &bp->eth_stats; |
| 4369 | int i; | 4373 | int i; |
| 4374 | u16 cur_stats_counter; | ||
| 4375 | |||
| 4376 | /* Make sure we use the value of the counter | ||
| 4377 | * used for sending the last stats ramrod. | ||
| 4378 | */ | ||
| 4379 | spin_lock_bh(&bp->stats_lock); | ||
| 4380 | cur_stats_counter = bp->stats_counter - 1; | ||
| 4381 | spin_unlock_bh(&bp->stats_lock); | ||
| 4370 | 4382 | ||
| 4371 | memcpy(&(fstats->total_bytes_received_hi), | 4383 | memcpy(&(fstats->total_bytes_received_hi), |
| 4372 | &(bnx2x_sp(bp, func_stats_base)->total_bytes_received_hi), | 4384 | &(bnx2x_sp(bp, func_stats_base)->total_bytes_received_hi), |
| @@ -4394,25 +4406,22 @@ static int bnx2x_storm_stats_update(struct bnx2x *bp) | |||
| 4394 | u32 diff; | 4406 | u32 diff; |
| 4395 | 4407 | ||
| 4396 | /* are storm stats valid? */ | 4408 | /* are storm stats valid? */ |
| 4397 | if ((u16)(le16_to_cpu(xclient->stats_counter) + 1) != | 4409 | if (le16_to_cpu(xclient->stats_counter) != cur_stats_counter) { |
| 4398 | bp->stats_counter) { | ||
| 4399 | DP(BNX2X_MSG_STATS, "[%d] stats not updated by xstorm" | 4410 | DP(BNX2X_MSG_STATS, "[%d] stats not updated by xstorm" |
| 4400 | " xstorm counter (0x%x) != stats_counter (0x%x)\n", | 4411 | " xstorm counter (0x%x) != stats_counter (0x%x)\n", |
| 4401 | i, xclient->stats_counter, bp->stats_counter); | 4412 | i, xclient->stats_counter, cur_stats_counter + 1); |
| 4402 | return -1; | 4413 | return -1; |
| 4403 | } | 4414 | } |
| 4404 | if ((u16)(le16_to_cpu(tclient->stats_counter) + 1) != | 4415 | if (le16_to_cpu(tclient->stats_counter) != cur_stats_counter) { |
| 4405 | bp->stats_counter) { | ||
| 4406 | DP(BNX2X_MSG_STATS, "[%d] stats not updated by tstorm" | 4416 | DP(BNX2X_MSG_STATS, "[%d] stats not updated by tstorm" |
| 4407 | " tstorm counter (0x%x) != stats_counter (0x%x)\n", | 4417 | " tstorm counter (0x%x) != stats_counter (0x%x)\n", |
| 4408 | i, tclient->stats_counter, bp->stats_counter); | 4418 | i, tclient->stats_counter, cur_stats_counter + 1); |
| 4409 | return -2; | 4419 | return -2; |
| 4410 | } | 4420 | } |
| 4411 | if ((u16)(le16_to_cpu(uclient->stats_counter) + 1) != | 4421 | if (le16_to_cpu(uclient->stats_counter) != cur_stats_counter) { |
| 4412 | bp->stats_counter) { | ||
| 4413 | DP(BNX2X_MSG_STATS, "[%d] stats not updated by ustorm" | 4422 | DP(BNX2X_MSG_STATS, "[%d] stats not updated by ustorm" |
| 4414 | " ustorm counter (0x%x) != stats_counter (0x%x)\n", | 4423 | " ustorm counter (0x%x) != stats_counter (0x%x)\n", |
| 4415 | i, uclient->stats_counter, bp->stats_counter); | 4424 | i, uclient->stats_counter, cur_stats_counter + 1); |
| 4416 | return -4; | 4425 | return -4; |
| 4417 | } | 4426 | } |
| 4418 | 4427 | ||
| @@ -4849,16 +4858,18 @@ static const struct { | |||
| 4849 | 4858 | ||
| 4850 | static void bnx2x_stats_handle(struct bnx2x *bp, enum bnx2x_stats_event event) | 4859 | static void bnx2x_stats_handle(struct bnx2x *bp, enum bnx2x_stats_event event) |
| 4851 | { | 4860 | { |
| 4852 | enum bnx2x_stats_state state = bp->stats_state; | 4861 | enum bnx2x_stats_state state; |
| 4853 | 4862 | ||
| 4854 | if (unlikely(bp->panic)) | 4863 | if (unlikely(bp->panic)) |
| 4855 | return; | 4864 | return; |
| 4856 | 4865 | ||
| 4857 | bnx2x_stats_stm[state][event].action(bp); | 4866 | /* Protect a state change flow */ |
| 4867 | spin_lock_bh(&bp->stats_lock); | ||
| 4868 | state = bp->stats_state; | ||
| 4858 | bp->stats_state = bnx2x_stats_stm[state][event].next_state; | 4869 | bp->stats_state = bnx2x_stats_stm[state][event].next_state; |
| 4870 | spin_unlock_bh(&bp->stats_lock); | ||
| 4859 | 4871 | ||
| 4860 | /* Make sure the state has been "changed" */ | 4872 | bnx2x_stats_stm[state][event].action(bp); |
| 4861 | smp_wmb(); | ||
| 4862 | 4873 | ||
| 4863 | if ((event != STATS_EVENT_UPDATE) || netif_msg_timer(bp)) | 4874 | if ((event != STATS_EVENT_UPDATE) || netif_msg_timer(bp)) |
| 4864 | DP(BNX2X_MSG_STATS, "state %d -> event %d -> state %d\n", | 4875 | DP(BNX2X_MSG_STATS, "state %d -> event %d -> state %d\n", |
| @@ -9908,6 +9919,7 @@ static int __devinit bnx2x_init_bp(struct bnx2x *bp) | |||
| 9908 | 9919 | ||
| 9909 | mutex_init(&bp->port.phy_mutex); | 9920 | mutex_init(&bp->port.phy_mutex); |
| 9910 | mutex_init(&bp->fw_mb_mutex); | 9921 | mutex_init(&bp->fw_mb_mutex); |
| 9922 | spin_lock_init(&bp->stats_lock); | ||
| 9911 | #ifdef BCM_CNIC | 9923 | #ifdef BCM_CNIC |
| 9912 | mutex_init(&bp->cnic_mutex); | 9924 | mutex_init(&bp->cnic_mutex); |
| 9913 | #endif | 9925 | #endif |
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c index df483076eda6..8d7dfd2f1e90 100644 --- a/drivers/net/bonding/bond_alb.c +++ b/drivers/net/bonding/bond_alb.c | |||
| @@ -822,7 +822,7 @@ static int rlb_initialize(struct bonding *bond) | |||
| 822 | 822 | ||
| 823 | /*initialize packet type*/ | 823 | /*initialize packet type*/ |
| 824 | pk_type->type = cpu_to_be16(ETH_P_ARP); | 824 | pk_type->type = cpu_to_be16(ETH_P_ARP); |
| 825 | pk_type->dev = NULL; | 825 | pk_type->dev = bond->dev; |
| 826 | pk_type->func = rlb_arp_recv; | 826 | pk_type->func = rlb_arp_recv; |
| 827 | 827 | ||
| 828 | /* register to receive ARPs */ | 828 | /* register to receive ARPs */ |
diff --git a/drivers/net/declance.c b/drivers/net/declance.c index 1d973db27c32..d7de376d7178 100644 --- a/drivers/net/declance.c +++ b/drivers/net/declance.c | |||
| @@ -1022,7 +1022,7 @@ static const struct net_device_ops lance_netdev_ops = { | |||
| 1022 | .ndo_set_mac_address = eth_mac_addr, | 1022 | .ndo_set_mac_address = eth_mac_addr, |
| 1023 | }; | 1023 | }; |
| 1024 | 1024 | ||
| 1025 | static int __init dec_lance_probe(struct device *bdev, const int type) | 1025 | static int __devinit dec_lance_probe(struct device *bdev, const int type) |
| 1026 | { | 1026 | { |
| 1027 | static unsigned version_printed; | 1027 | static unsigned version_printed; |
| 1028 | static const char fmt[] = "declance%d"; | 1028 | static const char fmt[] = "declance%d"; |
| @@ -1326,7 +1326,7 @@ static void __exit dec_lance_platform_remove(void) | |||
| 1326 | } | 1326 | } |
| 1327 | 1327 | ||
| 1328 | #ifdef CONFIG_TC | 1328 | #ifdef CONFIG_TC |
| 1329 | static int __init dec_lance_tc_probe(struct device *dev); | 1329 | static int __devinit dec_lance_tc_probe(struct device *dev); |
| 1330 | static int __exit dec_lance_tc_remove(struct device *dev); | 1330 | static int __exit dec_lance_tc_remove(struct device *dev); |
| 1331 | 1331 | ||
| 1332 | static const struct tc_device_id dec_lance_tc_table[] = { | 1332 | static const struct tc_device_id dec_lance_tc_table[] = { |
| @@ -1345,7 +1345,7 @@ static struct tc_driver dec_lance_tc_driver = { | |||
| 1345 | }, | 1345 | }, |
| 1346 | }; | 1346 | }; |
| 1347 | 1347 | ||
| 1348 | static int __init dec_lance_tc_probe(struct device *dev) | 1348 | static int __devinit dec_lance_tc_probe(struct device *dev) |
| 1349 | { | 1349 | { |
| 1350 | int status = dec_lance_probe(dev, PMAD_LANCE); | 1350 | int status = dec_lance_probe(dev, PMAD_LANCE); |
| 1351 | if (!status) | 1351 | if (!status) |
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c index 3881918f5382..cea37e0837ff 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c | |||
| @@ -1722,6 +1722,15 @@ static int __devinit igb_probe(struct pci_dev *pdev, | |||
| 1722 | u16 eeprom_apme_mask = IGB_EEPROM_APME; | 1722 | u16 eeprom_apme_mask = IGB_EEPROM_APME; |
| 1723 | u32 part_num; | 1723 | u32 part_num; |
| 1724 | 1724 | ||
| 1725 | /* Catch broken hardware that put the wrong VF device ID in | ||
| 1726 | * the PCIe SR-IOV capability. | ||
| 1727 | */ | ||
| 1728 | if (pdev->is_virtfn) { | ||
| 1729 | WARN(1, KERN_ERR "%s (%hx:%hx) should not be a VF!\n", | ||
| 1730 | pci_name(pdev), pdev->vendor, pdev->device); | ||
| 1731 | return -EINVAL; | ||
| 1732 | } | ||
| 1733 | |||
| 1725 | err = pci_enable_device_mem(pdev); | 1734 | err = pci_enable_device_mem(pdev); |
| 1726 | if (err) | 1735 | if (err) |
| 1727 | return err; | 1736 | return err; |
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index 7b5d9764f317..74d9b6df3029 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c | |||
| @@ -6492,6 +6492,15 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev, | |||
| 6492 | #endif | 6492 | #endif |
| 6493 | u32 part_num, eec; | 6493 | u32 part_num, eec; |
| 6494 | 6494 | ||
| 6495 | /* Catch broken hardware that put the wrong VF device ID in | ||
| 6496 | * the PCIe SR-IOV capability. | ||
| 6497 | */ | ||
| 6498 | if (pdev->is_virtfn) { | ||
| 6499 | WARN(1, KERN_ERR "%s (%hx:%hx) should not be a VF!\n", | ||
| 6500 | pci_name(pdev), pdev->vendor, pdev->device); | ||
| 6501 | return -EINVAL; | ||
| 6502 | } | ||
| 6503 | |||
| 6495 | err = pci_enable_device_mem(pdev); | 6504 | err = pci_enable_device_mem(pdev); |
| 6496 | if (err) | 6505 | if (err) |
| 6497 | return err; | 6506 | return err; |
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 87e8d4cb4057..f15fe2cf72ae 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c | |||
| @@ -499,7 +499,7 @@ static const struct net_device_ops macvlan_netdev_ops = { | |||
| 499 | .ndo_validate_addr = eth_validate_addr, | 499 | .ndo_validate_addr = eth_validate_addr, |
| 500 | }; | 500 | }; |
| 501 | 501 | ||
| 502 | static void macvlan_setup(struct net_device *dev) | 502 | void macvlan_common_setup(struct net_device *dev) |
| 503 | { | 503 | { |
| 504 | ether_setup(dev); | 504 | ether_setup(dev); |
| 505 | 505 | ||
| @@ -508,6 +508,12 @@ static void macvlan_setup(struct net_device *dev) | |||
| 508 | dev->destructor = free_netdev; | 508 | dev->destructor = free_netdev; |
| 509 | dev->header_ops = &macvlan_hard_header_ops, | 509 | dev->header_ops = &macvlan_hard_header_ops, |
| 510 | dev->ethtool_ops = &macvlan_ethtool_ops; | 510 | dev->ethtool_ops = &macvlan_ethtool_ops; |
| 511 | } | ||
| 512 | EXPORT_SYMBOL_GPL(macvlan_common_setup); | ||
| 513 | |||
| 514 | static void macvlan_setup(struct net_device *dev) | ||
| 515 | { | ||
| 516 | macvlan_common_setup(dev); | ||
| 511 | dev->tx_queue_len = 0; | 517 | dev->tx_queue_len = 0; |
| 512 | } | 518 | } |
| 513 | 519 | ||
| @@ -705,7 +711,6 @@ int macvlan_link_register(struct rtnl_link_ops *ops) | |||
| 705 | /* common fields */ | 711 | /* common fields */ |
| 706 | ops->priv_size = sizeof(struct macvlan_dev); | 712 | ops->priv_size = sizeof(struct macvlan_dev); |
| 707 | ops->get_tx_queues = macvlan_get_tx_queues; | 713 | ops->get_tx_queues = macvlan_get_tx_queues; |
| 708 | ops->setup = macvlan_setup; | ||
| 709 | ops->validate = macvlan_validate; | 714 | ops->validate = macvlan_validate; |
| 710 | ops->maxtype = IFLA_MACVLAN_MAX; | 715 | ops->maxtype = IFLA_MACVLAN_MAX; |
| 711 | ops->policy = macvlan_policy; | 716 | ops->policy = macvlan_policy; |
| @@ -719,6 +724,7 @@ EXPORT_SYMBOL_GPL(macvlan_link_register); | |||
| 719 | 724 | ||
| 720 | static struct rtnl_link_ops macvlan_link_ops = { | 725 | static struct rtnl_link_ops macvlan_link_ops = { |
| 721 | .kind = "macvlan", | 726 | .kind = "macvlan", |
| 727 | .setup = macvlan_setup, | ||
| 722 | .newlink = macvlan_newlink, | 728 | .newlink = macvlan_newlink, |
| 723 | .dellink = macvlan_dellink, | 729 | .dellink = macvlan_dellink, |
| 724 | }; | 730 | }; |
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c index a8a94e2f6ddc..ff02b836c3c4 100644 --- a/drivers/net/macvtap.c +++ b/drivers/net/macvtap.c | |||
| @@ -180,11 +180,18 @@ static int macvtap_forward(struct net_device *dev, struct sk_buff *skb) | |||
| 180 | { | 180 | { |
| 181 | struct macvtap_queue *q = macvtap_get_queue(dev, skb); | 181 | struct macvtap_queue *q = macvtap_get_queue(dev, skb); |
| 182 | if (!q) | 182 | if (!q) |
| 183 | return -ENOLINK; | 183 | goto drop; |
| 184 | |||
| 185 | if (skb_queue_len(&q->sk.sk_receive_queue) >= dev->tx_queue_len) | ||
| 186 | goto drop; | ||
| 184 | 187 | ||
| 185 | skb_queue_tail(&q->sk.sk_receive_queue, skb); | 188 | skb_queue_tail(&q->sk.sk_receive_queue, skb); |
| 186 | wake_up_interruptible_poll(sk_sleep(&q->sk), POLLIN | POLLRDNORM | POLLRDBAND); | 189 | wake_up_interruptible_poll(sk_sleep(&q->sk), POLLIN | POLLRDNORM | POLLRDBAND); |
| 187 | return 0; | 190 | return NET_RX_SUCCESS; |
| 191 | |||
| 192 | drop: | ||
| 193 | kfree_skb(skb); | ||
| 194 | return NET_RX_DROP; | ||
| 188 | } | 195 | } |
| 189 | 196 | ||
| 190 | /* | 197 | /* |
| @@ -235,8 +242,15 @@ static void macvtap_dellink(struct net_device *dev, | |||
| 235 | macvlan_dellink(dev, head); | 242 | macvlan_dellink(dev, head); |
| 236 | } | 243 | } |
| 237 | 244 | ||
| 245 | static void macvtap_setup(struct net_device *dev) | ||
| 246 | { | ||
| 247 | macvlan_common_setup(dev); | ||
| 248 | dev->tx_queue_len = TUN_READQ_SIZE; | ||
| 249 | } | ||
| 250 | |||
| 238 | static struct rtnl_link_ops macvtap_link_ops __read_mostly = { | 251 | static struct rtnl_link_ops macvtap_link_ops __read_mostly = { |
| 239 | .kind = "macvtap", | 252 | .kind = "macvtap", |
| 253 | .setup = macvtap_setup, | ||
| 240 | .newlink = macvtap_newlink, | 254 | .newlink = macvtap_newlink, |
| 241 | .dellink = macvtap_dellink, | 255 | .dellink = macvtap_dellink, |
| 242 | }; | 256 | }; |
diff --git a/drivers/net/s2io.h b/drivers/net/s2io.h index 5e52c75892df..7f3a53dcc6ef 100644 --- a/drivers/net/s2io.h +++ b/drivers/net/s2io.h | |||
| @@ -65,7 +65,7 @@ static int debug_level = ERR_DBG; | |||
| 65 | 65 | ||
| 66 | /* DEBUG message print. */ | 66 | /* DEBUG message print. */ |
| 67 | #define DBG_PRINT(dbg_level, fmt, args...) do { \ | 67 | #define DBG_PRINT(dbg_level, fmt, args...) do { \ |
| 68 | if (dbg_level >= debug_level) \ | 68 | if (dbg_level <= debug_level) \ |
| 69 | pr_info(fmt, ##args); \ | 69 | pr_info(fmt, ##args); \ |
| 70 | } while (0) | 70 | } while (0) |
| 71 | 71 | ||
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 6ad6fe706312..63042596f0cf 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c | |||
| @@ -736,8 +736,18 @@ static __inline__ ssize_t tun_put_user(struct tun_struct *tun, | |||
| 736 | gso.gso_type = VIRTIO_NET_HDR_GSO_TCPV6; | 736 | gso.gso_type = VIRTIO_NET_HDR_GSO_TCPV6; |
| 737 | else if (sinfo->gso_type & SKB_GSO_UDP) | 737 | else if (sinfo->gso_type & SKB_GSO_UDP) |
| 738 | gso.gso_type = VIRTIO_NET_HDR_GSO_UDP; | 738 | gso.gso_type = VIRTIO_NET_HDR_GSO_UDP; |
| 739 | else | 739 | else { |
| 740 | BUG(); | 740 | printk(KERN_ERR "tun: unexpected GSO type: " |
| 741 | "0x%x, gso_size %d, hdr_len %d\n", | ||
| 742 | sinfo->gso_type, gso.gso_size, | ||
| 743 | gso.hdr_len); | ||
| 744 | print_hex_dump(KERN_ERR, "tun: ", | ||
| 745 | DUMP_PREFIX_NONE, | ||
| 746 | 16, 1, skb->head, | ||
| 747 | min((int)gso.hdr_len, 64), true); | ||
| 748 | WARN_ON_ONCE(1); | ||
| 749 | return -EINVAL; | ||
| 750 | } | ||
| 741 | if (sinfo->gso_type & SKB_GSO_TCP_ECN) | 751 | if (sinfo->gso_type & SKB_GSO_TCP_ECN) |
| 742 | gso.gso_type |= VIRTIO_NET_HDR_GSO_ECN; | 752 | gso.gso_type |= VIRTIO_NET_HDR_GSO_ECN; |
| 743 | } else | 753 | } else |
diff --git a/drivers/net/wimax/i2400m/i2400m-usb.h b/drivers/net/wimax/i2400m/i2400m-usb.h index 2d7c96d7e865..eb80243e22df 100644 --- a/drivers/net/wimax/i2400m/i2400m-usb.h +++ b/drivers/net/wimax/i2400m/i2400m-usb.h | |||
| @@ -152,6 +152,7 @@ enum { | |||
| 152 | /* Device IDs */ | 152 | /* Device IDs */ |
| 153 | USB_DEVICE_ID_I6050 = 0x0186, | 153 | USB_DEVICE_ID_I6050 = 0x0186, |
| 154 | USB_DEVICE_ID_I6050_2 = 0x0188, | 154 | USB_DEVICE_ID_I6050_2 = 0x0188, |
| 155 | USB_DEVICE_ID_I6250 = 0x0187, | ||
| 155 | }; | 156 | }; |
| 156 | 157 | ||
| 157 | 158 | ||
diff --git a/drivers/net/wimax/i2400m/usb.c b/drivers/net/wimax/i2400m/usb.c index 0d5081d77dc0..d3365ac85dde 100644 --- a/drivers/net/wimax/i2400m/usb.c +++ b/drivers/net/wimax/i2400m/usb.c | |||
| @@ -491,6 +491,7 @@ int i2400mu_probe(struct usb_interface *iface, | |||
| 491 | switch (id->idProduct) { | 491 | switch (id->idProduct) { |
| 492 | case USB_DEVICE_ID_I6050: | 492 | case USB_DEVICE_ID_I6050: |
| 493 | case USB_DEVICE_ID_I6050_2: | 493 | case USB_DEVICE_ID_I6050_2: |
| 494 | case USB_DEVICE_ID_I6250: | ||
| 494 | i2400mu->i6050 = 1; | 495 | i2400mu->i6050 = 1; |
| 495 | break; | 496 | break; |
| 496 | default: | 497 | default: |
| @@ -739,6 +740,7 @@ static | |||
| 739 | struct usb_device_id i2400mu_id_table[] = { | 740 | struct usb_device_id i2400mu_id_table[] = { |
| 740 | { USB_DEVICE(0x8086, USB_DEVICE_ID_I6050) }, | 741 | { USB_DEVICE(0x8086, USB_DEVICE_ID_I6050) }, |
| 741 | { USB_DEVICE(0x8086, USB_DEVICE_ID_I6050_2) }, | 742 | { USB_DEVICE(0x8086, USB_DEVICE_ID_I6050_2) }, |
| 743 | { USB_DEVICE(0x8086, USB_DEVICE_ID_I6250) }, | ||
| 742 | { USB_DEVICE(0x8086, 0x0181) }, | 744 | { USB_DEVICE(0x8086, 0x0181) }, |
| 743 | { USB_DEVICE(0x8086, 0x1403) }, | 745 | { USB_DEVICE(0x8086, 0x1403) }, |
| 744 | { USB_DEVICE(0x8086, 0x1405) }, | 746 | { USB_DEVICE(0x8086, 0x1405) }, |
diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c index ca6065b71b46..e3e52913d83a 100644 --- a/drivers/net/wireless/ath/ath9k/recv.c +++ b/drivers/net/wireless/ath/ath9k/recv.c | |||
| @@ -844,9 +844,9 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp) | |||
| 844 | int dma_type; | 844 | int dma_type; |
| 845 | 845 | ||
| 846 | if (edma) | 846 | if (edma) |
| 847 | dma_type = DMA_FROM_DEVICE; | ||
| 848 | else | ||
| 849 | dma_type = DMA_BIDIRECTIONAL; | 847 | dma_type = DMA_BIDIRECTIONAL; |
| 848 | else | ||
| 849 | dma_type = DMA_FROM_DEVICE; | ||
| 850 | 850 | ||
| 851 | qtype = hp ? ATH9K_RX_QUEUE_HP : ATH9K_RX_QUEUE_LP; | 851 | qtype = hp ? ATH9K_RX_QUEUE_HP : ATH9K_RX_QUEUE_LP; |
| 852 | spin_lock_bh(&sc->rx.rxbuflock); | 852 | spin_lock_bh(&sc->rx.rxbuflock); |
