diff options
author | David S. Miller <davem@davemloft.net> | 2012-03-01 17:57:40 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-03-01 17:57:40 -0500 |
commit | b4017c5368f992fb8fb3a2545a0977082c6664e4 (patch) | |
tree | b18fee77164297141c988965a9846225f8d8b3d3 | |
parent | 97767a87f3be8834192dc3fc9412aaccf708d87f (diff) | |
parent | 413708bbaf5c85c4c8a264145f7d6c3afcd97f99 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
drivers/net/ethernet/broadcom/tg3.c
Conflicts in the statistics regression bug fix from 'net',
but happily Matt Carlson originally posted the fix against
'net-next' so I used that to resolve this.
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/broadcom/tg3.c | 43 | ||||
-rw-r--r-- | drivers/net/ethernet/cisco/enic/enic.h | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/cisco/enic/enic_main.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c | 15 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar5008_phy.c | 25 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9002_hw.c | 19 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmsmac/ampdu.c | 12 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-sta.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00dev.c | 3 | ||||
-rw-r--r-- | include/linux/tcp.h | 3 | ||||
-rw-r--r-- | include/net/tcp.h | 5 | ||||
-rw-r--r-- | net/bridge/netfilter/ebtables.c | 10 | ||||
-rw-r--r-- | net/ipv4/tcp_input.c | 18 | ||||
-rw-r--r-- | net/mac80211/iface.c | 3 | ||||
-rw-r--r-- | net/mac80211/rate.c | 2 |
16 files changed, 88 insertions, 85 deletions
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index 97dcccdb9eb2..76f33d5c7272 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c | |||
@@ -8001,10 +8001,8 @@ static int tg3_chip_reset(struct tg3 *tp) | |||
8001 | return 0; | 8001 | return 0; |
8002 | } | 8002 | } |
8003 | 8003 | ||
8004 | static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *, | 8004 | static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *); |
8005 | struct rtnl_link_stats64 *); | 8005 | static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *); |
8006 | static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *, | ||
8007 | struct tg3_ethtool_stats *); | ||
8008 | 8006 | ||
8009 | /* tp->lock is held. */ | 8007 | /* tp->lock is held. */ |
8010 | static int tg3_halt(struct tg3 *tp, int kind, int silent) | 8008 | static int tg3_halt(struct tg3 *tp, int kind, int silent) |
@@ -8025,7 +8023,7 @@ static int tg3_halt(struct tg3 *tp, int kind, int silent) | |||
8025 | 8023 | ||
8026 | if (tp->hw_stats) { | 8024 | if (tp->hw_stats) { |
8027 | /* Save the stats across chip resets... */ | 8025 | /* Save the stats across chip resets... */ |
8028 | tg3_get_stats64(tp->dev, &tp->net_stats_prev), | 8026 | tg3_get_nstats(tp, &tp->net_stats_prev); |
8029 | tg3_get_estats(tp, &tp->estats_prev); | 8027 | tg3_get_estats(tp, &tp->estats_prev); |
8030 | 8028 | ||
8031 | /* And make sure the next sample is new data */ | 8029 | /* And make sure the next sample is new data */ |
@@ -10125,7 +10123,7 @@ static inline u64 get_stat64(tg3_stat64_t *val) | |||
10125 | return ((u64)val->high << 32) | ((u64)val->low); | 10123 | return ((u64)val->high << 32) | ((u64)val->low); |
10126 | } | 10124 | } |
10127 | 10125 | ||
10128 | static u64 calc_crc_errors(struct tg3 *tp) | 10126 | static u64 tg3_calc_crc_errors(struct tg3 *tp) |
10129 | { | 10127 | { |
10130 | struct tg3_hw_stats *hw_stats = tp->hw_stats; | 10128 | struct tg3_hw_stats *hw_stats = tp->hw_stats; |
10131 | 10129 | ||
@@ -10134,14 +10132,12 @@ static u64 calc_crc_errors(struct tg3 *tp) | |||
10134 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) { | 10132 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) { |
10135 | u32 val; | 10133 | u32 val; |
10136 | 10134 | ||
10137 | spin_lock_bh(&tp->lock); | ||
10138 | if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) { | 10135 | if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) { |
10139 | tg3_writephy(tp, MII_TG3_TEST1, | 10136 | tg3_writephy(tp, MII_TG3_TEST1, |
10140 | val | MII_TG3_TEST1_CRC_EN); | 10137 | val | MII_TG3_TEST1_CRC_EN); |
10141 | tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val); | 10138 | tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val); |
10142 | } else | 10139 | } else |
10143 | val = 0; | 10140 | val = 0; |
10144 | spin_unlock_bh(&tp->lock); | ||
10145 | 10141 | ||
10146 | tp->phy_crc_errors += val; | 10142 | tp->phy_crc_errors += val; |
10147 | 10143 | ||
@@ -10155,8 +10151,7 @@ static u64 calc_crc_errors(struct tg3 *tp) | |||
10155 | estats->member = old_estats->member + \ | 10151 | estats->member = old_estats->member + \ |
10156 | get_stat64(&hw_stats->member) | 10152 | get_stat64(&hw_stats->member) |
10157 | 10153 | ||
10158 | static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *tp, | 10154 | static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats) |
10159 | struct tg3_ethtool_stats *estats) | ||
10160 | { | 10155 | { |
10161 | struct tg3_ethtool_stats *old_estats = &tp->estats_prev; | 10156 | struct tg3_ethtool_stats *old_estats = &tp->estats_prev; |
10162 | struct tg3_hw_stats *hw_stats = tp->hw_stats; | 10157 | struct tg3_hw_stats *hw_stats = tp->hw_stats; |
@@ -10238,20 +10233,13 @@ static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *tp, | |||
10238 | ESTAT_ADD(nic_tx_threshold_hit); | 10233 | ESTAT_ADD(nic_tx_threshold_hit); |
10239 | 10234 | ||
10240 | ESTAT_ADD(mbuf_lwm_thresh_hit); | 10235 | ESTAT_ADD(mbuf_lwm_thresh_hit); |
10241 | |||
10242 | return estats; | ||
10243 | } | 10236 | } |
10244 | 10237 | ||
10245 | static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev, | 10238 | static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats) |
10246 | struct rtnl_link_stats64 *stats) | ||
10247 | { | 10239 | { |
10248 | struct tg3 *tp = netdev_priv(dev); | ||
10249 | struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev; | 10240 | struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev; |
10250 | struct tg3_hw_stats *hw_stats = tp->hw_stats; | 10241 | struct tg3_hw_stats *hw_stats = tp->hw_stats; |
10251 | 10242 | ||
10252 | if (!hw_stats) | ||
10253 | return old_stats; | ||
10254 | |||
10255 | stats->rx_packets = old_stats->rx_packets + | 10243 | stats->rx_packets = old_stats->rx_packets + |
10256 | get_stat64(&hw_stats->rx_ucast_packets) + | 10244 | get_stat64(&hw_stats->rx_ucast_packets) + |
10257 | get_stat64(&hw_stats->rx_mcast_packets) + | 10245 | get_stat64(&hw_stats->rx_mcast_packets) + |
@@ -10294,15 +10282,13 @@ static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev, | |||
10294 | get_stat64(&hw_stats->tx_carrier_sense_errors); | 10282 | get_stat64(&hw_stats->tx_carrier_sense_errors); |
10295 | 10283 | ||
10296 | stats->rx_crc_errors = old_stats->rx_crc_errors + | 10284 | stats->rx_crc_errors = old_stats->rx_crc_errors + |
10297 | calc_crc_errors(tp); | 10285 | tg3_calc_crc_errors(tp); |
10298 | 10286 | ||
10299 | stats->rx_missed_errors = old_stats->rx_missed_errors + | 10287 | stats->rx_missed_errors = old_stats->rx_missed_errors + |
10300 | get_stat64(&hw_stats->rx_discards); | 10288 | get_stat64(&hw_stats->rx_discards); |
10301 | 10289 | ||
10302 | stats->rx_dropped = tp->rx_dropped; | 10290 | stats->rx_dropped = tp->rx_dropped; |
10303 | stats->tx_dropped = tp->tx_dropped; | 10291 | stats->tx_dropped = tp->tx_dropped; |
10304 | |||
10305 | return stats; | ||
10306 | } | 10292 | } |
10307 | 10293 | ||
10308 | static int tg3_get_regs_len(struct net_device *dev) | 10294 | static int tg3_get_regs_len(struct net_device *dev) |
@@ -12213,6 +12199,21 @@ static const struct ethtool_ops tg3_ethtool_ops = { | |||
12213 | .set_rxfh_indir = tg3_set_rxfh_indir, | 12199 | .set_rxfh_indir = tg3_set_rxfh_indir, |
12214 | }; | 12200 | }; |
12215 | 12201 | ||
12202 | static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev, | ||
12203 | struct rtnl_link_stats64 *stats) | ||
12204 | { | ||
12205 | struct tg3 *tp = netdev_priv(dev); | ||
12206 | |||
12207 | if (!tp->hw_stats) | ||
12208 | return &tp->net_stats_prev; | ||
12209 | |||
12210 | spin_lock_bh(&tp->lock); | ||
12211 | tg3_get_nstats(tp, stats); | ||
12212 | spin_unlock_bh(&tp->lock); | ||
12213 | |||
12214 | return stats; | ||
12215 | } | ||
12216 | |||
12216 | static void tg3_set_rx_mode(struct net_device *dev) | 12217 | static void tg3_set_rx_mode(struct net_device *dev) |
12217 | { | 12218 | { |
12218 | struct tg3 *tp = netdev_priv(dev); | 12219 | struct tg3 *tp = netdev_priv(dev); |
diff --git a/drivers/net/ethernet/cisco/enic/enic.h b/drivers/net/ethernet/cisco/enic/enic.h index 99998c606d3e..cf1fb4b9a4ad 100644 --- a/drivers/net/ethernet/cisco/enic/enic.h +++ b/drivers/net/ethernet/cisco/enic/enic.h | |||
@@ -94,7 +94,7 @@ struct enic { | |||
94 | u32 rx_coalesce_usecs; | 94 | u32 rx_coalesce_usecs; |
95 | u32 tx_coalesce_usecs; | 95 | u32 tx_coalesce_usecs; |
96 | #ifdef CONFIG_PCI_IOV | 96 | #ifdef CONFIG_PCI_IOV |
97 | u32 num_vfs; | 97 | u16 num_vfs; |
98 | #endif | 98 | #endif |
99 | struct enic_port_profile *pp; | 99 | struct enic_port_profile *pp; |
100 | 100 | ||
diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c index e27ec1d3778d..9080ed651666 100644 --- a/drivers/net/ethernet/cisco/enic/enic_main.c +++ b/drivers/net/ethernet/cisco/enic/enic_main.c | |||
@@ -2390,7 +2390,7 @@ static int __devinit enic_probe(struct pci_dev *pdev, | |||
2390 | pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_SRIOV); | 2390 | pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_SRIOV); |
2391 | if (pos) { | 2391 | if (pos) { |
2392 | pci_read_config_word(pdev, pos + PCI_SRIOV_TOTAL_VF, | 2392 | pci_read_config_word(pdev, pos + PCI_SRIOV_TOTAL_VF, |
2393 | (u16 *)&enic->num_vfs); | 2393 | &enic->num_vfs); |
2394 | if (enic->num_vfs) { | 2394 | if (enic->num_vfs) { |
2395 | err = pci_enable_sriov(pdev, enic->num_vfs); | 2395 | err = pci_enable_sriov(pdev, enic->num_vfs); |
2396 | if (err) { | 2396 | if (err) { |
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c index 9cb5f912e489..29e23bec809c 100644 --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c | |||
@@ -321,10 +321,10 @@ static void pch_gbe_check_copper_options(struct pch_gbe_adapter *adapter) | |||
321 | pr_debug("AutoNeg specified along with Speed or Duplex, AutoNeg parameter ignored\n"); | 321 | pr_debug("AutoNeg specified along with Speed or Duplex, AutoNeg parameter ignored\n"); |
322 | hw->phy.autoneg_advertised = opt.def; | 322 | hw->phy.autoneg_advertised = opt.def; |
323 | } else { | 323 | } else { |
324 | hw->phy.autoneg_advertised = AutoNeg; | 324 | int tmp = AutoNeg; |
325 | pch_gbe_validate_option( | 325 | |
326 | (int *)(&hw->phy.autoneg_advertised), | 326 | pch_gbe_validate_option(&tmp, &opt, adapter); |
327 | &opt, adapter); | 327 | hw->phy.autoneg_advertised = tmp; |
328 | } | 328 | } |
329 | } | 329 | } |
330 | 330 | ||
@@ -495,9 +495,10 @@ void pch_gbe_check_options(struct pch_gbe_adapter *adapter) | |||
495 | .arg = { .l = { .nr = (int)ARRAY_SIZE(fc_list), | 495 | .arg = { .l = { .nr = (int)ARRAY_SIZE(fc_list), |
496 | .p = fc_list } } | 496 | .p = fc_list } } |
497 | }; | 497 | }; |
498 | hw->mac.fc = FlowControl; | 498 | int tmp = FlowControl; |
499 | pch_gbe_validate_option((int *)(&hw->mac.fc), | 499 | |
500 | &opt, adapter); | 500 | pch_gbe_validate_option(&tmp, &opt, adapter); |
501 | hw->mac.fc = tmp; | ||
501 | } | 502 | } |
502 | 503 | ||
503 | pch_gbe_check_copper_options(adapter); | 504 | pch_gbe_check_copper_options(adapter); |
diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c index f901a17f76ba..86a891f93fc9 100644 --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c | |||
@@ -489,8 +489,6 @@ static int ar5008_hw_rf_alloc_ext_banks(struct ath_hw *ah) | |||
489 | ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows); | 489 | ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows); |
490 | ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows); | 490 | ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows); |
491 | ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows); | 491 | ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows); |
492 | ATH_ALLOC_BANK(ah->addac5416_21, | ||
493 | ah->iniAddac.ia_rows * ah->iniAddac.ia_columns); | ||
494 | ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows); | 492 | ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows); |
495 | 493 | ||
496 | return 0; | 494 | return 0; |
@@ -519,7 +517,6 @@ static void ar5008_hw_rf_free_ext_banks(struct ath_hw *ah) | |||
519 | ATH_FREE_BANK(ah->analogBank6Data); | 517 | ATH_FREE_BANK(ah->analogBank6Data); |
520 | ATH_FREE_BANK(ah->analogBank6TPCData); | 518 | ATH_FREE_BANK(ah->analogBank6TPCData); |
521 | ATH_FREE_BANK(ah->analogBank7Data); | 519 | ATH_FREE_BANK(ah->analogBank7Data); |
522 | ATH_FREE_BANK(ah->addac5416_21); | ||
523 | ATH_FREE_BANK(ah->bank6Temp); | 520 | ATH_FREE_BANK(ah->bank6Temp); |
524 | 521 | ||
525 | #undef ATH_FREE_BANK | 522 | #undef ATH_FREE_BANK |
@@ -805,27 +802,7 @@ static int ar5008_hw_process_ini(struct ath_hw *ah, | |||
805 | if (ah->eep_ops->set_addac) | 802 | if (ah->eep_ops->set_addac) |
806 | ah->eep_ops->set_addac(ah, chan); | 803 | ah->eep_ops->set_addac(ah, chan); |
807 | 804 | ||
808 | if (AR_SREV_5416_22_OR_LATER(ah)) { | 805 | REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites); |
809 | REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites); | ||
810 | } else { | ||
811 | struct ar5416IniArray temp; | ||
812 | u32 addacSize = | ||
813 | sizeof(u32) * ah->iniAddac.ia_rows * | ||
814 | ah->iniAddac.ia_columns; | ||
815 | |||
816 | /* For AR5416 2.0/2.1 */ | ||
817 | memcpy(ah->addac5416_21, | ||
818 | ah->iniAddac.ia_array, addacSize); | ||
819 | |||
820 | /* override CLKDRV value at [row, column] = [31, 1] */ | ||
821 | (ah->addac5416_21)[31 * ah->iniAddac.ia_columns + 1] = 0; | ||
822 | |||
823 | temp.ia_array = ah->addac5416_21; | ||
824 | temp.ia_columns = ah->iniAddac.ia_columns; | ||
825 | temp.ia_rows = ah->iniAddac.ia_rows; | ||
826 | REG_WRITE_ARRAY(&temp, 1, regWrites); | ||
827 | } | ||
828 | |||
829 | REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC); | 806 | REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC); |
830 | 807 | ||
831 | ENABLE_REGWRITE_BUFFER(ah); | 808 | ENABLE_REGWRITE_BUFFER(ah); |
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_hw.c b/drivers/net/wireless/ath/ath9k/ar9002_hw.c index 11f192a1ceb7..d190411ac8f5 100644 --- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c +++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c | |||
@@ -180,6 +180,25 @@ static void ar9002_hw_init_mode_regs(struct ath_hw *ah) | |||
180 | INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac, | 180 | INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac, |
181 | ARRAY_SIZE(ar5416Addac), 2); | 181 | ARRAY_SIZE(ar5416Addac), 2); |
182 | } | 182 | } |
183 | |||
184 | /* iniAddac needs to be modified for these chips */ | ||
185 | if (AR_SREV_9160(ah) || !AR_SREV_5416_22_OR_LATER(ah)) { | ||
186 | struct ar5416IniArray *addac = &ah->iniAddac; | ||
187 | u32 size = sizeof(u32) * addac->ia_rows * addac->ia_columns; | ||
188 | u32 *data; | ||
189 | |||
190 | data = kmalloc(size, GFP_KERNEL); | ||
191 | if (!data) | ||
192 | return; | ||
193 | |||
194 | memcpy(data, addac->ia_array, size); | ||
195 | addac->ia_array = data; | ||
196 | |||
197 | if (!AR_SREV_5416_22_OR_LATER(ah)) { | ||
198 | /* override CLKDRV value */ | ||
199 | INI_RA(addac, 31,1) = 0; | ||
200 | } | ||
201 | } | ||
183 | } | 202 | } |
184 | 203 | ||
185 | /* Support for Japan ch.14 (2484) spread */ | 204 | /* Support for Japan ch.14 (2484) spread */ |
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h index 6a29004a71b0..c8261d4fc780 100644 --- a/drivers/net/wireless/ath/ath9k/hw.h +++ b/drivers/net/wireless/ath/ath9k/hw.h | |||
@@ -940,7 +940,6 @@ struct ath_hw { | |||
940 | u32 *analogBank6Data; | 940 | u32 *analogBank6Data; |
941 | u32 *analogBank6TPCData; | 941 | u32 *analogBank6TPCData; |
942 | u32 *analogBank7Data; | 942 | u32 *analogBank7Data; |
943 | u32 *addac5416_21; | ||
944 | u32 *bank6Temp; | 943 | u32 *bank6Temp; |
945 | 944 | ||
946 | u8 txpower_limit; | 945 | u8 txpower_limit; |
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c b/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c index d89dcb14cb6d..dbee69620a90 100644 --- a/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c +++ b/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c | |||
@@ -1051,17 +1051,13 @@ brcms_c_ampdu_dotxstatus_complete(struct ampdu_info *ampdu, struct scb *scb, | |||
1051 | } | 1051 | } |
1052 | /* either retransmit or send bar if ack not recd */ | 1052 | /* either retransmit or send bar if ack not recd */ |
1053 | if (!ack_recd) { | 1053 | if (!ack_recd) { |
1054 | struct ieee80211_tx_rate *txrate = | 1054 | if (retry && (ini->txretry[index] < (int)retry_limit)) { |
1055 | tx_info->status.rates; | ||
1056 | if (retry && (txrate[0].count < (int)retry_limit)) { | ||
1057 | ini->txretry[index]++; | 1055 | ini->txretry[index]++; |
1058 | ini->tx_in_transit--; | 1056 | ini->tx_in_transit--; |
1059 | /* | 1057 | /* |
1060 | * Use high prededence for retransmit to | 1058 | * Use high prededence for retransmit to |
1061 | * give some punch | 1059 | * give some punch |
1062 | */ | 1060 | */ |
1063 | /* brcms_c_txq_enq(wlc, scb, p, | ||
1064 | * BRCMS_PRIO_TO_PREC(tid)); */ | ||
1065 | brcms_c_txq_enq(wlc, scb, p, | 1061 | brcms_c_txq_enq(wlc, scb, p, |
1066 | BRCMS_PRIO_TO_HI_PREC(tid)); | 1062 | BRCMS_PRIO_TO_HI_PREC(tid)); |
1067 | } else { | 1063 | } else { |
@@ -1074,9 +1070,9 @@ brcms_c_ampdu_dotxstatus_complete(struct ampdu_info *ampdu, struct scb *scb, | |||
1074 | IEEE80211_TX_STAT_AMPDU_NO_BACK; | 1070 | IEEE80211_TX_STAT_AMPDU_NO_BACK; |
1075 | skb_pull(p, D11_PHY_HDR_LEN); | 1071 | skb_pull(p, D11_PHY_HDR_LEN); |
1076 | skb_pull(p, D11_TXH_LEN); | 1072 | skb_pull(p, D11_TXH_LEN); |
1077 | wiphy_err(wiphy, "%s: BA Timeout, seq %d, in_" | 1073 | BCMMSG(wiphy, |
1078 | "transit %d\n", "AMPDU status", seq, | 1074 | "BA Timeout, seq %d, in_transit %d\n", |
1079 | ini->tx_in_transit); | 1075 | seq, ini->tx_in_transit); |
1080 | ieee80211_tx_status_irqsafe(wlc->pub->ieee_hw, | 1076 | ieee80211_tx_status_irqsafe(wlc->pub->ieee_hw, |
1081 | p); | 1077 | p); |
1082 | } | 1078 | } |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c index d6aab00272b9..f1298cd6a19a 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c | |||
@@ -1190,6 +1190,7 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv, | |||
1190 | unsigned long flags; | 1190 | unsigned long flags; |
1191 | struct iwl_addsta_cmd sta_cmd; | 1191 | struct iwl_addsta_cmd sta_cmd; |
1192 | u8 sta_id = iwlagn_key_sta_id(priv, ctx->vif, sta); | 1192 | u8 sta_id = iwlagn_key_sta_id(priv, ctx->vif, sta); |
1193 | __le16 key_flags; | ||
1193 | 1194 | ||
1194 | /* if station isn't there, neither is the key */ | 1195 | /* if station isn't there, neither is the key */ |
1195 | if (sta_id == IWL_INVALID_STATION) | 1196 | if (sta_id == IWL_INVALID_STATION) |
@@ -1215,7 +1216,14 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv, | |||
1215 | IWL_ERR(priv, "offset %d not used in uCode key table.\n", | 1216 | IWL_ERR(priv, "offset %d not used in uCode key table.\n", |
1216 | keyconf->hw_key_idx); | 1217 | keyconf->hw_key_idx); |
1217 | 1218 | ||
1218 | sta_cmd.key.key_flags = STA_KEY_FLG_NO_ENC | STA_KEY_FLG_INVALID; | 1219 | key_flags = cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS); |
1220 | key_flags |= STA_KEY_FLG_MAP_KEY_MSK | STA_KEY_FLG_NO_ENC | | ||
1221 | STA_KEY_FLG_INVALID; | ||
1222 | |||
1223 | if (!(keyconf->flags & IEEE80211_KEY_FLAG_PAIRWISE)) | ||
1224 | key_flags |= STA_KEY_MULTICAST_MSK; | ||
1225 | |||
1226 | sta_cmd.key.key_flags = key_flags; | ||
1219 | sta_cmd.key.key_offset = WEP_INVALID_OFFSET; | 1227 | sta_cmd.key.key_offset = WEP_INVALID_OFFSET; |
1220 | sta_cmd.sta.modify_mask = STA_MODIFY_KEY_MASK; | 1228 | sta_cmd.sta.modify_mask = STA_MODIFY_KEY_MASK; |
1221 | sta_cmd.mode = STA_CONTROL_MODIFY_MSK; | 1229 | sta_cmd.mode = STA_CONTROL_MODIFY_MSK; |
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c index bae5b01299ea..d62e64fe0b92 100644 --- a/drivers/net/wireless/rt2x00/rt2x00dev.c +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c | |||
@@ -1232,7 +1232,8 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev) | |||
1232 | cancel_work_sync(&rt2x00dev->rxdone_work); | 1232 | cancel_work_sync(&rt2x00dev->rxdone_work); |
1233 | cancel_work_sync(&rt2x00dev->txdone_work); | 1233 | cancel_work_sync(&rt2x00dev->txdone_work); |
1234 | } | 1234 | } |
1235 | destroy_workqueue(rt2x00dev->workqueue); | 1235 | if (rt2x00dev->workqueue) |
1236 | destroy_workqueue(rt2x00dev->workqueue); | ||
1236 | 1237 | ||
1237 | /* | 1238 | /* |
1238 | * Free the tx status fifo. | 1239 | * Free the tx status fifo. |
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 115389e9b945..b6c62d294380 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
@@ -412,7 +412,8 @@ struct tcp_sock { | |||
412 | 412 | ||
413 | struct tcp_sack_block recv_sack_cache[4]; | 413 | struct tcp_sack_block recv_sack_cache[4]; |
414 | 414 | ||
415 | struct sk_buff *highest_sack; /* highest skb with SACK received | 415 | struct sk_buff *highest_sack; /* skb just after the highest |
416 | * skb with SACKed bit set | ||
416 | * (validity guaranteed only if | 417 | * (validity guaranteed only if |
417 | * sacked_out > 0) | 418 | * sacked_out > 0) |
418 | */ | 419 | */ |
diff --git a/include/net/tcp.h b/include/net/tcp.h index 6b2acfce4cfd..8607e6aad42b 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h | |||
@@ -1362,8 +1362,9 @@ static inline void tcp_push_pending_frames(struct sock *sk) | |||
1362 | } | 1362 | } |
1363 | } | 1363 | } |
1364 | 1364 | ||
1365 | /* Start sequence of the highest skb with SACKed bit, valid only if | 1365 | /* Start sequence of the skb just after the highest skb with SACKed |
1366 | * sacked > 0 or when the caller has ensured validity by itself. | 1366 | * bit, valid only if sacked_out > 0 or when the caller has ensured |
1367 | * validity by itself. | ||
1367 | */ | 1368 | */ |
1368 | static inline u32 tcp_highest_sack_seq(struct tcp_sock *tp) | 1369 | static inline u32 tcp_highest_sack_seq(struct tcp_sock *tp) |
1369 | { | 1370 | { |
diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c index 5864cc491369..8aa4ad0e06af 100644 --- a/net/bridge/netfilter/ebtables.c +++ b/net/bridge/netfilter/ebtables.c | |||
@@ -1893,10 +1893,7 @@ static int compat_mtw_from_user(struct compat_ebt_entry_mwt *mwt, | |||
1893 | 1893 | ||
1894 | switch (compat_mwt) { | 1894 | switch (compat_mwt) { |
1895 | case EBT_COMPAT_MATCH: | 1895 | case EBT_COMPAT_MATCH: |
1896 | match = try_then_request_module(xt_find_match(NFPROTO_BRIDGE, | 1896 | match = xt_request_find_match(NFPROTO_BRIDGE, name, 0); |
1897 | name, 0), "ebt_%s", name); | ||
1898 | if (match == NULL) | ||
1899 | return -ENOENT; | ||
1900 | if (IS_ERR(match)) | 1897 | if (IS_ERR(match)) |
1901 | return PTR_ERR(match); | 1898 | return PTR_ERR(match); |
1902 | 1899 | ||
@@ -1915,10 +1912,7 @@ static int compat_mtw_from_user(struct compat_ebt_entry_mwt *mwt, | |||
1915 | break; | 1912 | break; |
1916 | case EBT_COMPAT_WATCHER: /* fallthrough */ | 1913 | case EBT_COMPAT_WATCHER: /* fallthrough */ |
1917 | case EBT_COMPAT_TARGET: | 1914 | case EBT_COMPAT_TARGET: |
1918 | wt = try_then_request_module(xt_find_target(NFPROTO_BRIDGE, | 1915 | wt = xt_request_find_target(NFPROTO_BRIDGE, name, 0); |
1919 | name, 0), "ebt_%s", name); | ||
1920 | if (wt == NULL) | ||
1921 | return -ENOENT; | ||
1922 | if (IS_ERR(wt)) | 1916 | if (IS_ERR(wt)) |
1923 | return PTR_ERR(wt); | 1917 | return PTR_ERR(wt); |
1924 | off = xt_compat_target_offset(wt); | 1918 | off = xt_compat_target_offset(wt); |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 53c8ce4046b2..ee42d42b2f45 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -1403,8 +1403,16 @@ static int tcp_shifted_skb(struct sock *sk, struct sk_buff *skb, | |||
1403 | 1403 | ||
1404 | BUG_ON(!pcount); | 1404 | BUG_ON(!pcount); |
1405 | 1405 | ||
1406 | /* Adjust hint for FACK. Non-FACK is handled in tcp_sacktag_one(). */ | 1406 | /* Adjust counters and hints for the newly sacked sequence |
1407 | if (tcp_is_fack(tp) && (skb == tp->lost_skb_hint)) | 1407 | * range but discard the return value since prev is already |
1408 | * marked. We must tag the range first because the seq | ||
1409 | * advancement below implicitly advances | ||
1410 | * tcp_highest_sack_seq() when skb is highest_sack. | ||
1411 | */ | ||
1412 | tcp_sacktag_one(sk, state, TCP_SKB_CB(skb)->sacked, | ||
1413 | start_seq, end_seq, dup_sack, pcount); | ||
1414 | |||
1415 | if (skb == tp->lost_skb_hint) | ||
1408 | tp->lost_cnt_hint += pcount; | 1416 | tp->lost_cnt_hint += pcount; |
1409 | 1417 | ||
1410 | TCP_SKB_CB(prev)->end_seq += shifted; | 1418 | TCP_SKB_CB(prev)->end_seq += shifted; |
@@ -1430,12 +1438,6 @@ static int tcp_shifted_skb(struct sock *sk, struct sk_buff *skb, | |||
1430 | skb_shinfo(skb)->gso_type = 0; | 1438 | skb_shinfo(skb)->gso_type = 0; |
1431 | } | 1439 | } |
1432 | 1440 | ||
1433 | /* Adjust counters and hints for the newly sacked sequence range but | ||
1434 | * discard the return value since prev is already marked. | ||
1435 | */ | ||
1436 | tcp_sacktag_one(sk, state, TCP_SKB_CB(skb)->sacked, | ||
1437 | start_seq, end_seq, dup_sack, pcount); | ||
1438 | |||
1439 | /* Difference in this won't matter, both ACKed by the same cumul. ACK */ | 1441 | /* Difference in this won't matter, both ACKed by the same cumul. ACK */ |
1440 | TCP_SKB_CB(prev)->sacked |= (TCP_SKB_CB(skb)->sacked & TCPCB_EVER_RETRANS); | 1442 | TCP_SKB_CB(prev)->sacked |= (TCP_SKB_CB(skb)->sacked & TCPCB_EVER_RETRANS); |
1441 | 1443 | ||
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 6b3cd65d1e07..daa50ea15f46 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
@@ -1342,6 +1342,9 @@ u32 __ieee80211_recalc_idle(struct ieee80211_local *local) | |||
1342 | hw_roc = true; | 1342 | hw_roc = true; |
1343 | 1343 | ||
1344 | list_for_each_entry(sdata, &local->interfaces, list) { | 1344 | list_for_each_entry(sdata, &local->interfaces, list) { |
1345 | if (sdata->vif.type == NL80211_IFTYPE_MONITOR || | ||
1346 | sdata->vif.type == NL80211_IFTYPE_AP_VLAN) | ||
1347 | continue; | ||
1345 | if (sdata->old_idle == sdata->vif.bss_conf.idle) | 1348 | if (sdata->old_idle == sdata->vif.bss_conf.idle) |
1346 | continue; | 1349 | continue; |
1347 | if (!ieee80211_sdata_running(sdata)) | 1350 | if (!ieee80211_sdata_running(sdata)) |
diff --git a/net/mac80211/rate.c b/net/mac80211/rate.c index 111fba38be82..b4f7600a3e36 100644 --- a/net/mac80211/rate.c +++ b/net/mac80211/rate.c | |||
@@ -447,7 +447,7 @@ void rate_control_get_rate(struct ieee80211_sub_if_data *sdata, | |||
447 | for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) { | 447 | for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) { |
448 | info->control.rates[i].idx = -1; | 448 | info->control.rates[i].idx = -1; |
449 | info->control.rates[i].flags = 0; | 449 | info->control.rates[i].flags = 0; |
450 | info->control.rates[i].count = 1; | 450 | info->control.rates[i].count = 0; |
451 | } | 451 | } |
452 | 452 | ||
453 | if (sdata->local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) | 453 | if (sdata->local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) |