]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
.34 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Wed, 4 Aug 2010 22:50:59 +0000 (15:50 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 4 Aug 2010 22:50:59 +0000 (15:50 -0700)
18 files changed:
queue-2.6.34/9p-strlen-doesn-t-count-the-terminator.patch [new file with mode: 0644]
queue-2.6.34/amd64_edac-correct-scrub-rate-setting.patch [new file with mode: 0644]
queue-2.6.34/amd64_edac-fix-dct-base-address-selector.patch [new file with mode: 0644]
queue-2.6.34/amd64_edac-fix-operator-precendence-error.patch [new file with mode: 0644]
queue-2.6.34/ath9k-enable-serialize_regmode-for-non-pcie-ar9160.patch [new file with mode: 0644]
queue-2.6.34/ath9k-fix-a-potential-buffer-leak-in-the-sta-teardown-path.patch [new file with mode: 0644]
queue-2.6.34/ath9k-fix-tsf-after-reset-on-ar913x.patch [new file with mode: 0644]
queue-2.6.34/ath9k-fix-yet-another-buffer-leak-in-the-tx-aggregation-code.patch [new file with mode: 0644]
queue-2.6.34/ath9k_hw-fix-an-off-by-one-error-in-the-pdadc-boundaries-calculation.patch [new file with mode: 0644]
queue-2.6.34/cfg80211-don-t-get-expired-bsses.patch [new file with mode: 0644]
queue-2.6.34/cfg80211-ignore-spurious-deauth.patch [new file with mode: 0644]
queue-2.6.34/e1000e-82577-82578-phy-register-access-issues.patch [new file with mode: 0644]
queue-2.6.34/e1000e-don-t-inadvertently-re-set-intx_disable.patch [new file with mode: 0644]
queue-2.6.34/igb-use-only-a-single-tx-queue-in-sr-iov-mode.patch [new file with mode: 0644]
queue-2.6.34/iwlwifi-fix-scan-abort.patch [new file with mode: 0644]
queue-2.6.34/mac80211-avoid-scheduling-while-atomic-in-mesh_rx_plink_frame.patch [new file with mode: 0644]
queue-2.6.34/parisc-pass-through-t-to-early-iodc-console.patch [new file with mode: 0644]
queue-2.6.34/series

diff --git a/queue-2.6.34/9p-strlen-doesn-t-count-the-terminator.patch b/queue-2.6.34/9p-strlen-doesn-t-count-the-terminator.patch
new file mode 100644 (file)
index 0000000..a6c2548
--- /dev/null
@@ -0,0 +1,34 @@
+From 5c4bfa17f3ec46becec4b23d12323f7605ebd696 Mon Sep 17 00:00:00 2001
+From: Dan Carpenter <error27@gmail.com>
+Date: Fri, 9 Jul 2010 23:51:54 +0000
+Subject: 9p: strlen() doesn't count the terminator
+
+From: Dan Carpenter <error27@gmail.com>
+
+commit 5c4bfa17f3ec46becec4b23d12323f7605ebd696 upstream.
+
+This is an off by one bug because strlen() doesn't count the NULL
+terminator.  We strcpy() addr into a fixed length array of size
+UNIX_PATH_MAX later on.
+
+The addr variable is the name of the device being mounted.
+
+Signed-off-by: Dan Carpenter <error27@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/9p/trans_fd.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/net/9p/trans_fd.c
++++ b/net/9p/trans_fd.c
+@@ -948,7 +948,7 @@ p9_fd_create_unix(struct p9_client *clie
+       csocket = NULL;
+-      if (strlen(addr) > UNIX_PATH_MAX) {
++      if (strlen(addr) >= UNIX_PATH_MAX) {
+               P9_EPRINTK(KERN_ERR, "p9_trans_unix: address too long: %s\n",
+                       addr);
+               return -ENAMETOOLONG;
diff --git a/queue-2.6.34/amd64_edac-correct-scrub-rate-setting.patch b/queue-2.6.34/amd64_edac-correct-scrub-rate-setting.patch
new file mode 100644 (file)
index 0000000..6fefa3e
--- /dev/null
@@ -0,0 +1,30 @@
+From bc57117856cf1e581135810b37d3b75f9d1749f5 Mon Sep 17 00:00:00 2001
+From: Borislav Petkov <borislav.petkov@amd.com>
+Date: Fri, 21 May 2010 21:25:03 +0200
+Subject: amd64_edac: Correct scrub rate setting
+
+From: Borislav Petkov <borislav.petkov@amd.com>
+
+commit bc57117856cf1e581135810b37d3b75f9d1749f5 upstream.
+
+Exit early when setting scrub rate on unknown/unsupported families.
+
+Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
+Acked-by: Doug Thompson <dougthompson@xmission.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/edac/amd64_edac.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/edac/amd64_edac.c
++++ b/drivers/edac/amd64_edac.c
+@@ -178,7 +178,7 @@ static int amd64_set_scrub_rate(struct m
+       default:
+               amd64_printk(KERN_ERR, "Unsupported family!\n");
+-              break;
++              return -EINVAL;
+       }
+       return amd64_search_set_scrub_rate(pvt->misc_f3_ctl, *bandwidth,
+                       min_scrubrate);
diff --git a/queue-2.6.34/amd64_edac-fix-dct-base-address-selector.patch b/queue-2.6.34/amd64_edac-fix-dct-base-address-selector.patch
new file mode 100644 (file)
index 0000000..b93063c
--- /dev/null
@@ -0,0 +1,32 @@
+From 9975a5f22a4fcc8d08035c65439900a983f891ad Mon Sep 17 00:00:00 2001
+From: Borislav Petkov <borislav.petkov@amd.com>
+Date: Mon, 8 Mar 2010 18:29:35 +0100
+Subject: amd64_edac: Fix DCT base address selector
+
+From: Borislav Petkov <borislav.petkov@amd.com>
+
+commit 9975a5f22a4fcc8d08035c65439900a983f891ad upstream.
+
+The correct check is to verify whether in high range we're below 4GB
+and not to extract the DctSelBaseAddr again. See "2.8.5 Routing DRAM
+Requests" in the F10h BKDG.
+
+Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
+Acked-by: Doug Thompson <dougthompson@xmission.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/edac/amd64_edac.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/edac/amd64_edac.c
++++ b/drivers/edac/amd64_edac.c
+@@ -1430,7 +1430,7 @@ static inline u64 f10_get_base_addr_offs
+       u64 chan_off;
+       if (hi_range_sel) {
+-              if (!(dct_sel_base_addr & 0xFFFFF800) &&
++              if (!(dct_sel_base_addr & 0xFFFF0000) &&
+                  hole_valid && (sys_addr >= 0x100000000ULL))
+                       chan_off = hole_off << 16;
+               else
diff --git a/queue-2.6.34/amd64_edac-fix-operator-precendence-error.patch b/queue-2.6.34/amd64_edac-fix-operator-precendence-error.patch
new file mode 100644 (file)
index 0000000..3e473e6
--- /dev/null
@@ -0,0 +1,29 @@
+From 962b70a1eb22c467b95756a290c694e73da17f41 Mon Sep 17 00:00:00 2001
+From: Borislav Petkov <borislav.petkov@amd.com>
+Date: Tue, 3 Aug 2010 16:51:28 +0200
+Subject: amd64_edac: Fix operator precendence error
+
+From: Borislav Petkov <borislav.petkov@amd.com>
+
+commit 962b70a1eb22c467b95756a290c694e73da17f41 upstream.
+
+The bitwise AND is of higher precedence, make that explicit.
+
+Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/edac/amd64_edac.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/edac/amd64_edac.c
++++ b/drivers/edac/amd64_edac.c
+@@ -1679,7 +1679,7 @@ static void f10_map_sysaddr_to_csrow(str
+        * ganged. Otherwise @chan should already contain the channel at
+        * this point.
+        */
+-      if (dct_ganging_enabled(pvt) && pvt->nbcfg & K8_NBCFG_CHIPKILL)
++      if (dct_ganging_enabled(pvt) && (pvt->nbcfg & K8_NBCFG_CHIPKILL))
+               chan = get_channel_from_ecc_syndrome(mci, syndrome);
+       if (chan >= 0)
diff --git a/queue-2.6.34/ath9k-enable-serialize_regmode-for-non-pcie-ar9160.patch b/queue-2.6.34/ath9k-enable-serialize_regmode-for-non-pcie-ar9160.patch
new file mode 100644 (file)
index 0000000..e56ea10
--- /dev/null
@@ -0,0 +1,31 @@
+From 4c85ab11ca56da1aa59b58c80cc6a356515cc645 Mon Sep 17 00:00:00 2001
+From: John W. Linville <linville@tuxdriver.com>
+Date: Wed, 28 Jul 2010 10:06:35 -0400
+Subject: ath9k: enable serialize_regmode for non-PCIE AR9160
+
+From: John W. Linville <linville@tuxdriver.com>
+
+commit 4c85ab11ca56da1aa59b58c80cc6a356515cc645 upstream.
+
+https://bugzilla.kernel.org/show_bug.cgi?id=16476
+
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Acked-by: Luis R. Rodriguez <lrodriguez@atheros.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/ath/ath9k/hw.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -863,7 +863,8 @@ int ath9k_hw_init(struct ath_hw *ah)
+       if (ah->config.serialize_regmode == SER_REG_MODE_AUTO) {
+               if (ah->hw_version.macVersion == AR_SREV_VERSION_5416_PCI ||
+-                  (AR_SREV_9280(ah) && !ah->is_pciexpress)) {
++                  ((AR_SREV_9160(ah) || AR_SREV_9280(ah)) &&
++                   !ah->is_pciexpress)) {
+                       ah->config.serialize_regmode =
+                               SER_REG_MODE_ON;
+               } else {
diff --git a/queue-2.6.34/ath9k-fix-a-potential-buffer-leak-in-the-sta-teardown-path.patch b/queue-2.6.34/ath9k-fix-a-potential-buffer-leak-in-the-sta-teardown-path.patch
new file mode 100644 (file)
index 0000000..f435581
--- /dev/null
@@ -0,0 +1,91 @@
+From 2b40994cabd2f545d5c11d3a65dcee6f6f9155f8 Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Wed, 7 Jul 2010 19:42:08 +0200
+Subject: ath9k: fix a potential buffer leak in the STA teardown path
+
+From: Felix Fietkau <nbd@openwrt.org>
+
+commit 2b40994cabd2f545d5c11d3a65dcee6f6f9155f8 upstream.
+
+It looks like it might be possible for a TID to be paused, while still
+holding some queued buffers, however ath_tx_node_cleanup currently only
+iterates over active TIDs.
+Fix this by always checking every allocated TID for the STA that is being
+cleaned up.
+
+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/xmit.c |   56 +++++++++++++++++-----------------
+ 1 file changed, 28 insertions(+), 28 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -2230,37 +2230,37 @@ void ath_tx_node_init(struct ath_softc *
+ void ath_tx_node_cleanup(struct ath_softc *sc, struct ath_node *an)
+ {
+-      int i;
+-      struct ath_atx_ac *ac, *ac_tmp;
+-      struct ath_atx_tid *tid, *tid_tmp;
++      struct ath_atx_ac *ac;
++      struct ath_atx_tid *tid;
+       struct ath_txq *txq;
++      int i, tidno;
+-      for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
+-              if (ATH_TXQ_SETUP(sc, i)) {
+-                      txq = &sc->tx.txq[i];
+-
+-                      spin_lock_bh(&txq->axq_lock);
+-
+-                      list_for_each_entry_safe(ac,
+-                                      ac_tmp, &txq->axq_acq, list) {
+-                              tid = list_first_entry(&ac->tid_q,
+-                                              struct ath_atx_tid, list);
+-                              if (tid && tid->an != an)
+-                                      continue;
+-                              list_del(&ac->list);
+-                              ac->sched = false;
+-
+-                              list_for_each_entry_safe(tid,
+-                                              tid_tmp, &ac->tid_q, list) {
+-                                      list_del(&tid->list);
+-                                      tid->sched = false;
+-                                      ath_tid_drain(sc, txq, tid);
+-                                      tid->state &= ~AGGR_ADDBA_COMPLETE;
+-                                      tid->state &= ~AGGR_CLEANUP;
+-                              }
+-                      }
++      for (tidno = 0, tid = &an->tid[tidno];
++           tidno < WME_NUM_TID; tidno++, tid++) {
++              i = tid->ac->qnum;
+-                      spin_unlock_bh(&txq->axq_lock);
++              if (!ATH_TXQ_SETUP(sc, i))
++                      continue;
++
++              txq = &sc->tx.txq[i];
++              ac = tid->ac;
++
++              spin_lock_bh(&txq->axq_lock);
++
++              if (tid->sched) {
++                      list_del(&tid->list);
++                      tid->sched = false;
+               }
++
++              if (ac->sched) {
++                      list_del(&ac->list);
++                      tid->ac->sched = false;
++              }
++
++              ath_tid_drain(sc, txq, tid);
++              tid->state &= ~AGGR_ADDBA_COMPLETE;
++              tid->state &= ~AGGR_CLEANUP;
++
++              spin_unlock_bh(&txq->axq_lock);
+       }
+ }
diff --git a/queue-2.6.34/ath9k-fix-tsf-after-reset-on-ar913x.patch b/queue-2.6.34/ath9k-fix-tsf-after-reset-on-ar913x.patch
new file mode 100644 (file)
index 0000000..823ae79
--- /dev/null
@@ -0,0 +1,71 @@
+From f860d526eb2939a1c37128900b5af2b6f3ff7f20 Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Wed, 30 Jun 2010 02:07:48 +0200
+Subject: ath9k: fix TSF after reset on AR913x
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Felix Fietkau <nbd@openwrt.org>
+
+commit f860d526eb2939a1c37128900b5af2b6f3ff7f20 upstream.
+
+When issuing a reset, the TSF value is lost in the hardware because of
+the 913x specific cold reset. As with some AR9280 cards, the TSF needs
+to be preserved in software here.
+
+Additionally, there's an issue that frequently prevents a successful
+TSF write directly after the chip reset. In this case, repeating the
+TSF write after the initval-writes usually works.
+
+This patch detects failed TSF writes and recovers from them, taking
+into account the delay caused by the initval writes.
+
+Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+Reported-by: Björn Smedman <bjorn.smedman@venatech.se>
+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 |   16 ++++++++++++++--
+ 1 file changed, 14 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -1956,7 +1956,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+       macStaId1 = REG_READ(ah, AR_STA_ID1) & AR_STA_ID1_BASE_RATE_11B;
+       /* For chips on which RTC reset is done, save TSF before it gets cleared */
+-      if (AR_SREV_9280(ah) && ah->eep_ops->get_eeprom(ah, EEP_OL_PWRCTRL))
++      if (AR_SREV_9100(ah) ||
++          (AR_SREV_9280(ah) && ah->eep_ops->get_eeprom(ah, EEP_OL_PWRCTRL)))
+               tsf = ath9k_hw_gettsf64(ah);
+       saveLedState = REG_READ(ah, AR_CFG_LED) &
+@@ -1986,7 +1987,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+       }
+       /* Restore TSF */
+-      if (tsf && AR_SREV_9280(ah) && ah->eep_ops->get_eeprom(ah, EEP_OL_PWRCTRL))
++      if (tsf)
+               ath9k_hw_settsf64(ah, tsf);
+       if (AR_SREV_9280_10_OR_LATER(ah))
+@@ -2006,6 +2007,17 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+       if (r)
+               return r;
++      /*
++       * Some AR91xx SoC devices frequently fail to accept TSF writes
++       * right after the chip reset. When that happens, write a new
++       * value after the initvals have been applied, with an offset
++       * based on measured time difference
++       */
++      if (AR_SREV_9100(ah) && (ath9k_hw_gettsf64(ah) < tsf)) {
++              tsf += 1500;
++              ath9k_hw_settsf64(ah, tsf);
++      }
++
+       /* Setup MFP options for CCMP */
+       if (AR_SREV_9280_20_OR_LATER(ah)) {
+               /* Mask Retry(b11), PwrMgt(b12), MoreData(b13) to 0 in mgmt
diff --git a/queue-2.6.34/ath9k-fix-yet-another-buffer-leak-in-the-tx-aggregation-code.patch b/queue-2.6.34/ath9k-fix-yet-another-buffer-leak-in-the-tx-aggregation-code.patch
new file mode 100644 (file)
index 0000000..b067ffb
--- /dev/null
@@ -0,0 +1,57 @@
+From 4cee78614cfa046a26c4fbf313d5bbacb3ad8efc Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Fri, 23 Jul 2010 03:53:16 +0200
+Subject: ath9k: fix yet another buffer leak in the tx aggregation code
+
+From: Felix Fietkau <nbd@openwrt.org>
+
+commit 4cee78614cfa046a26c4fbf313d5bbacb3ad8efc upstream.
+
+When an aggregation session is being cleaned up, while the tx status
+for some frames is being processed, the TID is flushed and its buffers
+are sent out.
+
+Unfortunately that left the pending un-acked frames unprocessed, thus
+leaking buffers. Fix this by reordering the code so that those frames
+are processed first, before the TID is flushed.
+
+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/xmit.c |   16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -453,6 +453,14 @@ static void ath_tx_complete_aggr(struct
+               bf = bf_next;
+       }
++      /* prepend un-acked frames to the beginning of the pending frame queue */
++      if (!list_empty(&bf_pending)) {
++              spin_lock_bh(&txq->axq_lock);
++              list_splice(&bf_pending, &tid->buf_q);
++              ath_tx_queue_tid(txq, tid);
++              spin_unlock_bh(&txq->axq_lock);
++      }
++
+       if (tid->state & AGGR_CLEANUP) {
+               if (tid->baw_head == tid->baw_tail) {
+                       tid->state &= ~AGGR_ADDBA_COMPLETE;
+@@ -465,14 +473,6 @@ static void ath_tx_complete_aggr(struct
+               return;
+       }
+-      /* prepend un-acked frames to the beginning of the pending frame queue */
+-      if (!list_empty(&bf_pending)) {
+-              spin_lock_bh(&txq->axq_lock);
+-              list_splice(&bf_pending, &tid->buf_q);
+-              ath_tx_queue_tid(txq, tid);
+-              spin_unlock_bh(&txq->axq_lock);
+-      }
+-
+       rcu_read_unlock();
+       if (needreset)
diff --git a/queue-2.6.34/ath9k_hw-fix-an-off-by-one-error-in-the-pdadc-boundaries-calculation.patch b/queue-2.6.34/ath9k_hw-fix-an-off-by-one-error-in-the-pdadc-boundaries-calculation.patch
new file mode 100644 (file)
index 0000000..c10d2dc
--- /dev/null
@@ -0,0 +1,32 @@
+From 03b4776c408d2f4bf3a5d204e223724d154716d1 Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Sun, 11 Jul 2010 12:48:41 +0200
+Subject: ath9k_hw: fix an off-by-one error in the PDADC boundaries calculation
+
+From: Felix Fietkau <nbd@openwrt.org>
+
+commit 03b4776c408d2f4bf3a5d204e223724d154716d1 upstream.
+
+PDADC values were only generated for values surrounding the target
+index, however not for the target index itself, leading to a minor
+error in the generated curve.
+
+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/eeprom_def.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/ath/ath9k/eeprom_def.c
++++ b/drivers/net/wireless/ath/ath9k/eeprom_def.c
+@@ -721,7 +721,7 @@ static void ath9k_hw_get_def_gain_bounda
+                                   vpdTableI[i][sizeCurrVpdTable - 2]);
+               vpdStep = (int16_t)((vpdStep < 1) ? 1 : vpdStep);
+-              if (tgtIndex > maxIndex) {
++              if (tgtIndex >= maxIndex) {
+                       while ((ss <= tgtIndex) &&
+                              (k < (AR5416_NUM_PDADC_VALUES - 1))) {
+                               tmpVal = (int16_t)((vpdTableI[i][sizeCurrVpdTable - 1] +
diff --git a/queue-2.6.34/cfg80211-don-t-get-expired-bsses.patch b/queue-2.6.34/cfg80211-don-t-get-expired-bsses.patch
new file mode 100644 (file)
index 0000000..3d4b9a8
--- /dev/null
@@ -0,0 +1,52 @@
+From ccb6c1360f8dd43303c659db718e7e0b24175db5 Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Tue, 13 Jul 2010 10:55:38 +0200
+Subject: cfg80211: don't get expired BSSes
+
+From: Johannes Berg <johannes.berg@intel.com>
+
+commit ccb6c1360f8dd43303c659db718e7e0b24175db5 upstream.
+
+When kernel-internal users use cfg80211_get_bss()
+to get a reference to a BSS struct, they may end
+up getting one that would have been removed from
+the list if there had been any userspace access
+to the list. This leads to inconsistencies and
+problems.
+
+Fix it by making cfg80211_get_bss() ignore BSSes
+that cfg80211_bss_expire() would remove.
+
+Fixes http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2180
+
+Reported-by: Jiajia Zheng <jiajia.zheng@intel.com>
+Tested-by: Jiajia Zheng <jiajia.zheng@intel.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/wireless/scan.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/net/wireless/scan.c
++++ b/net/wireless/scan.c
+@@ -275,6 +275,7 @@ struct cfg80211_bss *cfg80211_get_bss(st
+ {
+       struct cfg80211_registered_device *dev = wiphy_to_dev(wiphy);
+       struct cfg80211_internal_bss *bss, *res = NULL;
++      unsigned long now = jiffies;
+       spin_lock_bh(&dev->bss_lock);
+@@ -283,6 +284,10 @@ struct cfg80211_bss *cfg80211_get_bss(st
+                       continue;
+               if (channel && bss->pub.channel != channel)
+                       continue;
++              /* Don't get expired BSS structs */
++              if (time_after(now, bss->ts + IEEE80211_SCAN_RESULT_EXPIRE) &&
++                  !atomic_read(&bss->hold))
++                      continue;
+               if (is_bss(&bss->pub, bssid, ssid, ssid_len)) {
+                       res = bss;
+                       kref_get(&res->ref);
diff --git a/queue-2.6.34/cfg80211-ignore-spurious-deauth.patch b/queue-2.6.34/cfg80211-ignore-spurious-deauth.patch
new file mode 100644 (file)
index 0000000..2046482
--- /dev/null
@@ -0,0 +1,45 @@
+From 643f82e32f14faf0d0944c804203a6681b6b0a1e Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Mon, 12 Jul 2010 14:46:43 +0200
+Subject: cfg80211: ignore spurious deauth
+
+From: Johannes Berg <johannes.berg@intel.com>
+
+commit 643f82e32f14faf0d0944c804203a6681b6b0a1e upstream.
+
+Ever since mac80211/drivers are no longer
+fully in charge of keeping track of the
+auth status, trying to make them do so will
+fail. Instead of warning and reporting the
+deauthentication to userspace, cfg80211 must
+simply ignore it so that spurious
+deauthentications, e.g. before starting
+authentication, aren't seen by userspace as
+actual deauthentications.
+
+Reported-by: Paul Stewart <pstew@google.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/wireless/mlme.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/net/wireless/mlme.c
++++ b/net/wireless/mlme.c
+@@ -44,10 +44,10 @@ void cfg80211_send_rx_auth(struct net_de
+               }
+       }
+-      WARN_ON(!done);
+-
+-      nl80211_send_rx_auth(rdev, dev, buf, len, GFP_KERNEL);
+-      cfg80211_sme_rx_auth(dev, buf, len);
++      if (done) {
++              nl80211_send_rx_auth(rdev, dev, buf, len, GFP_KERNEL);
++              cfg80211_sme_rx_auth(dev, buf, len);
++      }
+       wdev_unlock(wdev);
+ }
diff --git a/queue-2.6.34/e1000e-82577-82578-phy-register-access-issues.patch b/queue-2.6.34/e1000e-82577-82578-phy-register-access-issues.patch
new file mode 100644 (file)
index 0000000..5be0bd0
--- /dev/null
@@ -0,0 +1,38 @@
+From ff847ac2d3e90edd94674c28bade25ae1e6a2e49 Mon Sep 17 00:00:00 2001
+From: Bruce Allan <bruce.w.allan@intel.com>
+Date: Tue, 27 Jul 2010 12:28:46 +0000
+Subject: e1000e: 82577/82578 PHY register access issues
+
+From: Bruce Allan <bruce.w.allan@intel.com>
+
+commit ff847ac2d3e90edd94674c28bade25ae1e6a2e49 upstream.
+
+The MAC-PHY interconnect on 82577/82578 uses a power management feature
+(called K1) which must be disabled when in 1Gbps due to a hardware issue on
+these parts.  The #define bit setting used to enable/disable K1 is
+incorrect and can cause PHY register accesses to stop working altogether
+until the next device reset.  This patch sets the register correctly.
+
+This issue is present in kernels since 2.6.32.
+
+Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
+Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/e1000e/hw.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/e1000e/hw.h
++++ b/drivers/net/e1000e/hw.h
+@@ -306,7 +306,7 @@ enum e1e_registers {
+ #define E1000_KMRNCTRLSTA_INBAND_PARAM        0x9    /* Kumeran InBand Parameters */
+ #define E1000_KMRNCTRLSTA_DIAG_NELPBK 0x1000 /* Nearend Loopback mode */
+ #define E1000_KMRNCTRLSTA_K1_CONFIG   0x7
+-#define E1000_KMRNCTRLSTA_K1_ENABLE   0x140E
++#define E1000_KMRNCTRLSTA_K1_ENABLE   0x0002
+ #define E1000_KMRNCTRLSTA_K1_DISABLE  0x1400
+ #define IFE_PHY_EXTENDED_STATUS_CONTROL       0x10
diff --git a/queue-2.6.34/e1000e-don-t-inadvertently-re-set-intx_disable.patch b/queue-2.6.34/e1000e-don-t-inadvertently-re-set-intx_disable.patch
new file mode 100644 (file)
index 0000000..c90d95d
--- /dev/null
@@ -0,0 +1,71 @@
+From 36f2407fe52c55566221f8c68c8fb808abffd2f5 Mon Sep 17 00:00:00 2001
+From: Dean Nelson <dnelson@redhat.com>
+Date: Tue, 29 Jun 2010 18:12:05 +0000
+Subject: e1000e: don't inadvertently re-set INTX_DISABLE
+
+From: Dean Nelson <dnelson@redhat.com>
+
+commit 36f2407fe52c55566221f8c68c8fb808abffd2f5 upstream.
+
+Should e1000_test_msi() fail to see an msi interrupt, it attempts to
+fallback to legacy INTx interrupts. But an error in the code may prevent
+this from happening correctly.
+
+Before calling e1000_test_msi_interrupt(), e1000_test_msi() disables SERR
+by clearing the SERR bit from the just read PCI_COMMAND bits as it writes
+them back out.
+
+Upon return from calling e1000_test_msi_interrupt(), it re-enables SERR
+by writing out the version of PCI_COMMAND it had previously read.
+
+The problem with this is that e1000_test_msi_interrupt() calls
+pci_disable_msi(), which eventually ends up in pci_intx(). And because
+pci_intx() was called with enable set to 1, the INTX_DISABLE bit gets
+cleared from PCI_COMMAND, which is what we want. But when we get back to
+e1000_test_msi(), the INTX_DISABLE bit gets inadvertently re-set because
+of the attempt by e1000_test_msi() to re-enable SERR.
+
+The solution is to have e1000_test_msi() re-read the PCI_COMMAND bits as
+part of its attempt to re-enable SERR.
+
+During debugging/testing of this issue I found that not all the systems
+I ran on had the SERR bit set to begin with. And on some of the systems
+the same could be said for the INTX_DISABLE bit. Needless to say these
+latter systems didn't have a problem falling back to legacy INTx
+interrupts with the code as is.
+
+Signed-off-by: Dean Nelson <dnelson@redhat.com>
+Tested-by: Emil Tantilov <emil.s.tantilov@intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/e1000e/netdev.c |   13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/e1000e/netdev.c
++++ b/drivers/net/e1000e/netdev.c
+@@ -3041,13 +3041,18 @@ static int e1000_test_msi(struct e1000_a
+       /* disable SERR in case the MSI write causes a master abort */
+       pci_read_config_word(adapter->pdev, PCI_COMMAND, &pci_cmd);
+-      pci_write_config_word(adapter->pdev, PCI_COMMAND,
+-                            pci_cmd & ~PCI_COMMAND_SERR);
++      if (pci_cmd & PCI_COMMAND_SERR)
++              pci_write_config_word(adapter->pdev, PCI_COMMAND,
++                                    pci_cmd & ~PCI_COMMAND_SERR);
+       err = e1000_test_msi_interrupt(adapter);
+-      /* restore previous setting of command word */
+-      pci_write_config_word(adapter->pdev, PCI_COMMAND, pci_cmd);
++      /* re-enable SERR */
++      if (pci_cmd & PCI_COMMAND_SERR) {
++              pci_read_config_word(adapter->pdev, PCI_COMMAND, &pci_cmd);
++              pci_cmd |= PCI_COMMAND_SERR;
++              pci_write_config_word(adapter->pdev, PCI_COMMAND, pci_cmd);
++      }
+       /* success ! */
+       if (!err)
diff --git a/queue-2.6.34/igb-use-only-a-single-tx-queue-in-sr-iov-mode.patch b/queue-2.6.34/igb-use-only-a-single-tx-queue-in-sr-iov-mode.patch
new file mode 100644 (file)
index 0000000..2b11e4e
--- /dev/null
@@ -0,0 +1,52 @@
+From 5fa8517f038d51d571981fb495206cc30ed91b06 Mon Sep 17 00:00:00 2001
+From: Greg Rose <gregory.v.rose@intel.com>
+Date: Thu, 1 Jul 2010 13:38:16 +0000
+Subject: igb: Use only a single Tx queue in SR-IOV mode
+
+From: Greg Rose <gregory.v.rose@intel.com>
+
+commit 5fa8517f038d51d571981fb495206cc30ed91b06 upstream.
+
+The 82576 expects the second rx queue in any pool to receive L2 switch
+loop back packets sent from the second tx queue in another pool.  The
+82576 VF driver does not enable the second rx queue so if the PF driver
+sends packets destined to a VF from its second tx queue then the VF
+driver will never see them.  In SR-IOV mode limit the number of tx queues
+used by the PF driver to one. This patch fixes a bug reported in which
+the PF cannot communciate with the VF and should be considered for 2.6.34
+stable.
+
+Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
+Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/igb/igb_main.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/igb/igb_main.c
++++ b/drivers/net/igb/igb_main.c
+@@ -322,9 +322,6 @@ static void igb_cache_ring_register(stru
+                       for (; i < adapter->rss_queues; i++)
+                               adapter->rx_ring[i]->reg_idx = rbase_offset +
+                                                              Q_IDX_82576(i);
+-                      for (; j < adapter->rss_queues; j++)
+-                              adapter->tx_ring[j]->reg_idx = rbase_offset +
+-                                                             Q_IDX_82576(j);
+               }
+       case e1000_82575:
+       case e1000_82580:
+@@ -685,7 +682,10 @@ static void igb_set_interrupt_capability
+       /* Number of supported queues. */
+       adapter->num_rx_queues = adapter->rss_queues;
+-      adapter->num_tx_queues = adapter->rss_queues;
++      if (adapter->vfs_allocated_count)
++              adapter->num_tx_queues = 1;
++      else
++              adapter->num_tx_queues = adapter->rss_queues;
+       /* start with one vector for every rx queue */
+       numvecs = adapter->num_rx_queues;
diff --git a/queue-2.6.34/iwlwifi-fix-scan-abort.patch b/queue-2.6.34/iwlwifi-fix-scan-abort.patch
new file mode 100644 (file)
index 0000000..248affb
--- /dev/null
@@ -0,0 +1,65 @@
+From d28232b461b8d54b09e59325dbac8b0913ce2049 Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Thu, 29 Jul 2010 11:37:41 +0200
+Subject: iwlwifi: fix scan abort
+
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+
+commit d28232b461b8d54b09e59325dbac8b0913ce2049 upstream.
+
+Fix possible double priv->mutex lock introduced by commit
+a69b03e941abae00380fc6bc1877fb797a1b31e6
+"iwlwifi: cancel scan watchdog in iwl_bg_abort_scan" .
+We can not call cancel_delayed_work_sync(&priv->scan_check) with
+priv->mutex locked because workqueue function iwl_bg_scan_check()
+take that lock internally.
+
+We do not need to synchronize when canceling priv->scan_check work.
+We can avoid races (sending double abort command or send no
+command at all) using STATUS_SCAN_ABORT bit. Moreover
+current iwl_bg_scan_check() code seems to be broken, as
+we should not send abort commands when currently aborting.
+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlwifi/iwl-scan.c |   18 ++++++++----------
+ 1 file changed, 8 insertions(+), 10 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/iwl-scan.c
++++ b/drivers/net/wireless/iwlwifi/iwl-scan.c
+@@ -607,11 +607,10 @@ void iwl_bg_scan_check(struct work_struc
+               return;
+       mutex_lock(&priv->mutex);
+-      if (test_bit(STATUS_SCANNING, &priv->status) ||
+-          test_bit(STATUS_SCAN_ABORTING, &priv->status)) {
+-              IWL_DEBUG_SCAN(priv, "Scan completion watchdog resetting "
+-                      "adapter (%dms)\n",
+-                      jiffies_to_msecs(IWL_SCAN_CHECK_WATCHDOG));
++      if (test_bit(STATUS_SCANNING, &priv->status) &&
++          !test_bit(STATUS_SCAN_ABORTING, &priv->status)) {
++              IWL_DEBUG_SCAN(priv, "Scan completion watchdog (%dms)\n",
++                             jiffies_to_msecs(IWL_SCAN_CHECK_WATCHDOG));
+               if (!test_bit(STATUS_EXIT_PENDING, &priv->status))
+                       iwl_send_scan_abort(priv);
+@@ -950,12 +949,11 @@ void iwl_bg_abort_scan(struct work_struc
+           !test_bit(STATUS_GEO_CONFIGURED, &priv->status))
+               return;
+-      mutex_lock(&priv->mutex);
+-
+-      cancel_delayed_work_sync(&priv->scan_check);
+-      set_bit(STATUS_SCAN_ABORTING, &priv->status);
+-      iwl_send_scan_abort(priv);
++      cancel_delayed_work(&priv->scan_check);
++      mutex_lock(&priv->mutex);
++      if (test_bit(STATUS_SCAN_ABORTING, &priv->status))
++              iwl_send_scan_abort(priv);
+       mutex_unlock(&priv->mutex);
+ }
+ EXPORT_SYMBOL(iwl_bg_abort_scan);
diff --git a/queue-2.6.34/mac80211-avoid-scheduling-while-atomic-in-mesh_rx_plink_frame.patch b/queue-2.6.34/mac80211-avoid-scheduling-while-atomic-in-mesh_rx_plink_frame.patch
new file mode 100644 (file)
index 0000000..ef377d1
--- /dev/null
@@ -0,0 +1,165 @@
+From c937019761a758f2749b1f3a032b7a91fb044753 Mon Sep 17 00:00:00 2001
+From: John W. Linville <linville@tuxdriver.com>
+Date: Mon, 21 Jun 2010 17:14:07 -0400
+Subject: mac80211: avoid scheduling while atomic in mesh_rx_plink_frame
+
+From: John W. Linville <linville@tuxdriver.com>
+
+commit c937019761a758f2749b1f3a032b7a91fb044753 upstream.
+
+While mesh_rx_plink_frame holds sta->lock...
+
+mesh_rx_plink_frame ->
+       mesh_plink_inc_estab_count ->
+               ieee80211_bss_info_change_notify
+
+...but ieee80211_bss_info_change_notify is allowed to sleep.  A driver
+taking advantage of that allowance can cause a scheduling while
+atomic bug.  Similar paths exist for mesh_plink_dec_estab_count,
+so work around those as well.
+
+http://bugzilla.kernel.org/show_bug.cgi?id=16099
+
+Also, correct a minor kerneldoc comment error (mismatched function names).
+
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/mac80211/mesh_plink.c |   42 +++++++++++++++++++++++++++++++-----------
+ 1 file changed, 31 insertions(+), 11 deletions(-)
+
+--- a/net/mac80211/mesh_plink.c
++++ b/net/mac80211/mesh_plink.c
+@@ -65,7 +65,6 @@ void mesh_plink_inc_estab_count(struct i
+ {
+       atomic_inc(&sdata->u.mesh.mshstats.estab_plinks);
+       mesh_accept_plinks_update(sdata);
+-      ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON);
+ }
+ static inline
+@@ -73,7 +72,6 @@ void mesh_plink_dec_estab_count(struct i
+ {
+       atomic_dec(&sdata->u.mesh.mshstats.estab_plinks);
+       mesh_accept_plinks_update(sdata);
+-      ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON);
+ }
+ /**
+@@ -115,7 +113,7 @@ static struct sta_info *mesh_plink_alloc
+ }
+ /**
+- * mesh_plink_deactivate - deactivate mesh peer link
++ * __mesh_plink_deactivate - deactivate mesh peer link
+  *
+  * @sta: mesh peer link to deactivate
+  *
+@@ -123,18 +121,23 @@ static struct sta_info *mesh_plink_alloc
+  *
+  * Locking: the caller must hold sta->lock
+  */
+-static void __mesh_plink_deactivate(struct sta_info *sta)
++static bool __mesh_plink_deactivate(struct sta_info *sta)
+ {
+       struct ieee80211_sub_if_data *sdata = sta->sdata;
++      bool deactivated = false;
+-      if (sta->plink_state == PLINK_ESTAB)
++      if (sta->plink_state == PLINK_ESTAB) {
+               mesh_plink_dec_estab_count(sdata);
++              deactivated = true;
++      }
+       sta->plink_state = PLINK_BLOCKED;
+       mesh_path_flush_by_nexthop(sta);
++
++      return deactivated;
+ }
+ /**
+- * __mesh_plink_deactivate - deactivate mesh peer link
++ * mesh_plink_deactivate - deactivate mesh peer link
+  *
+  * @sta: mesh peer link to deactivate
+  *
+@@ -142,9 +145,15 @@ static void __mesh_plink_deactivate(stru
+  */
+ void mesh_plink_deactivate(struct sta_info *sta)
+ {
++      struct ieee80211_sub_if_data *sdata = sta->sdata;
++      bool deactivated;
++
+       spin_lock_bh(&sta->lock);
+-      __mesh_plink_deactivate(sta);
++      deactivated = __mesh_plink_deactivate(sta);
+       spin_unlock_bh(&sta->lock);
++
++      if (deactivated)
++              ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON);
+ }
+ static int mesh_plink_frame_tx(struct ieee80211_sub_if_data *sdata,
+@@ -381,10 +390,16 @@ int mesh_plink_open(struct sta_info *sta
+ void mesh_plink_block(struct sta_info *sta)
+ {
++      struct ieee80211_sub_if_data *sdata = sta->sdata;
++      bool deactivated;
++
+       spin_lock_bh(&sta->lock);
+-      __mesh_plink_deactivate(sta);
++      deactivated = __mesh_plink_deactivate(sta);
+       sta->plink_state = PLINK_BLOCKED;
+       spin_unlock_bh(&sta->lock);
++
++      if (deactivated)
++              ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON);
+ }
+@@ -397,6 +412,7 @@ void mesh_rx_plink_frame(struct ieee8021
+       enum plink_event event;
+       enum plink_frame_type ftype;
+       size_t baselen;
++      bool deactivated;
+       u8 ie_len;
+       u8 *baseaddr;
+       __le16 plid, llid, reason;
+@@ -651,8 +667,9 @@ void mesh_rx_plink_frame(struct ieee8021
+               case CNF_ACPT:
+                       del_timer(&sta->plink_timer);
+                       sta->plink_state = PLINK_ESTAB;
+-                      mesh_plink_inc_estab_count(sdata);
+                       spin_unlock_bh(&sta->lock);
++                      mesh_plink_inc_estab_count(sdata);
++                      ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON);
+                       mpl_dbg("Mesh plink with %pM ESTABLISHED\n",
+                               sta->sta.addr);
+                       break;
+@@ -684,8 +701,9 @@ void mesh_rx_plink_frame(struct ieee8021
+               case OPN_ACPT:
+                       del_timer(&sta->plink_timer);
+                       sta->plink_state = PLINK_ESTAB;
+-                      mesh_plink_inc_estab_count(sdata);
+                       spin_unlock_bh(&sta->lock);
++                      mesh_plink_inc_estab_count(sdata);
++                      ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON);
+                       mpl_dbg("Mesh plink with %pM ESTABLISHED\n",
+                               sta->sta.addr);
+                       mesh_plink_frame_tx(sdata, PLINK_CONFIRM, sta->sta.addr, llid,
+@@ -702,11 +720,13 @@ void mesh_rx_plink_frame(struct ieee8021
+               case CLS_ACPT:
+                       reason = cpu_to_le16(MESH_CLOSE_RCVD);
+                       sta->reason = reason;
+-                      __mesh_plink_deactivate(sta);
++                      deactivated = __mesh_plink_deactivate(sta);
+                       sta->plink_state = PLINK_HOLDING;
+                       llid = sta->llid;
+                       mod_plink_timer(sta, dot11MeshHoldingTimeout(sdata));
+                       spin_unlock_bh(&sta->lock);
++                      if (deactivated)
++                              ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON);
+                       mesh_plink_frame_tx(sdata, PLINK_CLOSE, sta->sta.addr, llid,
+                                           plid, reason);
+                       break;
diff --git a/queue-2.6.34/parisc-pass-through-t-to-early-iodc-console.patch b/queue-2.6.34/parisc-pass-through-t-to-early-iodc-console.patch
new file mode 100644 (file)
index 0000000..4d7f9a9
--- /dev/null
@@ -0,0 +1,56 @@
+From d9b68e5e88248bb24fd4e455588bea1d56108fd6 Mon Sep 17 00:00:00 2001
+From: Kyle McMartin <kyle@mcmartin.ca>
+Date: Tue, 3 Aug 2010 20:38:08 -0400
+Subject: parisc: pass through '\t' to early (iodc) console
+
+From: Kyle McMartin <kyle@mcmartin.ca>
+
+commit d9b68e5e88248bb24fd4e455588bea1d56108fd6 upstream.
+
+The firmware handles '\t' internally, so stop trying to emulate it
+(which, incidentally, had a bug in it.)
+
+Fixes a really weird hang at bootup in rcu_bootup_announce, which,
+as far as I can tell, is the first printk in the core kernel to use
+a tab as the first character.
+
+Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/parisc/kernel/firmware.c |   12 ++----------
+ 1 file changed, 2 insertions(+), 10 deletions(-)
+
+--- a/arch/parisc/kernel/firmware.c
++++ b/arch/parisc/kernel/firmware.c
+@@ -1123,7 +1123,6 @@ static char __attribute__((aligned(64)))
+  */
+ int pdc_iodc_print(const unsigned char *str, unsigned count)
+ {
+-      static int posx;        /* for simple TAB-Simulation... */
+       unsigned int i;
+       unsigned long flags;
+@@ -1133,19 +1132,12 @@ int pdc_iodc_print(const unsigned char *
+                       iodc_dbuf[i+0] = '\r';
+                       iodc_dbuf[i+1] = '\n';
+                       i += 2;
+-                      posx = 0;
+                       goto print;
+-              case '\t':
+-                      while (posx & 7) {
+-                              iodc_dbuf[i] = ' ';
+-                              i++, posx++;
+-                      }
+-                      break;
+               case '\b':      /* BS */
+-                      posx -= 2;
++                      i--; /* overwrite last */
+               default:
+                       iodc_dbuf[i] = str[i];
+-                      i++, posx++;
++                      i++;
+                       break;
+               }
+       }
index b7c312da1e605c82b166fd7b7e4a2c5940bc9bcb..b903d5f2b9394c52ff4a7c75036f1bf11738ac5e 100644 (file)
@@ -4,3 +4,20 @@ nfs-fix-a-typo-in-include-linux-nfs_fs.h.patch
 comedi-uncripple-8255-based-dio-subdevices.patch
 parisc-led.c-fix-potential-stack-overflow-in-led_proc_write.patch
 arm-imx-gpio-add-spinlock-protection.patch
+parisc-pass-through-t-to-early-iodc-console.patch
+amd64_edac-fix-dct-base-address-selector.patch
+amd64_edac-correct-scrub-rate-setting.patch
+amd64_edac-fix-operator-precendence-error.patch
+e1000e-don-t-inadvertently-re-set-intx_disable.patch
+e1000e-82577-82578-phy-register-access-issues.patch
+9p-strlen-doesn-t-count-the-terminator.patch
+igb-use-only-a-single-tx-queue-in-sr-iov-mode.patch
+ath9k-enable-serialize_regmode-for-non-pcie-ar9160.patch
+ath9k-fix-a-potential-buffer-leak-in-the-sta-teardown-path.patch
+ath9k_hw-fix-an-off-by-one-error-in-the-pdadc-boundaries-calculation.patch
+ath9k-fix-tsf-after-reset-on-ar913x.patch
+ath9k-fix-yet-another-buffer-leak-in-the-tx-aggregation-code.patch
+iwlwifi-fix-scan-abort.patch
+cfg80211-ignore-spurious-deauth.patch
+cfg80211-don-t-get-expired-bsses.patch
+mac80211-avoid-scheduling-while-atomic-in-mesh_rx_plink_frame.patch