]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
.32 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Thu, 11 Mar 2010 00:15:36 +0000 (16:15 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 11 Mar 2010 00:15:36 +0000 (16:15 -0800)
14 files changed:
queue-2.6.32/ath5k-use-correct-packet-type-when-transmitting.patch [new file with mode: 0644]
queue-2.6.32/ath9k-disable-rifs-search-for-ar91xx-based-chips.patch [new file with mode: 0644]
queue-2.6.32/ath9k-fix-beacon-timer-restart-after-a-card-reset.patch [new file with mode: 0644]
queue-2.6.32/ath9k-fix-rate-control-fallback-rate-selection.patch [new file with mode: 0644]
queue-2.6.32/b43-b43legacy-wake-queues-in-wireless_core_start.patch [new file with mode: 0644]
queue-2.6.32/netfilter-xt_recent-fix-buffer-overflow.patch [new file with mode: 0644]
queue-2.6.32/netfilter-xt_recent-fix-false-match.patch [new file with mode: 0644]
queue-2.6.32/pata_hpt3x2n-always-stretch-ultradma-timing.patch [new file with mode: 0644]
queue-2.6.32/sched-don-t-use-possibly-stale-sched_class.patch [new file with mode: 0644]
queue-2.6.32/sched-fix-sched_mv_power_savings-for-smt.patch [new file with mode: 0644]
queue-2.6.32/sched-fix-smt-scheduler-regression-in-find_busiest_queue.patch [new file with mode: 0644]
queue-2.6.32/scm-only-support-scm_rights-on-unix-domain-sockets.patch [new file with mode: 0644]
queue-2.6.32/series
queue-2.6.32/sunxvr500-additional-pci-id-for-sunxvr500-driver.patch [new file with mode: 0644]

diff --git a/queue-2.6.32/ath5k-use-correct-packet-type-when-transmitting.patch b/queue-2.6.32/ath5k-use-correct-packet-type-when-transmitting.patch
new file mode 100644 (file)
index 0000000..a1d9917
--- /dev/null
@@ -0,0 +1,76 @@
+From 2ac2927a953a01c83df255118922cce1523d1a18 Mon Sep 17 00:00:00 2001
+From: Bob Copeland <me@bobcopeland.com>
+Date: Tue, 9 Feb 2010 13:06:54 -0500
+Subject: ath5k: use correct packet type when transmitting
+
+From: Bob Copeland <me@bobcopeland.com>
+
+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 <me@bobcopeland.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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
+@@ -546,7 +546,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
+@@ -1220,6 +1220,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)
+@@ -1274,7 +1297,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.32/ath9k-disable-rifs-search-for-ar91xx-based-chips.patch b/queue-2.6.32/ath9k-disable-rifs-search-for-ar91xx-based-chips.patch
new file mode 100644 (file)
index 0000000..581acfd
--- /dev/null
@@ -0,0 +1,58 @@
+From 7bfbae10dc10a5c94a780d117a57e875d77e8e5a Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Wed, 24 Feb 2010 04:43:05 +0100
+Subject: ath9k: disable RIFS search for AR91xx based chips
+
+From: Felix Fietkau <nbd@openwrt.org>
+
+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 <nbd@openwrt.org>
+Acked-by: Luis R. Rodriguez <lrodriguez@atheros.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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
+@@ -1295,6 +1295,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
+@@ -368,6 +368,9 @@ bool ath9k_hw_init_rf(struct ath_hw *ah,
+ #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.32/ath9k-fix-beacon-timer-restart-after-a-card-reset.patch b/queue-2.6.32/ath9k-fix-beacon-timer-restart-after-a-card-reset.patch
new file mode 100644 (file)
index 0000000..ae1084c
--- /dev/null
@@ -0,0 +1,53 @@
+From d8728ee919282c7b01b65cd479ec1e2a9c5d3ba8 Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Fri, 19 Feb 2010 18:21:42 +0100
+Subject: ath9k: fix beacon timer restart after a card reset
+
+From: Felix Fietkau <nbd@openwrt.org>
+
+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 <nbd@openwrt.org>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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
+@@ -512,16 +512,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.32/ath9k-fix-rate-control-fallback-rate-selection.patch b/queue-2.6.32/ath9k-fix-rate-control-fallback-rate-selection.patch
new file mode 100644 (file)
index 0000000..c91e883
--- /dev/null
@@ -0,0 +1,82 @@
+From 5c0ba62fd4b2dce08055a89600f1d834f9f0fe9e Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Fri, 19 Feb 2010 01:46:36 +0100
+Subject: ath9k: fix rate control fallback rate selection
+
+From: Felix Fietkau <nbd@openwrt.org>
+
+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 <nbd@openwrt.org>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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
+@@ -757,7 +757,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))
+@@ -777,26 +777,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 */
+@@ -805,10 +804,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.32/b43-b43legacy-wake-queues-in-wireless_core_start.patch b/queue-2.6.32/b43-b43legacy-wake-queues-in-wireless_core_start.patch
new file mode 100644 (file)
index 0000000..07b29a9
--- /dev/null
@@ -0,0 +1,64 @@
+From 0866b03c7d7dee8a34ffa527ecda426c0f405518 Mon Sep 17 00:00:00 2001
+From: Larry Finger <Larry.Finger@lwfinger.net>
+Date: Wed, 3 Feb 2010 13:33:44 -0600
+Subject: b43/b43legacy: Wake queues in wireless_core_start
+
+From: Larry Finger <Larry.Finger@lwfinger.net>
+
+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 <Larry.Finger@lwfinger.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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
+@@ -3967,6 +3967,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). */
+@@ -4376,8 +4377,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.32/netfilter-xt_recent-fix-buffer-overflow.patch b/queue-2.6.32/netfilter-xt_recent-fix-buffer-overflow.patch
new file mode 100644 (file)
index 0000000..68a504b
--- /dev/null
@@ -0,0 +1,38 @@
+From 2c08522e5d2f0af2d6f05be558946dcbf8173683 Mon Sep 17 00:00:00 2001
+From: Tim Gardner <tim.gardner@canonical.com>
+Date: Tue, 23 Feb 2010 14:55:21 +0100
+Subject: netfilter: xt_recent: fix buffer overflow
+
+From: Tim Gardner <tim.gardner@canonical.com>
+
+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 <tim.gardner@canonical.com>
+Signed-off-by: Patrick McHardy <kaber@trash.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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.32/netfilter-xt_recent-fix-false-match.patch b/queue-2.6.32/netfilter-xt_recent-fix-false-match.patch
new file mode 100644 (file)
index 0000000..a957f86
--- /dev/null
@@ -0,0 +1,30 @@
+From 8ccb92ad41cb311e52ad1b1fe77992c7f47a3b63 Mon Sep 17 00:00:00 2001
+From: Tim Gardner <tim.gardner@canonical.com>
+Date: Tue, 23 Feb 2010 14:59:12 +0100
+Subject: netfilter: xt_recent: fix false match
+
+From: Tim Gardner <tim.gardner@canonical.com>
+
+commit 8ccb92ad41cb311e52ad1b1fe77992c7f47a3b63 upstream.
+
+A rule with a zero hit_count will always match.
+
+Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
+Signed-off-by: Patrick McHardy <kaber@trash.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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.32/pata_hpt3x2n-always-stretch-ultradma-timing.patch b/queue-2.6.32/pata_hpt3x2n-always-stretch-ultradma-timing.patch
new file mode 100644 (file)
index 0000000..69e4643
--- /dev/null
@@ -0,0 +1,58 @@
+From 60661933995bc7a09686c901439e17c2a4ea7d5d Mon Sep 17 00:00:00 2001
+From: Sergei Shtylyov <sshtylyov@ru.mvista.com>
+Date: Mon, 7 Dec 2009 23:25:52 +0400
+Subject: pata_hpt3x2n: always stretch UltraDMA timing
+
+From: Sergei Shtylyov <sshtylyov@ru.mvista.com>
+
+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 <sshtylyov@ru.mvista.com>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 <linux/libata.h>
+ #define DRV_NAME      "pata_hpt3x2n"
+-#define DRV_VERSION   "0.3.8"
++#define DRV_VERSION   "0.3.9"
+ enum {
+       HPT_PCI_FAST    =       (1 << 31),
+@@ -547,16 +547,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.32/sched-don-t-use-possibly-stale-sched_class.patch b/queue-2.6.32/sched-don-t-use-possibly-stale-sched_class.patch
new file mode 100644 (file)
index 0000000..416ec2d
--- /dev/null
@@ -0,0 +1,63 @@
+From 83ab0aa0d5623d823444db82c3b3c34d7ec364ae Mon Sep 17 00:00:00 2001
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 17 Feb 2010 09:05:48 +0100
+Subject: sched: Don't use possibly stale sched_class
+
+From: Thomas Gleixner <tglx@linutronix.de>
+
+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 <tglx@linutronix.de>
+Acked-by: Peter Zijlstra <peterz@infradead.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/sched.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/kernel/sched.c
++++ b/kernel/sched.c
+@@ -6009,7 +6009,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);
+@@ -6017,6 +6017,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)
+@@ -6244,7 +6245,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;
+@@ -6358,6 +6359,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.32/sched-fix-sched_mv_power_savings-for-smt.patch b/queue-2.6.32/sched-fix-sched_mv_power_savings-for-smt.patch
new file mode 100644 (file)
index 0000000..c147f2d
--- /dev/null
@@ -0,0 +1,39 @@
+From 28f5318167adf23b16c844b9c2253f355cb21796 Mon Sep 17 00:00:00 2001
+From: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
+Date: Mon, 8 Feb 2010 15:35:55 +0530
+Subject: sched: Fix sched_mv_power_savings for !SMT
+
+From: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
+
+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 <svaidy@linux.vnet.ibm.com>
+Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
+LKML-Reference: <20100208100555.GD2931@dirshya.in.ibm.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/linux/sched.h |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -864,7 +864,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.32/sched-fix-smt-scheduler-regression-in-find_busiest_queue.patch b/queue-2.6.32/sched-fix-smt-scheduler-regression-in-find_busiest_queue.patch
new file mode 100644 (file)
index 0000000..d06bcf6
--- /dev/null
@@ -0,0 +1,99 @@
+From 9000f05c6d1607f79c0deacf42b09693be673f4c Mon Sep 17 00:00:00 2001
+From: Suresh Siddha <suresh.b.siddha@intel.com>
+Date: Fri, 12 Feb 2010 17:14:22 -0800
+Subject: sched: Fix SMT scheduler regression in find_busiest_queue()
+
+From: Suresh Siddha <suresh.b.siddha@intel.com>
+
+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 <a.p.zijlstra@chello.nl>
+   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 <ling.ma@intel.com>
+Initial-Analysis-by: Zhang, Yanmin <yanmin_zhang@linux.intel.com>
+Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
+Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
+LKML-Reference: <1266023662.2808.118.camel@sbs-t61.sc.intel.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/sched.c |   15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+--- a/kernel/sched.c
++++ b/kernel/sched.c
+@@ -4098,12 +4098,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.32/scm-only-support-scm_rights-on-unix-domain-sockets.patch b/queue-2.6.32/scm-only-support-scm_rights-on-unix-domain-sockets.patch
new file mode 100644 (file)
index 0000000..9415ff1
--- /dev/null
@@ -0,0 +1,34 @@
+From 76dadd76c265a0cdb5a76aa4eef03fcc9639b388 Mon Sep 17 00:00:00 2001
+From: Eric W. Biederman <ebiederm@xmission.com>
+Date: Sun, 28 Feb 2010 01:20:36 +0000
+Subject: scm: Only support SCM_RIGHTS on unix domain sockets.
+
+From: Eric W. Biederman <ebiederm@xmission.com>
+
+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 <ebiederm@xmission.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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;
index 6aaf65f260f757fd6ac56e37fd4b160faf76a380..051b536cf0c6ea78a974d90f2734951e9fb05ff8 100644 (file)
@@ -93,3 +93,16 @@ p54pci-handle-dma-mapping-errors.patch
 gpiolib-actually-set-output-state-in-wm831x_gpio_direction_output.patch
 hwmon-tmp421-fix-temperature-conversions.patch
 hwmon-tmp421-restore-missing-inputs.patch
+pata_hpt3x2n-always-stretch-ultradma-timing.patch
+scm-only-support-scm_rights-on-unix-domain-sockets.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
+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.32/sunxvr500-additional-pci-id-for-sunxvr500-driver.patch b/queue-2.6.32/sunxvr500-additional-pci-id-for-sunxvr500-driver.patch
new file mode 100644 (file)
index 0000000..45123a0
--- /dev/null
@@ -0,0 +1,31 @@
+From 275143e9b237dd7e0b6d01660fd9b8acd9922fa7 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 26 Feb 2010 04:37:09 -0800
+Subject: sunxvr500: Additional PCI id for sunxvr500 driver
+
+From: Ben Hutchings <ben@decadent.org.uk>
+
+commit 275143e9b237dd7e0b6d01660fd9b8acd9922fa7 upstream.
+
+Intergraph bought 3D Labs and some XVR-500 chips have Intergraph's
+vendor id.
+
+Reported-by: Jurij Smakov <jurij@wooyd.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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,