From ce69e9703cdc53ab482141a3cfe16362d7a9d3db Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 10 Mar 2010 16:14:38 -0800 Subject: [PATCH] .33 patches --- ...orrect-packet-type-when-transmitting.patch | 76 ++++++++++++++ ...e-rifs-search-for-ar91xx-based-chips.patch | 58 +++++++++++ ...con-timer-restart-after-a-card-reset.patch | 53 ++++++++++ ...rate-control-fallback-rate-selection.patch | 82 +++++++++++++++ ...default-for-new-single-chip-families.patch | 55 +++++++++++ ...y-wake-queues-in-wireless_core_start.patch | 64 ++++++++++++ ...-unconfigured-4-addr-vlan-interfaces.patch | 37 +++++++ ...ig_wlan-instead-of-config_wlan_80211.patch | 33 +++++++ ...filter-xt_recent-fix-buffer-overflow.patch | 38 +++++++ .../netfilter-xt_recent-fix-false-match.patch | 30 ++++++ ...t3x2n-always-stretch-ultradma-timing.patch | 58 +++++++++++ ...don-t-use-possibly-stale-sched_class.patch | 63 ++++++++++++ ...d-fix-sched_mv_power_savings-for-smt.patch | 39 ++++++++ ...ler-regression-in-find_busiest_queue.patch | 99 +++++++++++++++++++ ...rt-scm_rights-on-unix-domain-sockets.patch | 34 +++++++ queue-2.6.33/series | 17 ++++ ...4-bit-and-close-some-potential-holes.patch | 62 ++++++++++++ ...ditional-pci-id-for-sunxvr500-driver.patch | 31 ++++++ 18 files changed, 929 insertions(+) create mode 100644 queue-2.6.33/ath5k-use-correct-packet-type-when-transmitting.patch create mode 100644 queue-2.6.33/ath9k-disable-rifs-search-for-ar91xx-based-chips.patch create mode 100644 queue-2.6.33/ath9k-fix-beacon-timer-restart-after-a-card-reset.patch create mode 100644 queue-2.6.33/ath9k-fix-rate-control-fallback-rate-selection.patch create mode 100644 queue-2.6.33/ath9k-re-enable-ps-by-default-for-new-single-chip-families.patch create mode 100644 queue-2.6.33/b43-b43legacy-wake-queues-in-wireless_core_start.patch create mode 100644 queue-2.6.33/mac80211-do-not-transmit-frames-on-unconfigured-4-addr-vlan-interfaces.patch create mode 100644 queue-2.6.33/netdevice.h-check-for-config_wlan-instead-of-config_wlan_80211.patch create mode 100644 queue-2.6.33/netfilter-xt_recent-fix-buffer-overflow.patch create mode 100644 queue-2.6.33/netfilter-xt_recent-fix-false-match.patch create mode 100644 queue-2.6.33/pata_hpt3x2n-always-stretch-ultradma-timing.patch create mode 100644 queue-2.6.33/sched-don-t-use-possibly-stale-sched_class.patch create mode 100644 queue-2.6.33/sched-fix-sched_mv_power_savings-for-smt.patch create mode 100644 queue-2.6.33/sched-fix-smt-scheduler-regression-in-find_busiest_queue.patch create mode 100644 queue-2.6.33/scm-only-support-scm_rights-on-unix-domain-sockets.patch create mode 100644 queue-2.6.33/skbuff-align-sk_buff-cb-to-64-bit-and-close-some-potential-holes.patch create mode 100644 queue-2.6.33/sunxvr500-additional-pci-id-for-sunxvr500-driver.patch diff --git a/queue-2.6.33/ath5k-use-correct-packet-type-when-transmitting.patch b/queue-2.6.33/ath5k-use-correct-packet-type-when-transmitting.patch new file mode 100644 index 00000000000..d13e977d9b8 --- /dev/null +++ b/queue-2.6.33/ath5k-use-correct-packet-type-when-transmitting.patch @@ -0,0 +1,76 @@ +From 2ac2927a953a01c83df255118922cce1523d1a18 Mon Sep 17 00:00:00 2001 +From: Bob Copeland +Date: Tue, 9 Feb 2010 13:06:54 -0500 +Subject: ath5k: use correct packet type when transmitting + +From: Bob Copeland + +commit 2ac2927a953a01c83df255118922cce1523d1a18 upstream. + +The hardware needs to know what type of frames are being +sent in order to fill in various fields, for example the +timestamp in probe responses (before this patch, it was +always 0). Set it correctly when initializing the TX +descriptor. + +Signed-off-by: Bob Copeland +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/ath/ath5k/ath5k.h | 1 - + drivers/net/wireless/ath/ath5k/base.c | 26 +++++++++++++++++++++++++- + 2 files changed, 25 insertions(+), 2 deletions(-) + +--- a/drivers/net/wireless/ath/ath5k/ath5k.h ++++ b/drivers/net/wireless/ath/ath5k/ath5k.h +@@ -541,7 +541,6 @@ struct ath5k_txq_info { + /* + * Transmit packet types. + * used on tx control descriptor +- * TODO: Use them inside base.c corectly + */ + enum ath5k_pkt_type { + AR5K_PKT_TYPE_NORMAL = 0, +--- a/drivers/net/wireless/ath/ath5k/base.c ++++ b/drivers/net/wireless/ath/ath5k/base.c +@@ -1246,6 +1246,29 @@ ath5k_rxbuf_setup(struct ath5k_softc *sc + return 0; + } + ++static enum ath5k_pkt_type get_hw_packet_type(struct sk_buff *skb) ++{ ++ struct ieee80211_hdr *hdr; ++ enum ath5k_pkt_type htype; ++ __le16 fc; ++ ++ hdr = (struct ieee80211_hdr *)skb->data; ++ fc = hdr->frame_control; ++ ++ if (ieee80211_is_beacon(fc)) ++ htype = AR5K_PKT_TYPE_BEACON; ++ else if (ieee80211_is_probe_resp(fc)) ++ htype = AR5K_PKT_TYPE_PROBE_RESP; ++ else if (ieee80211_is_atim(fc)) ++ htype = AR5K_PKT_TYPE_ATIM; ++ else if (ieee80211_is_pspoll(fc)) ++ htype = AR5K_PKT_TYPE_PSPOLL; ++ else ++ htype = AR5K_PKT_TYPE_NORMAL; ++ ++ return htype; ++} ++ + static int + ath5k_txbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf, + struct ath5k_txq *txq) +@@ -1300,7 +1323,8 @@ ath5k_txbuf_setup(struct ath5k_softc *sc + sc->vif, pktlen, info)); + } + ret = ah->ah_setup_tx_desc(ah, ds, pktlen, +- ieee80211_get_hdrlen_from_skb(skb), AR5K_PKT_TYPE_NORMAL, ++ ieee80211_get_hdrlen_from_skb(skb), ++ get_hw_packet_type(skb), + (sc->power_level * 2), + hw_rate, + info->control.rates[0].count, keyidx, ah->ah_tx_ant, flags, diff --git a/queue-2.6.33/ath9k-disable-rifs-search-for-ar91xx-based-chips.patch b/queue-2.6.33/ath9k-disable-rifs-search-for-ar91xx-based-chips.patch new file mode 100644 index 00000000000..a582f14fee5 --- /dev/null +++ b/queue-2.6.33/ath9k-disable-rifs-search-for-ar91xx-based-chips.patch @@ -0,0 +1,58 @@ +From 7bfbae10dc10a5c94a780d117a57e875d77e8e5a Mon Sep 17 00:00:00 2001 +From: Felix Fietkau +Date: Wed, 24 Feb 2010 04:43:05 +0100 +Subject: ath9k: disable RIFS search for AR91xx based chips + +From: Felix Fietkau + +commit 7bfbae10dc10a5c94a780d117a57e875d77e8e5a upstream. + +While ath9k does not support RIFS yet, the ability to receive RIFS +frames is currently enabled for most chipsets in the initvals. +This is causing baseband related issues on AR9160 and AR9130 based +chipsets, which can lock up under certain conditions. + +This patch fixes these issues by overriding the initvals, effectively +disabling RIFS for all affected chipsets. + +Signed-off-by: Felix Fietkau +Acked-by: Luis R. Rodriguez +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/ath/ath9k/hw.c | 10 ++++++++++ + drivers/net/wireless/ath/ath9k/phy.h | 3 +++ + 2 files changed, 13 insertions(+) + +--- a/drivers/net/wireless/ath/ath9k/hw.c ++++ b/drivers/net/wireless/ath/ath9k/hw.c +@@ -1345,6 +1345,16 @@ static void ath9k_hw_override_ini(struct + * Necessary to avoid issues on AR5416 2.0 + */ + REG_WRITE(ah, 0x9800 + (651 << 2), 0x11); ++ ++ /* ++ * Disable RIFS search on some chips to avoid baseband ++ * hang issues. ++ */ ++ if (AR_SREV_9100(ah) || AR_SREV_9160(ah)) { ++ val = REG_READ(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS); ++ val &= ~AR_PHY_RIFS_INIT_DELAY; ++ REG_WRITE(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS, val); ++ } + } + + static u32 ath9k_hw_def_ini_fixup(struct ath_hw *ah, +--- a/drivers/net/wireless/ath/ath9k/phy.h ++++ b/drivers/net/wireless/ath/ath9k/phy.h +@@ -384,6 +384,9 @@ bool ath9k_hw_set_rf_regs(struct ath_hw + + #define AR_PHY_HEAVY_CLIP_ENABLE 0x99E0 + ++#define AR_PHY_HEAVY_CLIP_FACTOR_RIFS 0x99EC ++#define AR_PHY_RIFS_INIT_DELAY 0x03ff0000 ++ + #define AR_PHY_M_SLEEP 0x99f0 + #define AR_PHY_REFCLKDLY 0x99f4 + #define AR_PHY_REFCLKPD 0x99f8 diff --git a/queue-2.6.33/ath9k-fix-beacon-timer-restart-after-a-card-reset.patch b/queue-2.6.33/ath9k-fix-beacon-timer-restart-after-a-card-reset.patch new file mode 100644 index 00000000000..1341ad1b962 --- /dev/null +++ b/queue-2.6.33/ath9k-fix-beacon-timer-restart-after-a-card-reset.patch @@ -0,0 +1,53 @@ +From d8728ee919282c7b01b65cd479ec1e2a9c5d3ba8 Mon Sep 17 00:00:00 2001 +From: Felix Fietkau +Date: Fri, 19 Feb 2010 18:21:42 +0100 +Subject: ath9k: fix beacon timer restart after a card reset + +From: Felix Fietkau + +commit d8728ee919282c7b01b65cd479ec1e2a9c5d3ba8 upstream. + +In AP mode, ath_beacon_config_ap only restarts the timer if a TSF +restart is requested. Apparently this was added, because this function +unconditionally sets the flag for TSF reset. + +The problem with this is, that ath9k_hw_reset() clobbers the timer +registers (specified in the initvals), thus effectively disabling the +SWBA interrupt whenever a card reset without TSF reset is issued +(happens in a few places in the code). + +This patch fixes ath_beacon_config_ap to only issue the TSF reset flag +when necessary, but reinitialize the timer unconditionally. Tests show, +that this is enough to keep the SWBA interrupt going after a call to +ath_reset() + +Signed-off-by: Felix Fietkau +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/ath/ath9k/beacon.c | 9 +++------ + 1 file changed, 3 insertions(+), 6 deletions(-) + +--- a/drivers/net/wireless/ath/ath9k/beacon.c ++++ b/drivers/net/wireless/ath/ath9k/beacon.c +@@ -525,16 +525,13 @@ static void ath_beacon_config_ap(struct + { + u32 nexttbtt, intval; + +- /* Configure the timers only when the TSF has to be reset */ +- +- if (!(sc->sc_flags & SC_OP_TSF_RESET)) +- return; +- + /* NB: the beacon interval is kept internally in TU's */ + intval = conf->beacon_interval & ATH9K_BEACON_PERIOD; + intval /= ATH_BCBUF; /* for staggered beacons */ + nexttbtt = intval; +- intval |= ATH9K_BEACON_RESET_TSF; ++ ++ if (sc->sc_flags & SC_OP_TSF_RESET) ++ intval |= ATH9K_BEACON_RESET_TSF; + + /* + * In AP mode we enable the beacon timers and SWBA interrupts to diff --git a/queue-2.6.33/ath9k-fix-rate-control-fallback-rate-selection.patch b/queue-2.6.33/ath9k-fix-rate-control-fallback-rate-selection.patch new file mode 100644 index 00000000000..b0ed7d835f5 --- /dev/null +++ b/queue-2.6.33/ath9k-fix-rate-control-fallback-rate-selection.patch @@ -0,0 +1,82 @@ +From 5c0ba62fd4b2dce08055a89600f1d834f9f0fe9e Mon Sep 17 00:00:00 2001 +From: Felix Fietkau +Date: Fri, 19 Feb 2010 01:46:36 +0100 +Subject: ath9k: fix rate control fallback rate selection + +From: Felix Fietkau + +commit 5c0ba62fd4b2dce08055a89600f1d834f9f0fe9e upstream. + +When selecting the tx fallback rate, rc.c used a separate variable +'nrix' for storing the next rate index, however it did not use that as +reference for further rate index lowering. Because of that, it ended up +reusing the same rate for multiple multi-rate retry stages, thus +decreasing delivery probability under changing link conditions. + +This patch removes the separate (unnecessary) variable and fixes +fallback the way it was intended to work. +This should result in increased throughput and better link stability. + +Signed-off-by: Felix Fietkau +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/ath/ath9k/rc.c | 15 +++++++-------- + 1 file changed, 7 insertions(+), 8 deletions(-) + +--- a/drivers/net/wireless/ath/ath9k/rc.c ++++ b/drivers/net/wireless/ath/ath9k/rc.c +@@ -668,7 +668,7 @@ static void ath_get_rate(void *priv, str + struct ieee80211_tx_rate *rates = tx_info->control.rates; + struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; + __le16 fc = hdr->frame_control; +- u8 try_per_rate, i = 0, rix, nrix; ++ u8 try_per_rate, i = 0, rix; + int is_probe = 0; + + if (rate_control_send_low(sta, priv_sta, txrc)) +@@ -688,26 +688,25 @@ static void ath_get_rate(void *priv, str + + rate_table = sc->cur_rate_table; + rix = ath_rc_get_highest_rix(sc, ath_rc_priv, rate_table, &is_probe); +- nrix = rix; + + if (is_probe) { + /* set one try for probe rates. For the + * probes don't enable rts */ + ath_rc_rate_set_series(rate_table, &rates[i++], txrc, +- 1, nrix, 0); ++ 1, rix, 0); + + /* Get the next tried/allowed rate. No RTS for the next series + * after the probe rate + */ +- ath_rc_get_lower_rix(rate_table, ath_rc_priv, rix, &nrix); ++ ath_rc_get_lower_rix(rate_table, ath_rc_priv, rix, &rix); + ath_rc_rate_set_series(rate_table, &rates[i++], txrc, +- try_per_rate, nrix, 0); ++ try_per_rate, rix, 0); + + tx_info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE; + } else { + /* Set the choosen rate. No RTS for first series entry. */ + ath_rc_rate_set_series(rate_table, &rates[i++], txrc, +- try_per_rate, nrix, 0); ++ try_per_rate, rix, 0); + } + + /* Fill in the other rates for multirate retry */ +@@ -716,10 +715,10 @@ static void ath_get_rate(void *priv, str + if (i + 1 == 4) + try_per_rate = 4; + +- ath_rc_get_lower_rix(rate_table, ath_rc_priv, rix, &nrix); ++ ath_rc_get_lower_rix(rate_table, ath_rc_priv, rix, &rix); + /* All other rates in the series have RTS enabled */ + ath_rc_rate_set_series(rate_table, &rates[i], txrc, +- try_per_rate, nrix, 1); ++ try_per_rate, rix, 1); + } + + /* diff --git a/queue-2.6.33/ath9k-re-enable-ps-by-default-for-new-single-chip-families.patch b/queue-2.6.33/ath9k-re-enable-ps-by-default-for-new-single-chip-families.patch new file mode 100644 index 00000000000..ae0e9a883c1 --- /dev/null +++ b/queue-2.6.33/ath9k-re-enable-ps-by-default-for-new-single-chip-families.patch @@ -0,0 +1,55 @@ +From 14acdde6e527950f66c084dbf19bad6fbfcaeedc Mon Sep 17 00:00:00 2001 +From: Luis R. Rodriguez +Date: Fri, 18 Dec 2009 11:26:04 -0500 +Subject: ath9k: re-enable ps by default for new single chip families + +From: Luis R. Rodriguez + +commit 14acdde6e527950f66c084dbf19bad6fbfcaeedc upstream. + +The newer single chip hardware family of chipsets have not been +experiencing issues with power saving set by default with recent +fixes merged (even into stable). The remaining issues are only +reported with AR5416 and since enabling PS by default can increase +power savings considerably best to take advantage of that feature +as this has been tested properly. + +For more details on this issue see the bug report: + +http://bugzilla.kernel.org/show_bug.cgi?id=14267 + +We leave AR5416 with PS disabled by default, that seems to require +some more work. + +Cc: Peter Stuge +Cc: Justin P. Mattock +Cc: Kristoffer Ericson +Signed-off-by: Luis R. Rodriguez +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/ath/ath9k/main.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +--- a/drivers/net/wireless/ath/ath9k/main.c ++++ b/drivers/net/wireless/ath/ath9k/main.c +@@ -1849,6 +1849,8 @@ bad_free_hw: + + void ath_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw) + { ++ struct ath_hw *ah = sc->sc_ah; ++ + hw->flags = IEEE80211_HW_RX_INCLUDES_FCS | + IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING | + IEEE80211_HW_SIGNAL_DBM | +@@ -1866,7 +1868,8 @@ void ath_set_hw_capab(struct ath_softc * + BIT(NL80211_IFTYPE_ADHOC) | + BIT(NL80211_IFTYPE_MESH_POINT); + +- hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; ++ if (AR_SREV_5416(ah)) ++ hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; + + hw->queues = 4; + hw->max_rates = 4; diff --git a/queue-2.6.33/b43-b43legacy-wake-queues-in-wireless_core_start.patch b/queue-2.6.33/b43-b43legacy-wake-queues-in-wireless_core_start.patch new file mode 100644 index 00000000000..194bbdea06e --- /dev/null +++ b/queue-2.6.33/b43-b43legacy-wake-queues-in-wireless_core_start.patch @@ -0,0 +1,64 @@ +From 0866b03c7d7dee8a34ffa527ecda426c0f405518 Mon Sep 17 00:00:00 2001 +From: Larry Finger +Date: Wed, 3 Feb 2010 13:33:44 -0600 +Subject: b43/b43legacy: Wake queues in wireless_core_start + +From: Larry Finger + +commit 0866b03c7d7dee8a34ffa527ecda426c0f405518 upstream. + +If b43 or b43legacy are deauthenticated or disconnected, there is a +possibility that a reconnection is tried with the queues stopped in +mac80211. To prevent this, start the queues before setting +STAT_INITIALIZED. + +In b43, a similar change has been in place (twice) in the +wireless_core_init() routine. Remove the duplicate and add similar +code to b43legacy. + +Signed-off-by: Larry Finger +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/b43/main.c | 3 +-- + drivers/net/wireless/b43legacy/main.c | 2 ++ + 2 files changed, 3 insertions(+), 2 deletions(-) + +--- a/drivers/net/wireless/b43/main.c ++++ b/drivers/net/wireless/b43/main.c +@@ -3970,6 +3970,7 @@ static int b43_wireless_core_start(struc + } + + /* We are ready to run. */ ++ ieee80211_wake_queues(dev->wl->hw); + b43_set_status(dev, B43_STAT_STARTED); + + /* Start data flow (TX/RX). */ +@@ -4379,8 +4380,6 @@ static int b43_wireless_core_init(struct + + ieee80211_wake_queues(dev->wl->hw); + +- ieee80211_wake_queues(dev->wl->hw); +- + b43_set_status(dev, B43_STAT_INITIALIZED); + + out: +--- a/drivers/net/wireless/b43legacy/main.c ++++ b/drivers/net/wireless/b43legacy/main.c +@@ -2921,6 +2921,7 @@ static int b43legacy_wireless_core_start + goto out; + } + /* We are ready to run. */ ++ ieee80211_wake_queues(dev->wl->hw); + b43legacy_set_status(dev, B43legacy_STAT_STARTED); + + /* Start data flow (TX/RX) */ +@@ -3341,6 +3342,7 @@ static int b43legacy_wireless_core_init( + b43legacy_security_init(dev); + b43legacy_rng_init(wl); + ++ ieee80211_wake_queues(dev->wl->hw); + b43legacy_set_status(dev, B43legacy_STAT_INITIALIZED); + + b43legacy_leds_init(dev); diff --git a/queue-2.6.33/mac80211-do-not-transmit-frames-on-unconfigured-4-addr-vlan-interfaces.patch b/queue-2.6.33/mac80211-do-not-transmit-frames-on-unconfigured-4-addr-vlan-interfaces.patch new file mode 100644 index 00000000000..c1ea33d4a52 --- /dev/null +++ b/queue-2.6.33/mac80211-do-not-transmit-frames-on-unconfigured-4-addr-vlan-interfaces.patch @@ -0,0 +1,37 @@ +From 3f0e0b220f80075ce15483b20458192c0ac27426 Mon Sep 17 00:00:00 2001 +From: Felix Fietkau +Date: Fri, 8 Jan 2010 18:15:13 +0100 +Subject: mac80211: do not transmit frames on unconfigured 4-addr vlan interfaces + +From: Felix Fietkau + +commit 3f0e0b220f80075ce15483b20458192c0ac27426 upstream. + +If frames are transmitted on 4-addr ap vlan interfaces with no station, +they end up being transmitted unencrypted, even if the ap interface +uses WPA. This patch add some sanity checking to make sure that this +does not happen. + +Signed-off-by: Felix Fietkau +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + net/mac80211/tx.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +--- a/net/mac80211/tx.c ++++ b/net/mac80211/tx.c +@@ -1052,8 +1052,11 @@ ieee80211_tx_prepare(struct ieee80211_su + + hdr = (struct ieee80211_hdr *) skb->data; + +- if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) ++ if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) { + tx->sta = rcu_dereference(sdata->u.vlan.sta); ++ if (!tx->sta && sdata->dev->ieee80211_ptr->use_4addr) ++ return TX_DROP; ++ } + if (!tx->sta) + tx->sta = sta_info_get(local, hdr->addr1); + diff --git a/queue-2.6.33/netdevice.h-check-for-config_wlan-instead-of-config_wlan_80211.patch b/queue-2.6.33/netdevice.h-check-for-config_wlan-instead-of-config_wlan_80211.patch new file mode 100644 index 00000000000..a38306e9cbb --- /dev/null +++ b/queue-2.6.33/netdevice.h-check-for-config_wlan-instead-of-config_wlan_80211.patch @@ -0,0 +1,33 @@ +From caf66e581172dc5032bb84841a91bc7b77ad9876 Mon Sep 17 00:00:00 2001 +From: John W. Linville +Date: Thu, 25 Feb 2010 12:02:45 -0500 +Subject: netdevice.h: check for CONFIG_WLAN instead of CONFIG_WLAN_80211 + +From: John W. Linville + +commit caf66e581172dc5032bb84841a91bc7b77ad9876 upstream. + +In "wireless: remove WLAN_80211 and WLAN_PRE80211 from Kconfig" I +inadvertantly missed a line in include/linux/netdevice.h. I thereby +effectively reverted "net: Set LL_MAX_HEADER properly for wireless." by +accident. :-( Now we should check there for CONFIG_WLAN instead. + +Signed-off-by: John W. Linville +Reported-by: Christoph Egger +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/netdevice.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/include/linux/netdevice.h ++++ b/include/linux/netdevice.h +@@ -136,7 +136,7 @@ static inline bool dev_xmit_complete(int + * used. + */ + +-#if defined(CONFIG_WLAN_80211) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) ++#if defined(CONFIG_WLAN) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) + # if defined(CONFIG_MAC80211_MESH) + # define LL_MAX_HEADER 128 + # else diff --git a/queue-2.6.33/netfilter-xt_recent-fix-buffer-overflow.patch b/queue-2.6.33/netfilter-xt_recent-fix-buffer-overflow.patch new file mode 100644 index 00000000000..68a504b4ad1 --- /dev/null +++ b/queue-2.6.33/netfilter-xt_recent-fix-buffer-overflow.patch @@ -0,0 +1,38 @@ +From 2c08522e5d2f0af2d6f05be558946dcbf8173683 Mon Sep 17 00:00:00 2001 +From: Tim Gardner +Date: Tue, 23 Feb 2010 14:55:21 +0100 +Subject: netfilter: xt_recent: fix buffer overflow + +From: Tim Gardner + +commit 2c08522e5d2f0af2d6f05be558946dcbf8173683 upstream. + +e->index overflows e->stamps[] every ip_pkt_list_tot packets. + +Consider the case when ip_pkt_list_tot==1; the first packet received is stored +in e->stamps[0] and e->index is initialized to 1. The next received packet +timestamp is then stored at e->stamps[1] in recent_entry_update(), +a buffer overflow because the maximum e->stamps[] index is 0. + +Signed-off-by: Tim Gardner +Signed-off-by: Patrick McHardy +Signed-off-by: Greg Kroah-Hartman + +--- + net/netfilter/xt_recent.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/net/netfilter/xt_recent.c ++++ b/net/netfilter/xt_recent.c +@@ -173,10 +173,10 @@ recent_entry_init(struct recent_table *t + + static void recent_entry_update(struct recent_table *t, struct recent_entry *e) + { ++ e->index %= ip_pkt_list_tot; + e->stamps[e->index++] = jiffies; + if (e->index > e->nstamps) + e->nstamps = e->index; +- e->index %= ip_pkt_list_tot; + list_move_tail(&e->lru_list, &t->lru_list); + } + diff --git a/queue-2.6.33/netfilter-xt_recent-fix-false-match.patch b/queue-2.6.33/netfilter-xt_recent-fix-false-match.patch new file mode 100644 index 00000000000..a957f86b3c7 --- /dev/null +++ b/queue-2.6.33/netfilter-xt_recent-fix-false-match.patch @@ -0,0 +1,30 @@ +From 8ccb92ad41cb311e52ad1b1fe77992c7f47a3b63 Mon Sep 17 00:00:00 2001 +From: Tim Gardner +Date: Tue, 23 Feb 2010 14:59:12 +0100 +Subject: netfilter: xt_recent: fix false match + +From: Tim Gardner + +commit 8ccb92ad41cb311e52ad1b1fe77992c7f47a3b63 upstream. + +A rule with a zero hit_count will always match. + +Signed-off-by: Tim Gardner +Signed-off-by: Patrick McHardy +Signed-off-by: Greg Kroah-Hartman + +--- + net/netfilter/xt_recent.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/net/netfilter/xt_recent.c ++++ b/net/netfilter/xt_recent.c +@@ -260,7 +260,7 @@ recent_mt(const struct sk_buff *skb, con + for (i = 0; i < e->nstamps; i++) { + if (info->seconds && time_after(time, e->stamps[i])) + continue; +- if (++hits >= info->hit_count) { ++ if (info->hit_count && ++hits >= info->hit_count) { + ret = !ret; + break; + } diff --git a/queue-2.6.33/pata_hpt3x2n-always-stretch-ultradma-timing.patch b/queue-2.6.33/pata_hpt3x2n-always-stretch-ultradma-timing.patch new file mode 100644 index 00000000000..9d07cbe444a --- /dev/null +++ b/queue-2.6.33/pata_hpt3x2n-always-stretch-ultradma-timing.patch @@ -0,0 +1,58 @@ +From 60661933995bc7a09686c901439e17c2a4ea7d5d Mon Sep 17 00:00:00 2001 +From: Sergei Shtylyov +Date: Mon, 7 Dec 2009 23:25:52 +0400 +Subject: pata_hpt3x2n: always stretch UltraDMA timing + +From: Sergei Shtylyov + +commit 60661933995bc7a09686c901439e17c2a4ea7d5d upstream. + +The UltraDMA Tss timing must be stretched with ATA clock of 66 MHz, but the +driver only does this when PCI clock is 66 MHz, whereas it always programs +DPLL clock (which is used as the ATA clock) to 66 MHz. + +Signed-off-by: Sergei Shtylyov +Signed-off-by: Jeff Garzik +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/ata/pata_hpt3x2n.c | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +--- a/drivers/ata/pata_hpt3x2n.c ++++ b/drivers/ata/pata_hpt3x2n.c +@@ -25,7 +25,7 @@ + #include + + #define DRV_NAME "pata_hpt3x2n" +-#define DRV_VERSION "0.3.8" ++#define DRV_VERSION "0.3.9" + + enum { + HPT_PCI_FAST = (1 << 31), +@@ -544,16 +544,16 @@ static int hpt3x2n_init_one(struct pci_d + pci_mhz); + /* Set our private data up. We only need a few flags so we use + it directly */ +- if (pci_mhz > 60) { ++ if (pci_mhz > 60) + hpriv = (void *)(PCI66 | USE_DPLL); +- /* +- * On HPT371N, if ATA clock is 66 MHz we must set bit 2 in +- * the MISC. register to stretch the UltraDMA Tss timing. +- * NOTE: This register is only writeable via I/O space. +- */ +- if (dev->device == PCI_DEVICE_ID_TTI_HPT371) +- outb(inb(iobase + 0x9c) | 0x04, iobase + 0x9c); +- } ++ ++ /* ++ * On HPT371N, if ATA clock is 66 MHz we must set bit 2 in ++ * the MISC. register to stretch the UltraDMA Tss timing. ++ * NOTE: This register is only writeable via I/O space. ++ */ ++ if (dev->device == PCI_DEVICE_ID_TTI_HPT371) ++ outb(inb(iobase + 0x9c) | 0x04, iobase + 0x9c); + + /* Now kick off ATA set up */ + return ata_pci_sff_init_one(dev, ppi, &hpt3x2n_sht, hpriv); diff --git a/queue-2.6.33/sched-don-t-use-possibly-stale-sched_class.patch b/queue-2.6.33/sched-don-t-use-possibly-stale-sched_class.patch new file mode 100644 index 00000000000..c51c72f42b5 --- /dev/null +++ b/queue-2.6.33/sched-don-t-use-possibly-stale-sched_class.patch @@ -0,0 +1,63 @@ +From 83ab0aa0d5623d823444db82c3b3c34d7ec364ae Mon Sep 17 00:00:00 2001 +From: Thomas Gleixner +Date: Wed, 17 Feb 2010 09:05:48 +0100 +Subject: sched: Don't use possibly stale sched_class + +From: Thomas Gleixner + +commit 83ab0aa0d5623d823444db82c3b3c34d7ec364ae upstream. + +setscheduler() saves task->sched_class outside of the rq->lock held +region for a check after the setscheduler changes have become +effective. That might result in checking a stale value. + +rtmutex_setprio() has the same problem, though it is protected by +p->pi_lock against setscheduler(), but for correctness sake (and to +avoid bad examples) it needs to be fixed as well. + +Retrieve task->sched_class inside of the rq->lock held region. + +Signed-off-by: Thomas Gleixner +Acked-by: Peter Zijlstra +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/sched.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/kernel/sched.c ++++ b/kernel/sched.c +@@ -6065,7 +6065,7 @@ void rt_mutex_setprio(struct task_struct + unsigned long flags; + int oldprio, on_rq, running; + struct rq *rq; +- const struct sched_class *prev_class = p->sched_class; ++ const struct sched_class *prev_class; + + BUG_ON(prio < 0 || prio > MAX_PRIO); + +@@ -6073,6 +6073,7 @@ void rt_mutex_setprio(struct task_struct + update_rq_clock(rq); + + oldprio = p->prio; ++ prev_class = p->sched_class; + on_rq = p->se.on_rq; + running = task_current(rq, p); + if (on_rq) +@@ -6292,7 +6293,7 @@ static int __sched_setscheduler(struct t + { + int retval, oldprio, oldpolicy = -1, on_rq, running; + unsigned long flags; +- const struct sched_class *prev_class = p->sched_class; ++ const struct sched_class *prev_class; + struct rq *rq; + int reset_on_fork; + +@@ -6406,6 +6407,7 @@ recheck: + p->sched_reset_on_fork = reset_on_fork; + + oldprio = p->prio; ++ prev_class = p->sched_class; + __setscheduler(rq, p, policy, param->sched_priority); + + if (running) diff --git a/queue-2.6.33/sched-fix-sched_mv_power_savings-for-smt.patch b/queue-2.6.33/sched-fix-sched_mv_power_savings-for-smt.patch new file mode 100644 index 00000000000..a0a8d7ff78c --- /dev/null +++ b/queue-2.6.33/sched-fix-sched_mv_power_savings-for-smt.patch @@ -0,0 +1,39 @@ +From 28f5318167adf23b16c844b9c2253f355cb21796 Mon Sep 17 00:00:00 2001 +From: Vaidyanathan Srinivasan +Date: Mon, 8 Feb 2010 15:35:55 +0530 +Subject: sched: Fix sched_mv_power_savings for !SMT + +From: Vaidyanathan Srinivasan + +commit 28f5318167adf23b16c844b9c2253f355cb21796 upstream. + +Fix for sched_mc_powersavigs for pre-Nehalem platforms. +Child sched domain should clear SD_PREFER_SIBLING if parent will have +SD_POWERSAVINGS_BALANCE because they are contradicting. + +Sets the flags correctly based on sched_mc_power_savings. + +Signed-off-by: Vaidyanathan Srinivasan +Signed-off-by: Peter Zijlstra +LKML-Reference: <20100208100555.GD2931@dirshya.in.ibm.com> +Signed-off-by: Thomas Gleixner +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/sched.h | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +--- a/include/linux/sched.h ++++ b/include/linux/sched.h +@@ -878,7 +878,10 @@ static inline int sd_balance_for_mc_powe + if (sched_smt_power_savings) + return SD_POWERSAVINGS_BALANCE; + +- return SD_PREFER_SIBLING; ++ if (!sched_mc_power_savings) ++ return SD_PREFER_SIBLING; ++ ++ return 0; + } + + static inline int sd_balance_for_package_power(void) diff --git a/queue-2.6.33/sched-fix-smt-scheduler-regression-in-find_busiest_queue.patch b/queue-2.6.33/sched-fix-smt-scheduler-regression-in-find_busiest_queue.patch new file mode 100644 index 00000000000..82a8d0dd433 --- /dev/null +++ b/queue-2.6.33/sched-fix-smt-scheduler-regression-in-find_busiest_queue.patch @@ -0,0 +1,99 @@ +From 9000f05c6d1607f79c0deacf42b09693be673f4c Mon Sep 17 00:00:00 2001 +From: Suresh Siddha +Date: Fri, 12 Feb 2010 17:14:22 -0800 +Subject: sched: Fix SMT scheduler regression in find_busiest_queue() + +From: Suresh Siddha + +commit 9000f05c6d1607f79c0deacf42b09693be673f4c upstream. + +Fix a SMT scheduler performance regression that is leading to a scenario +where SMT threads in one core are completely idle while both the SMT threads +in another core (on the same socket) are busy. + +This is caused by this commit (with the problematic code highlighted) + + commit bdb94aa5dbd8b55e75f5a50b61312fe589e2c2d1 + Author: Peter Zijlstra + Date: Tue Sep 1 10:34:38 2009 +0200 + + sched: Try to deal with low capacity + + @@ -4203,15 +4223,18 @@ find_busiest_queue() + ... + for_each_cpu(i, sched_group_cpus(group)) { + + unsigned long power = power_of(i); + + ... + + - wl = weighted_cpuload(i); + + wl = weighted_cpuload(i) * SCHED_LOAD_SCALE; + + wl /= power; + + - if (rq->nr_running == 1 && wl > imbalance) + + if (capacity && rq->nr_running == 1 && wl > imbalance) + continue; + +On a SMT system, power of the HT logical cpu will be 589 and +the scheduler load imbalance (for scenarios like the one mentioned above) +can be approximately 1024 (SCHED_LOAD_SCALE). The above change of scaling +the weighted load with the power will result in "wl > imbalance" and +ultimately resulting in find_busiest_queue() return NULL, causing +load_balance() to think that the load is well balanced. But infact +one of the tasks can be moved to the idle core for optimal performance. + +We don't need to use the weighted load (wl) scaled by the cpu power to +compare with imabalance. In that condition, we already know there is only a +single task "rq->nr_running == 1" and the comparison between imbalance, +wl is to make sure that we select the correct priority thread which matches +imbalance. So we really need to compare the imabalnce with the original +weighted load of the cpu and not the scaled load. + +But in other conditions where we want the most hammered(busiest) cpu, we can +use scaled load to ensure that we consider the cpu power in addition to the +actual load on that cpu, so that we can move the load away from the +guy that is getting most hammered with respect to the actual capacity, +as compared with the rest of the cpu's in that busiest group. + +Fix it. + +Reported-by: Ma Ling +Initial-Analysis-by: Zhang, Yanmin +Signed-off-by: Suresh Siddha +Signed-off-by: Peter Zijlstra +LKML-Reference: <1266023662.2808.118.camel@sbs-t61.sc.intel.com> +Signed-off-by: Thomas Gleixner +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/sched.c | 15 +++++++++++++-- + 1 file changed, 13 insertions(+), 2 deletions(-) + +--- a/kernel/sched.c ++++ b/kernel/sched.c +@@ -4119,12 +4119,23 @@ find_busiest_queue(struct sched_group *g + continue; + + rq = cpu_rq(i); +- wl = weighted_cpuload(i) * SCHED_LOAD_SCALE; +- wl /= power; ++ wl = weighted_cpuload(i); + ++ /* ++ * When comparing with imbalance, use weighted_cpuload() ++ * which is not scaled with the cpu power. ++ */ + if (capacity && rq->nr_running == 1 && wl > imbalance) + continue; + ++ /* ++ * For the load comparisons with the other cpu's, consider ++ * the weighted_cpuload() scaled with the cpu power, so that ++ * the load can be moved away from the cpu that is potentially ++ * running at a lower capacity. ++ */ ++ wl = (wl * SCHED_LOAD_SCALE) / power; ++ + if (wl > max_load) { + max_load = wl; + busiest = rq; diff --git a/queue-2.6.33/scm-only-support-scm_rights-on-unix-domain-sockets.patch b/queue-2.6.33/scm-only-support-scm_rights-on-unix-domain-sockets.patch new file mode 100644 index 00000000000..9415ff14d5f --- /dev/null +++ b/queue-2.6.33/scm-only-support-scm_rights-on-unix-domain-sockets.patch @@ -0,0 +1,34 @@ +From 76dadd76c265a0cdb5a76aa4eef03fcc9639b388 Mon Sep 17 00:00:00 2001 +From: Eric W. Biederman +Date: Sun, 28 Feb 2010 01:20:36 +0000 +Subject: scm: Only support SCM_RIGHTS on unix domain sockets. + +From: Eric W. Biederman + +commit 76dadd76c265a0cdb5a76aa4eef03fcc9639b388 upstream. + +We use scm_send and scm_recv on both unix domain and +netlink sockets, but only unix domain sockets support +everything required for file descriptor passing, +so error if someone attempts to pass file descriptors +over netlink sockets. + +Signed-off-by: Eric W. Biederman +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/core/scm.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/net/core/scm.c ++++ b/net/core/scm.c +@@ -156,6 +156,8 @@ int __scm_send(struct socket *sock, stru + switch (cmsg->cmsg_type) + { + case SCM_RIGHTS: ++ if (!sock->ops || sock->ops->family != PF_UNIX) ++ goto error; + err=scm_fp_copy(cmsg, &p->fp); + if (err<0) + goto error; diff --git a/queue-2.6.33/series b/queue-2.6.33/series index 534593e1497..4acdd57c955 100644 --- a/queue-2.6.33/series +++ b/queue-2.6.33/series @@ -63,3 +63,20 @@ gpio-cs5535-gpio-fix-input-direction.patch hwmon-tmp421-fix-temperature-conversions.patch hwmon-tmp421-restore-missing-inputs.patch hwmon-fix-off-by-one-kind-values.patch +pata_hpt3x2n-always-stretch-ultradma-timing.patch +scm-only-support-scm_rights-on-unix-domain-sockets.patch +skbuff-align-sk_buff-cb-to-64-bit-and-close-some-potential-holes.patch +netdevice.h-check-for-config_wlan-instead-of-config_wlan_80211.patch +ath9k-re-enable-ps-by-default-for-new-single-chip-families.patch +ath9k-fix-beacon-timer-restart-after-a-card-reset.patch +ath9k-fix-rate-control-fallback-rate-selection.patch +ath9k-disable-rifs-search-for-ar91xx-based-chips.patch +ath5k-use-correct-packet-type-when-transmitting.patch +b43-b43legacy-wake-queues-in-wireless_core_start.patch +netfilter-xt_recent-fix-buffer-overflow.patch +netfilter-xt_recent-fix-false-match.patch +sunxvr500-additional-pci-id-for-sunxvr500-driver.patch +mac80211-do-not-transmit-frames-on-unconfigured-4-addr-vlan-interfaces.patch +sched-fix-sched_mv_power_savings-for-smt.patch +sched-fix-smt-scheduler-regression-in-find_busiest_queue.patch +sched-don-t-use-possibly-stale-sched_class.patch diff --git a/queue-2.6.33/skbuff-align-sk_buff-cb-to-64-bit-and-close-some-potential-holes.patch b/queue-2.6.33/skbuff-align-sk_buff-cb-to-64-bit-and-close-some-potential-holes.patch new file mode 100644 index 00000000000..4f0fbee1491 --- /dev/null +++ b/queue-2.6.33/skbuff-align-sk_buff-cb-to-64-bit-and-close-some-potential-holes.patch @@ -0,0 +1,62 @@ +From da3f5cf1f8ebb0fab5c5fd09adb189166594ad6c Mon Sep 17 00:00:00 2001 +From: Felix Fietkau +Date: Tue, 23 Feb 2010 11:45:51 +0000 +Subject: skbuff: align sk_buff::cb to 64 bit and close some potential holes + +From: Felix Fietkau + +commit da3f5cf1f8ebb0fab5c5fd09adb189166594ad6c upstream. + +The alignment requirement for 64-bit load/store instructions on ARM is +implementation defined. Some CPUs (such as Marvell Feroceon) do not +generate an exception, if such an instruction is executed with an +address that is not 64 bit aligned. In such a case, the Feroceon +corrupts adjacent memory, which showed up in my tests as a crash in the +rx path of ath9k that only occured with CONFIG_XFRM set. + +This crash happened, because the first field of the mac80211 rx status +info in the cb is an u64, and changing it corrupted the skb->sp field. + +This patch also closes some potential pre-existing holes in the sk_buff +struct surrounding the cb[] area. + +Signed-off-by: Felix Fietkau +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/skbuff.h | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +--- a/include/linux/skbuff.h ++++ b/include/linux/skbuff.h +@@ -315,22 +315,23 @@ struct sk_buff { + struct sk_buff *next; + struct sk_buff *prev; + +- struct sock *sk; + ktime_t tstamp; ++ ++ struct sock *sk; + struct net_device *dev; + +- unsigned long _skb_dst; +-#ifdef CONFIG_XFRM +- struct sec_path *sp; +-#endif + /* + * This is the control buffer. It is free to use for every + * layer. Please put your private variables there. If you + * want to keep them across layers you have to do a skb_clone() + * first. This is owned by whoever has the skb queued ATM. + */ +- char cb[48]; ++ char cb[48] __aligned(8); + ++ unsigned long _skb_dst; ++#ifdef CONFIG_XFRM ++ struct sec_path *sp; ++#endif + unsigned int len, + data_len; + __u16 mac_len, diff --git a/queue-2.6.33/sunxvr500-additional-pci-id-for-sunxvr500-driver.patch b/queue-2.6.33/sunxvr500-additional-pci-id-for-sunxvr500-driver.patch new file mode 100644 index 00000000000..45123a0f294 --- /dev/null +++ b/queue-2.6.33/sunxvr500-additional-pci-id-for-sunxvr500-driver.patch @@ -0,0 +1,31 @@ +From 275143e9b237dd7e0b6d01660fd9b8acd9922fa7 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Fri, 26 Feb 2010 04:37:09 -0800 +Subject: sunxvr500: Additional PCI id for sunxvr500 driver + +From: Ben Hutchings + +commit 275143e9b237dd7e0b6d01660fd9b8acd9922fa7 upstream. + +Intergraph bought 3D Labs and some XVR-500 chips have Intergraph's +vendor id. + +Reported-by: Jurij Smakov +Signed-off-by: Ben Hutchings +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/video/sunxvr500.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/video/sunxvr500.c ++++ b/drivers/video/sunxvr500.c +@@ -400,6 +400,7 @@ static void __devexit e3d_pci_unregister + + static struct pci_device_id e3d_pci_table[] = { + { PCI_DEVICE(PCI_VENDOR_ID_3DLABS, 0x7a0), }, ++ { PCI_DEVICE(0x1091, 0x7a0), }, + { PCI_DEVICE(PCI_VENDOR_ID_3DLABS, 0x7a2), }, + { .vendor = PCI_VENDOR_ID_3DLABS, + .device = PCI_ANY_ID, -- 2.47.3