linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 2/2 V2] b43legacy: Fix locking problem
@ 2009-05-15 20:39 Larry Finger
  2009-05-18 20:03 ` John W. Linville
  0 siblings, 1 reply; 4+ messages in thread
From: Larry Finger @ 2009-05-15 20:39 UTC (permalink / raw)
  To: John Linville; +Cc: Stefano Brivio, Michael Buesch, wireless, Broadcom Linux

Commit abb1d2bca0fc429c136747a64e675dd4d8906f36 introduced a locking
problem in b43legacy that caused the system to freeze upon booting.

Signed-off-by: Larry Finger@lwfinger.net
---

John,

This is 2.6.31 material. I hope that you do not have trouble with
this patch. While on the road, my normal method is not available.

This is resent as V2 to eliminate some patch offsets that resulted
from the changes in V2 of patch 1.

Larry
---

 main.c |   25 ++++---------------------
 1 file changed, 4 insertions(+), 21 deletions(-)

Index: wireless-testing/drivers/net/wireless/b43legacy/main.c
===================================================================
--- wireless-testing.orig/drivers/net/wireless/b43legacy/main.c
+++ wireless-testing/drivers/net/wireless/b43legacy/main.c
@@ -2767,29 +2767,18 @@ static void b43legacy_op_bss_info_change
 {
 	struct b43legacy_wl *wl = hw_to_b43legacy_wl(hw);
 	struct b43legacy_wldev *dev;
-	struct b43legacy_phy *phy;
 	unsigned long flags;

 	mutex_lock(&wl->mutex);
-	B43legacy_WARN_ON(wl->vif != vif);

 	dev = wl->current_dev;
-	phy = &dev->phy;
-
-	/* Disable IRQs while reconfiguring the device.
-	 * This makes it possible to drop the spinlock throughout
-	 * the reconfiguration process. */
-	spin_lock_irqsave(&wl->irq_lock, flags);
-	if (b43legacy_status(dev) < B43legacy_STAT_STARTED) {
-		spin_unlock_irqrestore(&wl->irq_lock, flags);
+	if (!dev || b43legacy_status(dev) < B43legacy_STAT_STARTED)
 		goto out_unlock_mutex;
-	}
-	b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_MASK, 0);

-	if (changed & BSS_CHANGED_BSSID) {
-		spin_unlock_irqrestore(&wl->irq_lock, flags);
-		b43legacy_synchronize_irq(dev);
+	B43legacy_WARN_ON(wl->vif != vif);

+	if (changed & BSS_CHANGED_BSSID) {
+		spin_lock_irqsave(&wl->irq_lock, flags);
 		if (conf->bssid)
 			memcpy(wl->bssid, conf->bssid, ETH_ALEN);
 		else
@@ -2827,12 +2816,6 @@ static void b43legacy_op_bss_info_change
 	}

 	b43legacy_mac_enable(dev);
-
-	spin_lock_irqsave(&wl->irq_lock, flags);
-	b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_MASK, dev->irq_mask);
-	/* XXX: why? */
-	mmiowb();
-	spin_unlock_irqrestore(&wl->irq_lock, flags);
  out_unlock_mutex:
 	mutex_unlock(&wl->mutex);
 }




^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2009-05-19 14:32 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-15 20:39 [PATCH 2/2 V2] b43legacy: Fix locking problem Larry Finger
2009-05-18 20:03 ` John W. Linville
2009-05-19  3:33   ` Larry Finger
     [not found]     ` <200905191452419680632@temobi.com>
2009-05-19 14:32       ` Larry Finger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).