diff options
| -rw-r--r-- | drivers/bluetooth/btusb.c | 6 | ||||
| -rw-r--r-- | drivers/bluetooth/btwilink.c | 16 | ||||
| -rw-r--r-- | drivers/net/gianfar_ethtool.c | 8 | ||||
| -rw-r--r-- | drivers/net/greth.c | 12 | ||||
| -rw-r--r-- | drivers/net/greth.h | 1 | ||||
| -rw-r--r-- | drivers/net/ixgbe/ixgbe_main.c | 4 | ||||
| -rw-r--r-- | drivers/net/netconsole.c | 8 | ||||
| -rw-r--r-- | drivers/net/ppp_generic.c | 7 | ||||
| -rw-r--r-- | drivers/net/pxa168_eth.c | 1 | ||||
| -rw-r--r-- | drivers/net/r8169.c | 32 | ||||
| -rw-r--r-- | drivers/net/tg3.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/b43/main.c | 3 | ||||
| -rw-r--r-- | drivers/net/wireless/ipw2x00/ipw2100.c | 21 | ||||
| -rw-r--r-- | drivers/net/wireless/ipw2x00/ipw2200.c | 39 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 5 | ||||
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2800lib.c | 47 | ||||
| -rw-r--r-- | net/bluetooth/hci_event.c | 17 | ||||
| -rw-r--r-- | net/core/fib_rules.c | 4 | ||||
| -rw-r--r-- | net/ipv6/addrconf.c | 4 | ||||
| -rw-r--r-- | net/wireless/reg.c | 1 | ||||
| -rw-r--r-- | net/wireless/sme.c | 2 | ||||
| -rw-r--r-- | net/xfrm/xfrm_input.c | 5 |
22 files changed, 165 insertions, 80 deletions
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 3ef476070baf..9cbac6b445e1 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c | |||
| @@ -72,9 +72,15 @@ static struct usb_device_id btusb_table[] = { | |||
| 72 | /* Apple MacBookAir3,1, MacBookAir3,2 */ | 72 | /* Apple MacBookAir3,1, MacBookAir3,2 */ |
| 73 | { USB_DEVICE(0x05ac, 0x821b) }, | 73 | { USB_DEVICE(0x05ac, 0x821b) }, |
| 74 | 74 | ||
| 75 | /* Apple MacBookAir4,1 */ | ||
| 76 | { USB_DEVICE(0x05ac, 0x821f) }, | ||
| 77 | |||
| 75 | /* Apple MacBookPro8,2 */ | 78 | /* Apple MacBookPro8,2 */ |
| 76 | { USB_DEVICE(0x05ac, 0x821a) }, | 79 | { USB_DEVICE(0x05ac, 0x821a) }, |
| 77 | 80 | ||
| 81 | /* Apple MacMini5,1 */ | ||
| 82 | { USB_DEVICE(0x05ac, 0x8281) }, | ||
| 83 | |||
| 78 | /* AVM BlueFRITZ! USB v2.0 */ | 84 | /* AVM BlueFRITZ! USB v2.0 */ |
| 79 | { USB_DEVICE(0x057c, 0x3800) }, | 85 | { USB_DEVICE(0x057c, 0x3800) }, |
| 80 | 86 | ||
diff --git a/drivers/bluetooth/btwilink.c b/drivers/bluetooth/btwilink.c index 65d27aff553a..04d353f58d71 100644 --- a/drivers/bluetooth/btwilink.c +++ b/drivers/bluetooth/btwilink.c | |||
| @@ -125,6 +125,13 @@ static long st_receive(void *priv_data, struct sk_buff *skb) | |||
| 125 | /* protocol structure registered with shared transport */ | 125 | /* protocol structure registered with shared transport */ |
| 126 | static struct st_proto_s ti_st_proto[MAX_BT_CHNL_IDS] = { | 126 | static struct st_proto_s ti_st_proto[MAX_BT_CHNL_IDS] = { |
| 127 | { | 127 | { |
| 128 | .chnl_id = HCI_EVENT_PKT, /* HCI Events */ | ||
| 129 | .hdr_len = sizeof(struct hci_event_hdr), | ||
| 130 | .offset_len_in_hdr = offsetof(struct hci_event_hdr, plen), | ||
| 131 | .len_size = 1, /* sizeof(plen) in struct hci_event_hdr */ | ||
| 132 | .reserve = 8, | ||
| 133 | }, | ||
| 134 | { | ||
| 128 | .chnl_id = HCI_ACLDATA_PKT, /* ACL */ | 135 | .chnl_id = HCI_ACLDATA_PKT, /* ACL */ |
| 129 | .hdr_len = sizeof(struct hci_acl_hdr), | 136 | .hdr_len = sizeof(struct hci_acl_hdr), |
| 130 | .offset_len_in_hdr = offsetof(struct hci_acl_hdr, dlen), | 137 | .offset_len_in_hdr = offsetof(struct hci_acl_hdr, dlen), |
| @@ -138,13 +145,6 @@ static struct st_proto_s ti_st_proto[MAX_BT_CHNL_IDS] = { | |||
| 138 | .len_size = 1, /* sizeof(dlen) in struct hci_sco_hdr */ | 145 | .len_size = 1, /* sizeof(dlen) in struct hci_sco_hdr */ |
| 139 | .reserve = 8, | 146 | .reserve = 8, |
| 140 | }, | 147 | }, |
| 141 | { | ||
| 142 | .chnl_id = HCI_EVENT_PKT, /* HCI Events */ | ||
| 143 | .hdr_len = sizeof(struct hci_event_hdr), | ||
| 144 | .offset_len_in_hdr = offsetof(struct hci_event_hdr, plen), | ||
| 145 | .len_size = 1, /* sizeof(plen) in struct hci_event_hdr */ | ||
| 146 | .reserve = 8, | ||
| 147 | }, | ||
| 148 | }; | 148 | }; |
| 149 | 149 | ||
| 150 | /* Called from HCI core to initialize the device */ | 150 | /* Called from HCI core to initialize the device */ |
| @@ -240,7 +240,7 @@ static int ti_st_close(struct hci_dev *hdev) | |||
| 240 | if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags)) | 240 | if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags)) |
| 241 | return 0; | 241 | return 0; |
| 242 | 242 | ||
| 243 | for (i = 0; i < MAX_BT_CHNL_IDS; i++) { | 243 | for (i = MAX_BT_CHNL_IDS-1; i >= 0; i--) { |
| 244 | err = st_unregister(&ti_st_proto[i]); | 244 | err = st_unregister(&ti_st_proto[i]); |
| 245 | if (err) | 245 | if (err) |
| 246 | BT_ERR("st_unregister(%d) failed with error %d", | 246 | BT_ERR("st_unregister(%d) failed with error %d", |
diff --git a/drivers/net/gianfar_ethtool.c b/drivers/net/gianfar_ethtool.c index 25a8c2adb001..0caf3c323ec0 100644 --- a/drivers/net/gianfar_ethtool.c +++ b/drivers/net/gianfar_ethtool.c | |||
| @@ -1669,10 +1669,10 @@ static int gfar_get_cls_all(struct gfar_private *priv, | |||
| 1669 | u32 i = 0; | 1669 | u32 i = 0; |
| 1670 | 1670 | ||
| 1671 | list_for_each_entry(comp, &priv->rx_list.list, list) { | 1671 | list_for_each_entry(comp, &priv->rx_list.list, list) { |
| 1672 | if (i <= cmd->rule_cnt) { | 1672 | if (i == cmd->rule_cnt) |
| 1673 | rule_locs[i] = comp->fs.location; | 1673 | return -EMSGSIZE; |
| 1674 | i++; | 1674 | rule_locs[i] = comp->fs.location; |
| 1675 | } | 1675 | i++; |
| 1676 | } | 1676 | } |
| 1677 | 1677 | ||
| 1678 | cmd->data = MAX_FILER_IDX; | 1678 | cmd->data = MAX_FILER_IDX; |
diff --git a/drivers/net/greth.c b/drivers/net/greth.c index 16ce45c11934..52a39000c42c 100644 --- a/drivers/net/greth.c +++ b/drivers/net/greth.c | |||
| @@ -428,6 +428,7 @@ greth_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 428 | dma_sync_single_for_device(greth->dev, dma_addr, skb->len, DMA_TO_DEVICE); | 428 | dma_sync_single_for_device(greth->dev, dma_addr, skb->len, DMA_TO_DEVICE); |
| 429 | 429 | ||
| 430 | status = GRETH_BD_EN | GRETH_BD_IE | (skb->len & GRETH_BD_LEN); | 430 | status = GRETH_BD_EN | GRETH_BD_IE | (skb->len & GRETH_BD_LEN); |
| 431 | greth->tx_bufs_length[greth->tx_next] = skb->len & GRETH_BD_LEN; | ||
| 431 | 432 | ||
| 432 | /* Wrap around descriptor ring */ | 433 | /* Wrap around descriptor ring */ |
| 433 | if (greth->tx_next == GRETH_TXBD_NUM_MASK) { | 434 | if (greth->tx_next == GRETH_TXBD_NUM_MASK) { |
| @@ -490,7 +491,8 @@ greth_start_xmit_gbit(struct sk_buff *skb, struct net_device *dev) | |||
| 490 | if (nr_frags != 0) | 491 | if (nr_frags != 0) |
| 491 | status = GRETH_TXBD_MORE; | 492 | status = GRETH_TXBD_MORE; |
| 492 | 493 | ||
| 493 | status |= GRETH_TXBD_CSALL; | 494 | if (skb->ip_summed == CHECKSUM_PARTIAL) |
| 495 | status |= GRETH_TXBD_CSALL; | ||
| 494 | status |= skb_headlen(skb) & GRETH_BD_LEN; | 496 | status |= skb_headlen(skb) & GRETH_BD_LEN; |
| 495 | if (greth->tx_next == GRETH_TXBD_NUM_MASK) | 497 | if (greth->tx_next == GRETH_TXBD_NUM_MASK) |
| 496 | status |= GRETH_BD_WR; | 498 | status |= GRETH_BD_WR; |
| @@ -513,7 +515,9 @@ greth_start_xmit_gbit(struct sk_buff *skb, struct net_device *dev) | |||
| 513 | greth->tx_skbuff[curr_tx] = NULL; | 515 | greth->tx_skbuff[curr_tx] = NULL; |
| 514 | bdp = greth->tx_bd_base + curr_tx; | 516 | bdp = greth->tx_bd_base + curr_tx; |
| 515 | 517 | ||
| 516 | status = GRETH_TXBD_CSALL | GRETH_BD_EN; | 518 | status = GRETH_BD_EN; |
| 519 | if (skb->ip_summed == CHECKSUM_PARTIAL) | ||
| 520 | status |= GRETH_TXBD_CSALL; | ||
| 517 | status |= frag->size & GRETH_BD_LEN; | 521 | status |= frag->size & GRETH_BD_LEN; |
| 518 | 522 | ||
| 519 | /* Wrap around descriptor ring */ | 523 | /* Wrap around descriptor ring */ |
| @@ -641,6 +645,7 @@ static void greth_clean_tx(struct net_device *dev) | |||
| 641 | dev->stats.tx_fifo_errors++; | 645 | dev->stats.tx_fifo_errors++; |
| 642 | } | 646 | } |
| 643 | dev->stats.tx_packets++; | 647 | dev->stats.tx_packets++; |
| 648 | dev->stats.tx_bytes += greth->tx_bufs_length[greth->tx_last]; | ||
| 644 | greth->tx_last = NEXT_TX(greth->tx_last); | 649 | greth->tx_last = NEXT_TX(greth->tx_last); |
| 645 | greth->tx_free++; | 650 | greth->tx_free++; |
| 646 | } | 651 | } |
| @@ -695,6 +700,7 @@ static void greth_clean_tx_gbit(struct net_device *dev) | |||
| 695 | greth->tx_skbuff[greth->tx_last] = NULL; | 700 | greth->tx_skbuff[greth->tx_last] = NULL; |
| 696 | 701 | ||
| 697 | greth_update_tx_stats(dev, stat); | 702 | greth_update_tx_stats(dev, stat); |
| 703 | dev->stats.tx_bytes += skb->len; | ||
| 698 | 704 | ||
| 699 | bdp = greth->tx_bd_base + greth->tx_last; | 705 | bdp = greth->tx_bd_base + greth->tx_last; |
| 700 | 706 | ||
| @@ -796,6 +802,7 @@ static int greth_rx(struct net_device *dev, int limit) | |||
| 796 | memcpy(skb_put(skb, pkt_len), phys_to_virt(dma_addr), pkt_len); | 802 | memcpy(skb_put(skb, pkt_len), phys_to_virt(dma_addr), pkt_len); |
| 797 | 803 | ||
| 798 | skb->protocol = eth_type_trans(skb, dev); | 804 | skb->protocol = eth_type_trans(skb, dev); |
| 805 | dev->stats.rx_bytes += pkt_len; | ||
| 799 | dev->stats.rx_packets++; | 806 | dev->stats.rx_packets++; |
| 800 | netif_receive_skb(skb); | 807 | netif_receive_skb(skb); |
| 801 | } | 808 | } |
| @@ -910,6 +917,7 @@ static int greth_rx_gbit(struct net_device *dev, int limit) | |||
| 910 | 917 | ||
| 911 | skb->protocol = eth_type_trans(skb, dev); | 918 | skb->protocol = eth_type_trans(skb, dev); |
| 912 | dev->stats.rx_packets++; | 919 | dev->stats.rx_packets++; |
| 920 | dev->stats.rx_bytes += pkt_len; | ||
| 913 | netif_receive_skb(skb); | 921 | netif_receive_skb(skb); |
| 914 | 922 | ||
| 915 | greth->rx_skbuff[greth->rx_cur] = newskb; | 923 | greth->rx_skbuff[greth->rx_cur] = newskb; |
diff --git a/drivers/net/greth.h b/drivers/net/greth.h index 9a0040dee4da..232a622a85b7 100644 --- a/drivers/net/greth.h +++ b/drivers/net/greth.h | |||
| @@ -103,6 +103,7 @@ struct greth_private { | |||
| 103 | 103 | ||
| 104 | unsigned char *tx_bufs[GRETH_TXBD_NUM]; | 104 | unsigned char *tx_bufs[GRETH_TXBD_NUM]; |
| 105 | unsigned char *rx_bufs[GRETH_RXBD_NUM]; | 105 | unsigned char *rx_bufs[GRETH_RXBD_NUM]; |
| 106 | u16 tx_bufs_length[GRETH_TXBD_NUM]; | ||
| 106 | 107 | ||
| 107 | u16 tx_next; | 108 | u16 tx_next; |
| 108 | u16 tx_last; | 109 | u16 tx_last; |
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index 22790394318a..e1fcc9589278 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c | |||
| @@ -1321,8 +1321,8 @@ static void ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector, | |||
| 1321 | if (ring_is_rsc_enabled(rx_ring)) | 1321 | if (ring_is_rsc_enabled(rx_ring)) |
| 1322 | pkt_is_rsc = ixgbe_get_rsc_state(rx_desc); | 1322 | pkt_is_rsc = ixgbe_get_rsc_state(rx_desc); |
| 1323 | 1323 | ||
| 1324 | /* if this is a skb from previous receive DMA will be 0 */ | 1324 | /* linear means we are building an skb from multiple pages */ |
| 1325 | if (rx_buffer_info->dma) { | 1325 | if (!skb_is_nonlinear(skb)) { |
| 1326 | u16 hlen; | 1326 | u16 hlen; |
| 1327 | if (pkt_is_rsc && | 1327 | if (pkt_is_rsc && |
| 1328 | !(staterr & IXGBE_RXD_STAT_EOP) && | 1328 | !(staterr & IXGBE_RXD_STAT_EOP) && |
diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index dfc82720065a..ed2a3977c6e7 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c | |||
| @@ -799,5 +799,11 @@ static void __exit cleanup_netconsole(void) | |||
| 799 | } | 799 | } |
| 800 | } | 800 | } |
| 801 | 801 | ||
| 802 | module_init(init_netconsole); | 802 | /* |
| 803 | * Use late_initcall to ensure netconsole is | ||
| 804 | * initialized after network device driver if built-in. | ||
| 805 | * | ||
| 806 | * late_initcall() and module_init() are identical if built as module. | ||
| 807 | */ | ||
| 808 | late_initcall(init_netconsole); | ||
| 803 | module_exit(cleanup_netconsole); | 809 | module_exit(cleanup_netconsole); |
diff --git a/drivers/net/ppp_generic.c b/drivers/net/ppp_generic.c index 10e5d985afa3..edfa15d2e795 100644 --- a/drivers/net/ppp_generic.c +++ b/drivers/net/ppp_generic.c | |||
| @@ -1465,7 +1465,12 @@ static int ppp_mp_explode(struct ppp *ppp, struct sk_buff *skb) | |||
| 1465 | continue; | 1465 | continue; |
| 1466 | } | 1466 | } |
| 1467 | 1467 | ||
| 1468 | mtu = pch->chan->mtu - hdrlen; | 1468 | /* |
| 1469 | * hdrlen includes the 2-byte PPP protocol field, but the | ||
| 1470 | * MTU counts only the payload excluding the protocol field. | ||
| 1471 | * (RFC1661 Section 2) | ||
| 1472 | */ | ||
| 1473 | mtu = pch->chan->mtu - (hdrlen - 2); | ||
| 1469 | if (mtu < 4) | 1474 | if (mtu < 4) |
| 1470 | mtu = 4; | 1475 | mtu = 4; |
| 1471 | if (flen > mtu) | 1476 | if (flen > mtu) |
diff --git a/drivers/net/pxa168_eth.c b/drivers/net/pxa168_eth.c index 1a3033d8e7ed..d17d0624c5e6 100644 --- a/drivers/net/pxa168_eth.c +++ b/drivers/net/pxa168_eth.c | |||
| @@ -40,6 +40,7 @@ | |||
| 40 | #include <linux/clk.h> | 40 | #include <linux/clk.h> |
| 41 | #include <linux/phy.h> | 41 | #include <linux/phy.h> |
| 42 | #include <linux/io.h> | 42 | #include <linux/io.h> |
| 43 | #include <linux/interrupt.h> | ||
| 43 | #include <linux/types.h> | 44 | #include <linux/types.h> |
| 44 | #include <asm/pgtable.h> | 45 | #include <asm/pgtable.h> |
| 45 | #include <asm/system.h> | 46 | #include <asm/system.h> |
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index 02339b3352e7..c23667017922 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c | |||
| @@ -407,6 +407,7 @@ enum rtl_register_content { | |||
| 407 | RxOK = 0x0001, | 407 | RxOK = 0x0001, |
| 408 | 408 | ||
| 409 | /* RxStatusDesc */ | 409 | /* RxStatusDesc */ |
| 410 | RxBOVF = (1 << 24), | ||
| 410 | RxFOVF = (1 << 23), | 411 | RxFOVF = (1 << 23), |
| 411 | RxRWT = (1 << 22), | 412 | RxRWT = (1 << 22), |
| 412 | RxRES = (1 << 21), | 413 | RxRES = (1 << 21), |
| @@ -682,6 +683,7 @@ struct rtl8169_private { | |||
| 682 | struct mii_if_info mii; | 683 | struct mii_if_info mii; |
| 683 | struct rtl8169_counters counters; | 684 | struct rtl8169_counters counters; |
| 684 | u32 saved_wolopts; | 685 | u32 saved_wolopts; |
| 686 | u32 opts1_mask; | ||
| 685 | 687 | ||
| 686 | struct rtl_fw { | 688 | struct rtl_fw { |
| 687 | const struct firmware *fw; | 689 | const struct firmware *fw; |
| @@ -710,6 +712,7 @@ MODULE_FIRMWARE(FIRMWARE_8168D_1); | |||
| 710 | MODULE_FIRMWARE(FIRMWARE_8168D_2); | 712 | MODULE_FIRMWARE(FIRMWARE_8168D_2); |
| 711 | MODULE_FIRMWARE(FIRMWARE_8168E_1); | 713 | MODULE_FIRMWARE(FIRMWARE_8168E_1); |
| 712 | MODULE_FIRMWARE(FIRMWARE_8168E_2); | 714 | MODULE_FIRMWARE(FIRMWARE_8168E_2); |
| 715 | MODULE_FIRMWARE(FIRMWARE_8168E_3); | ||
| 713 | MODULE_FIRMWARE(FIRMWARE_8105E_1); | 716 | MODULE_FIRMWARE(FIRMWARE_8105E_1); |
| 714 | 717 | ||
| 715 | static int rtl8169_open(struct net_device *dev); | 718 | static int rtl8169_open(struct net_device *dev); |
| @@ -3077,6 +3080,14 @@ static void rtl8169_phy_reset(struct net_device *dev, | |||
| 3077 | netif_err(tp, link, dev, "PHY reset failed\n"); | 3080 | netif_err(tp, link, dev, "PHY reset failed\n"); |
| 3078 | } | 3081 | } |
| 3079 | 3082 | ||
| 3083 | static bool rtl_tbi_enabled(struct rtl8169_private *tp) | ||
| 3084 | { | ||
| 3085 | void __iomem *ioaddr = tp->mmio_addr; | ||
| 3086 | |||
| 3087 | return (tp->mac_version == RTL_GIGA_MAC_VER_01) && | ||
| 3088 | (RTL_R8(PHYstatus) & TBI_Enable); | ||
| 3089 | } | ||
| 3090 | |||
| 3080 | static void rtl8169_init_phy(struct net_device *dev, struct rtl8169_private *tp) | 3091 | static void rtl8169_init_phy(struct net_device *dev, struct rtl8169_private *tp) |
| 3081 | { | 3092 | { |
| 3082 | void __iomem *ioaddr = tp->mmio_addr; | 3093 | void __iomem *ioaddr = tp->mmio_addr; |
| @@ -3109,7 +3120,7 @@ static void rtl8169_init_phy(struct net_device *dev, struct rtl8169_private *tp) | |||
| 3109 | ADVERTISED_1000baseT_Half | | 3120 | ADVERTISED_1000baseT_Half | |
| 3110 | ADVERTISED_1000baseT_Full : 0)); | 3121 | ADVERTISED_1000baseT_Full : 0)); |
| 3111 | 3122 | ||
| 3112 | if (RTL_R8(PHYstatus) & TBI_Enable) | 3123 | if (rtl_tbi_enabled(tp)) |
| 3113 | netif_info(tp, link, dev, "TBI auto-negotiating\n"); | 3124 | netif_info(tp, link, dev, "TBI auto-negotiating\n"); |
| 3114 | } | 3125 | } |
| 3115 | 3126 | ||
| @@ -3319,9 +3330,16 @@ static void r810x_phy_power_up(struct rtl8169_private *tp) | |||
| 3319 | 3330 | ||
| 3320 | static void r810x_pll_power_down(struct rtl8169_private *tp) | 3331 | static void r810x_pll_power_down(struct rtl8169_private *tp) |
| 3321 | { | 3332 | { |
| 3333 | void __iomem *ioaddr = tp->mmio_addr; | ||
| 3334 | |||
| 3322 | if (__rtl8169_get_wol(tp) & WAKE_ANY) { | 3335 | if (__rtl8169_get_wol(tp) & WAKE_ANY) { |
| 3323 | rtl_writephy(tp, 0x1f, 0x0000); | 3336 | rtl_writephy(tp, 0x1f, 0x0000); |
| 3324 | rtl_writephy(tp, MII_BMCR, 0x0000); | 3337 | rtl_writephy(tp, MII_BMCR, 0x0000); |
| 3338 | |||
| 3339 | if (tp->mac_version == RTL_GIGA_MAC_VER_29 || | ||
| 3340 | tp->mac_version == RTL_GIGA_MAC_VER_30) | ||
| 3341 | RTL_W32(RxConfig, RTL_R32(RxConfig) | AcceptBroadcast | | ||
| 3342 | AcceptMulticast | AcceptMyPhys); | ||
| 3325 | return; | 3343 | return; |
| 3326 | } | 3344 | } |
| 3327 | 3345 | ||
| @@ -3417,7 +3435,8 @@ static void r8168_pll_power_down(struct rtl8169_private *tp) | |||
| 3417 | rtl_writephy(tp, MII_BMCR, 0x0000); | 3435 | rtl_writephy(tp, MII_BMCR, 0x0000); |
| 3418 | 3436 | ||
| 3419 | if (tp->mac_version == RTL_GIGA_MAC_VER_32 || | 3437 | if (tp->mac_version == RTL_GIGA_MAC_VER_32 || |
| 3420 | tp->mac_version == RTL_GIGA_MAC_VER_33) | 3438 | tp->mac_version == RTL_GIGA_MAC_VER_33 || |
| 3439 | tp->mac_version == RTL_GIGA_MAC_VER_34) | ||
| 3421 | RTL_W32(RxConfig, RTL_R32(RxConfig) | AcceptBroadcast | | 3440 | RTL_W32(RxConfig, RTL_R32(RxConfig) | AcceptBroadcast | |
| 3422 | AcceptMulticast | AcceptMyPhys); | 3441 | AcceptMulticast | AcceptMyPhys); |
| 3423 | return; | 3442 | return; |
| @@ -3727,8 +3746,7 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 3727 | tp->features |= rtl_try_msi(pdev, ioaddr, cfg); | 3746 | tp->features |= rtl_try_msi(pdev, ioaddr, cfg); |
| 3728 | RTL_W8(Cfg9346, Cfg9346_Lock); | 3747 | RTL_W8(Cfg9346, Cfg9346_Lock); |
| 3729 | 3748 | ||
| 3730 | if ((tp->mac_version <= RTL_GIGA_MAC_VER_06) && | 3749 | if (rtl_tbi_enabled(tp)) { |
| 3731 | (RTL_R8(PHYstatus) & TBI_Enable)) { | ||
| 3732 | tp->set_speed = rtl8169_set_speed_tbi; | 3750 | tp->set_speed = rtl8169_set_speed_tbi; |
| 3733 | tp->get_settings = rtl8169_gset_tbi; | 3751 | tp->get_settings = rtl8169_gset_tbi; |
| 3734 | tp->phy_reset_enable = rtl8169_tbi_reset_enable; | 3752 | tp->phy_reset_enable = rtl8169_tbi_reset_enable; |
| @@ -3777,6 +3795,9 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 3777 | tp->intr_event = cfg->intr_event; | 3795 | tp->intr_event = cfg->intr_event; |
| 3778 | tp->napi_event = cfg->napi_event; | 3796 | tp->napi_event = cfg->napi_event; |
| 3779 | 3797 | ||
| 3798 | tp->opts1_mask = (tp->mac_version != RTL_GIGA_MAC_VER_01) ? | ||
| 3799 | ~(RxBOVF | RxFOVF) : ~0; | ||
| 3800 | |||
| 3780 | init_timer(&tp->timer); | 3801 | init_timer(&tp->timer); |
| 3781 | tp->timer.data = (unsigned long) dev; | 3802 | tp->timer.data = (unsigned long) dev; |
| 3782 | tp->timer.function = rtl8169_phy_timer; | 3803 | tp->timer.function = rtl8169_phy_timer; |
| @@ -3988,6 +4009,7 @@ static void rtl8169_hw_reset(struct rtl8169_private *tp) | |||
| 3988 | while (RTL_R8(TxPoll) & NPQ) | 4009 | while (RTL_R8(TxPoll) & NPQ) |
| 3989 | udelay(20); | 4010 | udelay(20); |
| 3990 | } else if (tp->mac_version == RTL_GIGA_MAC_VER_34) { | 4011 | } else if (tp->mac_version == RTL_GIGA_MAC_VER_34) { |
| 4012 | RTL_W8(ChipCmd, RTL_R8(ChipCmd) | StopReq); | ||
| 3991 | while (!(RTL_R32(TxConfig) & TXCFG_EMPTY)) | 4013 | while (!(RTL_R32(TxConfig) & TXCFG_EMPTY)) |
| 3992 | udelay(100); | 4014 | udelay(100); |
| 3993 | } else { | 4015 | } else { |
| @@ -5314,7 +5336,7 @@ static int rtl8169_rx_interrupt(struct net_device *dev, | |||
| 5314 | u32 status; | 5336 | u32 status; |
| 5315 | 5337 | ||
| 5316 | rmb(); | 5338 | rmb(); |
| 5317 | status = le32_to_cpu(desc->opts1); | 5339 | status = le32_to_cpu(desc->opts1) & tp->opts1_mask; |
| 5318 | 5340 | ||
| 5319 | if (status & DescOwn) | 5341 | if (status & DescOwn) |
| 5320 | break; | 5342 | break; |
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index dc3fbf61910b..4a1374df6084 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
| @@ -6234,12 +6234,10 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 6234 | } | 6234 | } |
| 6235 | } | 6235 | } |
| 6236 | 6236 | ||
| 6237 | #ifdef BCM_KERNEL_SUPPORTS_8021Q | ||
| 6238 | if (vlan_tx_tag_present(skb)) { | 6237 | if (vlan_tx_tag_present(skb)) { |
| 6239 | base_flags |= TXD_FLAG_VLAN; | 6238 | base_flags |= TXD_FLAG_VLAN; |
| 6240 | vlan = vlan_tx_tag_get(skb); | 6239 | vlan = vlan_tx_tag_get(skb); |
| 6241 | } | 6240 | } |
| 6242 | #endif | ||
| 6243 | 6241 | ||
| 6244 | if (tg3_flag(tp, USE_JUMBO_BDFLAG) && | 6242 | if (tg3_flag(tp, USE_JUMBO_BDFLAG) && |
| 6245 | !mss && skb->len > VLAN_ETH_FRAME_LEN) | 6243 | !mss && skb->len > VLAN_ETH_FRAME_LEN) |
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index 26f1ab840cc7..e293a7921bf0 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c | |||
| @@ -1632,7 +1632,8 @@ static void handle_irq_beacon(struct b43_wldev *dev) | |||
| 1632 | u32 cmd, beacon0_valid, beacon1_valid; | 1632 | u32 cmd, beacon0_valid, beacon1_valid; |
| 1633 | 1633 | ||
| 1634 | if (!b43_is_mode(wl, NL80211_IFTYPE_AP) && | 1634 | if (!b43_is_mode(wl, NL80211_IFTYPE_AP) && |
| 1635 | !b43_is_mode(wl, NL80211_IFTYPE_MESH_POINT)) | 1635 | !b43_is_mode(wl, NL80211_IFTYPE_MESH_POINT) && |
| 1636 | !b43_is_mode(wl, NL80211_IFTYPE_ADHOC)) | ||
| 1636 | return; | 1637 | return; |
| 1637 | 1638 | ||
| 1638 | /* This is the bottom half of the asynchronous beacon update. */ | 1639 | /* This is the bottom half of the asynchronous beacon update. */ |
diff --git a/drivers/net/wireless/ipw2x00/ipw2100.c b/drivers/net/wireless/ipw2x00/ipw2100.c index 3774dd034746..ef9ad79d1bfd 100644 --- a/drivers/net/wireless/ipw2x00/ipw2100.c +++ b/drivers/net/wireless/ipw2x00/ipw2100.c | |||
| @@ -1903,15 +1903,17 @@ static void ipw2100_down(struct ipw2100_priv *priv) | |||
| 1903 | static int ipw2100_net_init(struct net_device *dev) | 1903 | static int ipw2100_net_init(struct net_device *dev) |
| 1904 | { | 1904 | { |
| 1905 | struct ipw2100_priv *priv = libipw_priv(dev); | 1905 | struct ipw2100_priv *priv = libipw_priv(dev); |
| 1906 | |||
| 1907 | return ipw2100_up(priv, 1); | ||
| 1908 | } | ||
| 1909 | |||
| 1910 | static int ipw2100_wdev_init(struct net_device *dev) | ||
| 1911 | { | ||
| 1912 | struct ipw2100_priv *priv = libipw_priv(dev); | ||
| 1906 | const struct libipw_geo *geo = libipw_get_geo(priv->ieee); | 1913 | const struct libipw_geo *geo = libipw_get_geo(priv->ieee); |
| 1907 | struct wireless_dev *wdev = &priv->ieee->wdev; | 1914 | struct wireless_dev *wdev = &priv->ieee->wdev; |
| 1908 | int ret; | ||
| 1909 | int i; | 1915 | int i; |
| 1910 | 1916 | ||
| 1911 | ret = ipw2100_up(priv, 1); | ||
| 1912 | if (ret) | ||
| 1913 | return ret; | ||
| 1914 | |||
| 1915 | memcpy(wdev->wiphy->perm_addr, priv->mac_addr, ETH_ALEN); | 1917 | memcpy(wdev->wiphy->perm_addr, priv->mac_addr, ETH_ALEN); |
| 1916 | 1918 | ||
| 1917 | /* fill-out priv->ieee->bg_band */ | 1919 | /* fill-out priv->ieee->bg_band */ |
| @@ -6350,9 +6352,13 @@ static int ipw2100_pci_init_one(struct pci_dev *pci_dev, | |||
| 6350 | "Error calling register_netdev.\n"); | 6352 | "Error calling register_netdev.\n"); |
| 6351 | goto fail; | 6353 | goto fail; |
| 6352 | } | 6354 | } |
| 6355 | registered = 1; | ||
| 6356 | |||
| 6357 | err = ipw2100_wdev_init(dev); | ||
| 6358 | if (err) | ||
| 6359 | goto fail; | ||
| 6353 | 6360 | ||
| 6354 | mutex_lock(&priv->action_mutex); | 6361 | mutex_lock(&priv->action_mutex); |
| 6355 | registered = 1; | ||
| 6356 | 6362 | ||
| 6357 | IPW_DEBUG_INFO("%s: Bound to %s\n", dev->name, pci_name(pci_dev)); | 6363 | IPW_DEBUG_INFO("%s: Bound to %s\n", dev->name, pci_name(pci_dev)); |
| 6358 | 6364 | ||
| @@ -6389,7 +6395,8 @@ static int ipw2100_pci_init_one(struct pci_dev *pci_dev, | |||
| 6389 | 6395 | ||
| 6390 | fail_unlock: | 6396 | fail_unlock: |
| 6391 | mutex_unlock(&priv->action_mutex); | 6397 | mutex_unlock(&priv->action_mutex); |
| 6392 | 6398 | wiphy_unregister(priv->ieee->wdev.wiphy); | |
| 6399 | kfree(priv->ieee->bg_band.channels); | ||
| 6393 | fail: | 6400 | fail: |
| 6394 | if (dev) { | 6401 | if (dev) { |
| 6395 | if (registered) | 6402 | if (registered) |
diff --git a/drivers/net/wireless/ipw2x00/ipw2200.c b/drivers/net/wireless/ipw2x00/ipw2200.c index 87813c33bdc2..4ffebede5e03 100644 --- a/drivers/net/wireless/ipw2x00/ipw2200.c +++ b/drivers/net/wireless/ipw2x00/ipw2200.c | |||
| @@ -11425,16 +11425,23 @@ static void ipw_bg_down(struct work_struct *work) | |||
| 11425 | /* Called by register_netdev() */ | 11425 | /* Called by register_netdev() */ |
| 11426 | static int ipw_net_init(struct net_device *dev) | 11426 | static int ipw_net_init(struct net_device *dev) |
| 11427 | { | 11427 | { |
| 11428 | int rc = 0; | ||
| 11429 | struct ipw_priv *priv = libipw_priv(dev); | ||
| 11430 | |||
| 11431 | mutex_lock(&priv->mutex); | ||
| 11432 | if (ipw_up(priv)) | ||
| 11433 | rc = -EIO; | ||
| 11434 | mutex_unlock(&priv->mutex); | ||
| 11435 | |||
| 11436 | return rc; | ||
| 11437 | } | ||
| 11438 | |||
| 11439 | static int ipw_wdev_init(struct net_device *dev) | ||
| 11440 | { | ||
| 11428 | int i, rc = 0; | 11441 | int i, rc = 0; |
| 11429 | struct ipw_priv *priv = libipw_priv(dev); | 11442 | struct ipw_priv *priv = libipw_priv(dev); |
| 11430 | const struct libipw_geo *geo = libipw_get_geo(priv->ieee); | 11443 | const struct libipw_geo *geo = libipw_get_geo(priv->ieee); |
| 11431 | struct wireless_dev *wdev = &priv->ieee->wdev; | 11444 | struct wireless_dev *wdev = &priv->ieee->wdev; |
| 11432 | mutex_lock(&priv->mutex); | ||
| 11433 | |||
| 11434 | if (ipw_up(priv)) { | ||
| 11435 | rc = -EIO; | ||
| 11436 | goto out; | ||
| 11437 | } | ||
| 11438 | 11445 | ||
| 11439 | memcpy(wdev->wiphy->perm_addr, priv->mac_addr, ETH_ALEN); | 11446 | memcpy(wdev->wiphy->perm_addr, priv->mac_addr, ETH_ALEN); |
| 11440 | 11447 | ||
| @@ -11519,13 +11526,9 @@ static int ipw_net_init(struct net_device *dev) | |||
| 11519 | set_wiphy_dev(wdev->wiphy, &priv->pci_dev->dev); | 11526 | set_wiphy_dev(wdev->wiphy, &priv->pci_dev->dev); |
| 11520 | 11527 | ||
| 11521 | /* With that information in place, we can now register the wiphy... */ | 11528 | /* With that information in place, we can now register the wiphy... */ |
| 11522 | if (wiphy_register(wdev->wiphy)) { | 11529 | if (wiphy_register(wdev->wiphy)) |
| 11523 | rc = -EIO; | 11530 | rc = -EIO; |
| 11524 | goto out; | ||
| 11525 | } | ||
| 11526 | |||
| 11527 | out: | 11531 | out: |
| 11528 | mutex_unlock(&priv->mutex); | ||
| 11529 | return rc; | 11532 | return rc; |
| 11530 | } | 11533 | } |
| 11531 | 11534 | ||
| @@ -11832,14 +11835,22 @@ static int __devinit ipw_pci_probe(struct pci_dev *pdev, | |||
| 11832 | goto out_remove_sysfs; | 11835 | goto out_remove_sysfs; |
| 11833 | } | 11836 | } |
| 11834 | 11837 | ||
| 11838 | err = ipw_wdev_init(net_dev); | ||
| 11839 | if (err) { | ||
| 11840 | IPW_ERROR("failed to register wireless device\n"); | ||
| 11841 | goto out_unregister_netdev; | ||
| 11842 | } | ||
| 11843 | |||
| 11835 | #ifdef CONFIG_IPW2200_PROMISCUOUS | 11844 | #ifdef CONFIG_IPW2200_PROMISCUOUS |
| 11836 | if (rtap_iface) { | 11845 | if (rtap_iface) { |
| 11837 | err = ipw_prom_alloc(priv); | 11846 | err = ipw_prom_alloc(priv); |
| 11838 | if (err) { | 11847 | if (err) { |
| 11839 | IPW_ERROR("Failed to register promiscuous network " | 11848 | IPW_ERROR("Failed to register promiscuous network " |
| 11840 | "device (error %d).\n", err); | 11849 | "device (error %d).\n", err); |
| 11841 | unregister_netdev(priv->net_dev); | 11850 | wiphy_unregister(priv->ieee->wdev.wiphy); |
| 11842 | goto out_remove_sysfs; | 11851 | kfree(priv->ieee->a_band.channels); |
| 11852 | kfree(priv->ieee->bg_band.channels); | ||
| 11853 | goto out_unregister_netdev; | ||
| 11843 | } | 11854 | } |
| 11844 | } | 11855 | } |
| 11845 | #endif | 11856 | #endif |
| @@ -11851,6 +11862,8 @@ static int __devinit ipw_pci_probe(struct pci_dev *pdev, | |||
| 11851 | 11862 | ||
| 11852 | return 0; | 11863 | return 0; |
| 11853 | 11864 | ||
| 11865 | out_unregister_netdev: | ||
| 11866 | unregister_netdev(priv->net_dev); | ||
| 11854 | out_remove_sysfs: | 11867 | out_remove_sysfs: |
| 11855 | sysfs_remove_group(&pdev->dev.kobj, &ipw_attribute_group); | 11868 | sysfs_remove_group(&pdev->dev.kobj, &ipw_attribute_group); |
| 11856 | out_release_irq: | 11869 | out_release_irq: |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index b0ae4de7f083..f9c3cd95d614 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
| @@ -2140,7 +2140,12 @@ static int iwl_mac_setup_register(struct iwl_priv *priv, | |||
| 2140 | IEEE80211_HW_SPECTRUM_MGMT | | 2140 | IEEE80211_HW_SPECTRUM_MGMT | |
| 2141 | IEEE80211_HW_REPORTS_TX_ACK_STATUS; | 2141 | IEEE80211_HW_REPORTS_TX_ACK_STATUS; |
| 2142 | 2142 | ||
| 2143 | /* | ||
| 2144 | * Including the following line will crash some AP's. This | ||
| 2145 | * workaround removes the stimulus which causes the crash until | ||
| 2146 | * the AP software can be fixed. | ||
| 2143 | hw->max_tx_aggregation_subframes = LINK_QUAL_AGG_FRAME_LIMIT_DEF; | 2147 | hw->max_tx_aggregation_subframes = LINK_QUAL_AGG_FRAME_LIMIT_DEF; |
| 2148 | */ | ||
| 2144 | 2149 | ||
| 2145 | hw->flags |= IEEE80211_HW_SUPPORTS_PS | | 2150 | hw->flags |= IEEE80211_HW_SUPPORTS_PS | |
| 2146 | IEEE80211_HW_SUPPORTS_DYNAMIC_PS; | 2151 | IEEE80211_HW_SUPPORTS_DYNAMIC_PS; |
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c index ef67f6786a84..0019dfd8fb01 100644 --- a/drivers/net/wireless/rt2x00/rt2800lib.c +++ b/drivers/net/wireless/rt2x00/rt2800lib.c | |||
| @@ -3697,14 +3697,15 @@ static void rt2800_efuse_read(struct rt2x00_dev *rt2x00dev, unsigned int i) | |||
| 3697 | rt2800_regbusy_read(rt2x00dev, EFUSE_CTRL, EFUSE_CTRL_KICK, ®); | 3697 | rt2800_regbusy_read(rt2x00dev, EFUSE_CTRL, EFUSE_CTRL_KICK, ®); |
| 3698 | 3698 | ||
| 3699 | /* Apparently the data is read from end to start */ | 3699 | /* Apparently the data is read from end to start */ |
| 3700 | rt2800_register_read_lock(rt2x00dev, EFUSE_DATA3, | 3700 | rt2800_register_read_lock(rt2x00dev, EFUSE_DATA3, ®); |
| 3701 | (u32 *)&rt2x00dev->eeprom[i]); | 3701 | /* The returned value is in CPU order, but eeprom is le */ |
| 3702 | rt2800_register_read_lock(rt2x00dev, EFUSE_DATA2, | 3702 | rt2x00dev->eeprom[i] = cpu_to_le32(reg); |
| 3703 | (u32 *)&rt2x00dev->eeprom[i + 2]); | 3703 | rt2800_register_read_lock(rt2x00dev, EFUSE_DATA2, ®); |
| 3704 | rt2800_register_read_lock(rt2x00dev, EFUSE_DATA1, | 3704 | *(u32 *)&rt2x00dev->eeprom[i + 2] = cpu_to_le32(reg); |
| 3705 | (u32 *)&rt2x00dev->eeprom[i + 4]); | 3705 | rt2800_register_read_lock(rt2x00dev, EFUSE_DATA1, ®); |
| 3706 | rt2800_register_read_lock(rt2x00dev, EFUSE_DATA0, | 3706 | *(u32 *)&rt2x00dev->eeprom[i + 4] = cpu_to_le32(reg); |
| 3707 | (u32 *)&rt2x00dev->eeprom[i + 6]); | 3707 | rt2800_register_read_lock(rt2x00dev, EFUSE_DATA0, ®); |
| 3708 | *(u32 *)&rt2x00dev->eeprom[i + 6] = cpu_to_le32(reg); | ||
| 3708 | 3709 | ||
| 3709 | mutex_unlock(&rt2x00dev->csr_mutex); | 3710 | mutex_unlock(&rt2x00dev->csr_mutex); |
| 3710 | } | 3711 | } |
| @@ -3870,19 +3871,23 @@ int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev) | |||
| 3870 | return -ENODEV; | 3871 | return -ENODEV; |
| 3871 | } | 3872 | } |
| 3872 | 3873 | ||
| 3873 | if (!rt2x00_rf(rt2x00dev, RF2820) && | 3874 | switch (rt2x00dev->chip.rf) { |
| 3874 | !rt2x00_rf(rt2x00dev, RF2850) && | 3875 | case RF2820: |
| 3875 | !rt2x00_rf(rt2x00dev, RF2720) && | 3876 | case RF2850: |
| 3876 | !rt2x00_rf(rt2x00dev, RF2750) && | 3877 | case RF2720: |
| 3877 | !rt2x00_rf(rt2x00dev, RF3020) && | 3878 | case RF2750: |
| 3878 | !rt2x00_rf(rt2x00dev, RF2020) && | 3879 | case RF3020: |
| 3879 | !rt2x00_rf(rt2x00dev, RF3021) && | 3880 | case RF2020: |
| 3880 | !rt2x00_rf(rt2x00dev, RF3022) && | 3881 | case RF3021: |
| 3881 | !rt2x00_rf(rt2x00dev, RF3052) && | 3882 | case RF3022: |
| 3882 | !rt2x00_rf(rt2x00dev, RF3320) && | 3883 | case RF3052: |
| 3883 | !rt2x00_rf(rt2x00dev, RF5370) && | 3884 | case RF3320: |
| 3884 | !rt2x00_rf(rt2x00dev, RF5390)) { | 3885 | case RF5370: |
| 3885 | ERROR(rt2x00dev, "Invalid RF chipset detected.\n"); | 3886 | case RF5390: |
| 3887 | break; | ||
| 3888 | default: | ||
| 3889 | ERROR(rt2x00dev, "Invalid RF chipset 0x%x detected.\n", | ||
| 3890 | rt2x00dev->chip.rf); | ||
| 3886 | return -ENODEV; | 3891 | return -ENODEV; |
| 3887 | } | 3892 | } |
| 3888 | 3893 | ||
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index a40170e022e8..7ef4eb4435fb 100644 --- a/net/bluetooth/hci_event.c +++ b/net/bluetooth/hci_event.c | |||
| @@ -58,8 +58,8 @@ static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb) | |||
| 58 | if (status) | 58 | if (status) |
| 59 | return; | 59 | return; |
| 60 | 60 | ||
| 61 | if (test_bit(HCI_MGMT, &hdev->flags) && | 61 | if (test_and_clear_bit(HCI_INQUIRY, &hdev->flags) && |
| 62 | test_and_clear_bit(HCI_INQUIRY, &hdev->flags)) | 62 | test_bit(HCI_MGMT, &hdev->flags)) |
| 63 | mgmt_discovering(hdev->id, 0); | 63 | mgmt_discovering(hdev->id, 0); |
| 64 | 64 | ||
| 65 | hci_req_complete(hdev, HCI_OP_INQUIRY_CANCEL, status); | 65 | hci_req_complete(hdev, HCI_OP_INQUIRY_CANCEL, status); |
| @@ -76,8 +76,8 @@ static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb) | |||
| 76 | if (status) | 76 | if (status) |
| 77 | return; | 77 | return; |
| 78 | 78 | ||
| 79 | if (test_bit(HCI_MGMT, &hdev->flags) && | 79 | if (test_and_clear_bit(HCI_INQUIRY, &hdev->flags) && |
| 80 | test_and_clear_bit(HCI_INQUIRY, &hdev->flags)) | 80 | test_bit(HCI_MGMT, &hdev->flags)) |
| 81 | mgmt_discovering(hdev->id, 0); | 81 | mgmt_discovering(hdev->id, 0); |
| 82 | 82 | ||
| 83 | hci_conn_check_pending(hdev); | 83 | hci_conn_check_pending(hdev); |
| @@ -959,9 +959,8 @@ static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status) | |||
| 959 | return; | 959 | return; |
| 960 | } | 960 | } |
| 961 | 961 | ||
| 962 | if (test_bit(HCI_MGMT, &hdev->flags) && | 962 | if (!test_and_set_bit(HCI_INQUIRY, &hdev->flags) && |
| 963 | !test_and_set_bit(HCI_INQUIRY, | 963 | test_bit(HCI_MGMT, &hdev->flags)) |
| 964 | &hdev->flags)) | ||
| 965 | mgmt_discovering(hdev->id, 1); | 964 | mgmt_discovering(hdev->id, 1); |
| 966 | } | 965 | } |
| 967 | 966 | ||
| @@ -1340,8 +1339,8 @@ static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff | |||
| 1340 | 1339 | ||
| 1341 | BT_DBG("%s status %d", hdev->name, status); | 1340 | BT_DBG("%s status %d", hdev->name, status); |
| 1342 | 1341 | ||
| 1343 | if (test_bit(HCI_MGMT, &hdev->flags) && | 1342 | if (test_and_clear_bit(HCI_INQUIRY, &hdev->flags) && |
| 1344 | test_and_clear_bit(HCI_INQUIRY, &hdev->flags)) | 1343 | test_bit(HCI_MGMT, &hdev->flags)) |
| 1345 | mgmt_discovering(hdev->id, 0); | 1344 | mgmt_discovering(hdev->id, 0); |
| 1346 | 1345 | ||
| 1347 | hci_req_complete(hdev, HCI_OP_INQUIRY, status); | 1346 | hci_req_complete(hdev, HCI_OP_INQUIRY, status); |
diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c index e7ab0c0285b5..3231b468bb72 100644 --- a/net/core/fib_rules.c +++ b/net/core/fib_rules.c | |||
| @@ -384,8 +384,8 @@ static int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg) | |||
| 384 | */ | 384 | */ |
| 385 | list_for_each_entry(r, &ops->rules_list, list) { | 385 | list_for_each_entry(r, &ops->rules_list, list) { |
| 386 | if (r->action == FR_ACT_GOTO && | 386 | if (r->action == FR_ACT_GOTO && |
| 387 | r->target == rule->pref) { | 387 | r->target == rule->pref && |
| 388 | BUG_ON(rtnl_dereference(r->ctarget) != NULL); | 388 | rtnl_dereference(r->ctarget) == NULL) { |
| 389 | rcu_assign_pointer(r->ctarget, rule); | 389 | rcu_assign_pointer(r->ctarget, rule); |
| 390 | if (--ops->unresolved_rules == 0) | 390 | if (--ops->unresolved_rules == 0) |
| 391 | break; | 391 | break; |
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index f012ebd87b43..12368c586068 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
| @@ -374,8 +374,8 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev) | |||
| 374 | "%s(): cannot allocate memory for statistics; dev=%s.\n", | 374 | "%s(): cannot allocate memory for statistics; dev=%s.\n", |
| 375 | __func__, dev->name)); | 375 | __func__, dev->name)); |
| 376 | neigh_parms_release(&nd_tbl, ndev->nd_parms); | 376 | neigh_parms_release(&nd_tbl, ndev->nd_parms); |
| 377 | ndev->dead = 1; | 377 | dev_put(dev); |
| 378 | in6_dev_finish_destroy(ndev); | 378 | kfree(ndev); |
| 379 | return NULL; | 379 | return NULL; |
| 380 | } | 380 | } |
| 381 | 381 | ||
diff --git a/net/wireless/reg.c b/net/wireless/reg.c index 02751dbc5a97..68a471ba193f 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c | |||
| @@ -852,6 +852,7 @@ static void handle_channel(struct wiphy *wiphy, | |||
| 852 | return; | 852 | return; |
| 853 | } | 853 | } |
| 854 | 854 | ||
| 855 | chan->beacon_found = false; | ||
| 855 | chan->flags = flags | bw_flags | map_regdom_flags(reg_rule->flags); | 856 | chan->flags = flags | bw_flags | map_regdom_flags(reg_rule->flags); |
| 856 | chan->max_antenna_gain = min(chan->orig_mag, | 857 | chan->max_antenna_gain = min(chan->orig_mag, |
| 857 | (int) MBI_TO_DBI(power_rule->max_antenna_gain)); | 858 | (int) MBI_TO_DBI(power_rule->max_antenna_gain)); |
diff --git a/net/wireless/sme.c b/net/wireless/sme.c index b7b6ff8be553..dec0fa28372e 100644 --- a/net/wireless/sme.c +++ b/net/wireless/sme.c | |||
| @@ -118,6 +118,8 @@ static int cfg80211_conn_scan(struct wireless_dev *wdev) | |||
| 118 | i++, j++) | 118 | i++, j++) |
| 119 | request->channels[i] = | 119 | request->channels[i] = |
| 120 | &wdev->wiphy->bands[band]->channels[j]; | 120 | &wdev->wiphy->bands[band]->channels[j]; |
| 121 | request->rates[band] = | ||
| 122 | (1 << wdev->wiphy->bands[band]->n_bitrates) - 1; | ||
| 121 | } | 123 | } |
| 122 | } | 124 | } |
| 123 | request->n_channels = n_channels; | 125 | request->n_channels = n_channels; |
diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c index a026b0ef2443..54a0dc2e2f8d 100644 --- a/net/xfrm/xfrm_input.c +++ b/net/xfrm/xfrm_input.c | |||
| @@ -212,6 +212,11 @@ resume: | |||
| 212 | /* only the first xfrm gets the encap type */ | 212 | /* only the first xfrm gets the encap type */ |
| 213 | encap_type = 0; | 213 | encap_type = 0; |
| 214 | 214 | ||
| 215 | if (async && x->repl->check(x, skb, seq)) { | ||
| 216 | XFRM_INC_STATS(net, LINUX_MIB_XFRMINSTATESEQERROR); | ||
| 217 | goto drop_unlock; | ||
| 218 | } | ||
| 219 | |||
| 215 | x->repl->advance(x, seq); | 220 | x->repl->advance(x, seq); |
| 216 | 221 | ||
| 217 | x->curlft.bytes += skb->len; | 222 | x->curlft.bytes += skb->len; |
