]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
bcm43xx patch (plus couple minor format cleanups)
authorChris Wright <chrisw@sous-sol.org>
Mon, 6 Nov 2006 03:18:41 +0000 (19:18 -0800)
committerChris Wright <chrisw@sous-sol.org>
Mon, 6 Nov 2006 03:18:41 +0000 (19:18 -0800)
queue-2.6.18/bcm43xx-drain-tx-status-before-starting-irqs.patch [new file with mode: 0644]
queue-2.6.18/series
queue-2.6.18/sparc-fix-missed-bump-of-nr_syscalls.patch
queue-2.6.18/sparc64-fix-futex_atomic_cmpxchg_inatomic-implementation.patch

diff --git a/queue-2.6.18/bcm43xx-drain-tx-status-before-starting-irqs.patch b/queue-2.6.18/bcm43xx-drain-tx-status-before-starting-irqs.patch
new file mode 100644 (file)
index 0000000..87fa885
--- /dev/null
@@ -0,0 +1,57 @@
+From stable-bounces@linux.kernel.org  Sun Nov  5 13:38:59 2006
+Date: Sun, 05 Nov 2006 15:34:36 -0600
+From: Larry Finger <Larry.Finger@lwfinger.net>
+To: stable@kernel.org
+Message-ID: <454E58EC.mail20S110EOC@lwfinger.net>
+Cc: netdev@vger.kernel.org, mb@bu3sch.de, greg@kroah.com
+Subject: bcm43xx: Drain TX status before starting IRQs
+
+From: Michael Buesch <mb@bu3sch.de>
+
+Drain the Microcode TX-status-FIFO before we enable IRQs.
+This is required, because the FIFO may still have entries left
+from a previous run. Those would immediately fire after enabling
+IRQs and would lead to an oops in the DMA TXstatus handling code.
+
+Cc: "John W. Linville" <linville@tuxdriver.com>
+Signed-off-by: Michael Buesch <mb@bu3sch.de>
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ drivers/net/wireless/bcm43xx/bcm43xx_main.c |   18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+--- linux-2.6.18.2.orig/drivers/net/wireless/bcm43xx/bcm43xx_main.c
++++ linux-2.6.18.2/drivers/net/wireless/bcm43xx/bcm43xx_main.c
+@@ -1463,6 +1463,23 @@ static void handle_irq_transmit_status(s
+       }
+ }
++static void drain_txstatus_queue(struct bcm43xx_private *bcm)
++{
++      u32 dummy;
++
++      if (bcm->current_core->rev < 5)
++              return;
++      /* Read all entries from the microcode TXstatus FIFO
++       * and throw them away.
++       */
++      while (1) {
++              dummy = bcm43xx_read32(bcm, BCM43xx_MMIO_XMITSTAT_0);
++              if (!dummy)
++                      break;
++              dummy = bcm43xx_read32(bcm, BCM43xx_MMIO_XMITSTAT_1);
++      }
++}
++
+ static void bcm43xx_generate_noise_sample(struct bcm43xx_private *bcm)
+ {
+       bcm43xx_shm_write16(bcm, BCM43xx_SHM_SHARED, 0x408, 0x7F7F);
+@@ -3517,6 +3534,7 @@ int bcm43xx_select_wireless_core(struct 
+       bcm43xx_macfilter_clear(bcm, BCM43xx_MACFILTER_ASSOC);
+       bcm43xx_macfilter_set(bcm, BCM43xx_MACFILTER_SELF, (u8 *)(bcm->net_dev->dev_addr));
+       bcm43xx_security_init(bcm);
++      drain_txstatus_queue(bcm);
+       ieee80211softmac_start(bcm->net_dev);
+       /* Let's go! Be careful after enabling the IRQs.
index ffeaff99b3f3a78841c56ded28d95a9cc37bc7c8..2274ea56756cf1279c23176c4cbe71e5c5ec9e6d 100644 (file)
@@ -4,3 +4,4 @@ sparc64-fix-futex_atomic_cmpxchg_inatomic-implementation.patch
 fix-sys_move_pages-when-a-null-node-list-is-passed.patch
 splice-fix-problem-introduced-with-inode-diet.patch
 sparc-fix-missed-bump-of-nr_syscalls.patch
+bcm43xx-drain-tx-status-before-starting-irqs.patch
index 27ae9055c71ede265ff0817b8b13353a3fff55d0..77304cc3227bff398167bdfe89b2736f4d08e54e 100644 (file)
@@ -12,8 +12,6 @@ unlikely to ever happen again.
 
 Signed-off-by: David S. Miller <davem@davemloft.net>
 Signed-off-by: Chris Wright <chrisw@sous-sol.org>
----
-
 ---
  arch/sparc/kernel/entry.S    |    3 +--
  arch/sparc64/kernel/entry.S  |    3 +--
index 8ea9908e2025eab56c2c078af1d44b7a22d1c680..23831004180ca1c804e748d3c46a42e20cfd2e5b 100644 (file)
@@ -13,8 +13,6 @@ Based upon bug reports from Dennis Gilmore and Fabio Massimo.
 
 Signed-off-by: David S. Miller <davem@davemloft.net>
 Signed-off-by: Chris Wright <chrisw@sous-sol.org>
----
-
 ---
  include/asm-sparc64/futex.h |   18 ++++++++----------
  1 file changed, 8 insertions(+), 10 deletions(-)