> From: [EMAIL PROTECTED]> To: [EMAIL PROTECTED]> Subject: [PATCH] b43: Fix
> rfkill callback deadlock> Date: Sun, 28 Oct 2007 17:27:10 +0100> CC: [EMAIL
> PROTECTED]; bcm43xx-dev@lists.berlios.de; [EMAIL PROTECTED]> > wl->mutex
> might already be locked on initialization.> > Signed-off-by: Michael Buesch
> <[EMAIL PROTECTED]>> > Index: wireless-2.6/drivers/net/wireless/b43/rfkill.c>
> ===================================================================> ---
> wireless-2.6.orig/drivers/net/wireless/b43/rfkill.c 2007-10-27
> 13:28:16.000000000 +0200> +++ wireless-2.6/drivers/net/wireless/b43/rfkill.c
> 2007-10-28 17:13:55.000000000 +0100> @@ -61,15 +61,22 @@ static void
> b43_rfkill_poll(struct input> mutex_unlock(&wl->mutex);> }> > -/* Called when
> the RFKILL toggled in software.> - * This is called without locking. */> +/*
> Called when the RFKILL toggled in software. */> static int
> b43_rfkill_soft_toggle(void *data, enum rfkill_state state)> {> struct
> b43_wldev *dev = data;> struct b43_wl *wl = dev->wl;> int err = 0;> > -
> mutex_lock(&wl->mutex);> + /* When RFKILL is registered, it will call back
> into this callback.> + * wl->mutex will already be locked when this happens.>
> + * So first trylock. On contention check if we are in initialization.> + *
> Silently return if that happens to avoid a deadlock. */> + if
> (mutex_trylock(&wl->mutex) == 0) {> + if (b43_status(dev) <
> B43_STAT_INITIALIZED)> + return 0;> + mutex_lock(&wl->mutex);> + }> if
> (b43_status(dev) < B43_STAT_INITIALIZED)> goto out_unlock;
Why not replace the above lines up to and including "- mutex_loc(&wl->mutext);"
with:
if(b43_status(dev) < B43_STAT_INITIALIZED)
return 0;
mutex_lock(&wl->mutex)> > @@ -89,7 +96,6 @@ static int
b43_rfkill_soft_toggle(void *> b43_radio_turn_off(dev, 0);> break;> }> ->
out_unlock:> mutex_unlock(&wl->mutex);> >
_______________________________________________> Bcm43xx-dev mailing list>
Bcm43xx-dev@lists.berlios.de>
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
_________________________________________________________________
Boo! Scare away worms, viruses and so much more! Try Windows Live OneCare!
http://onecare.live.com/standard/en-us/purchase/trial.aspx?s_cid=wl_hotmailnews
_______________________________________________
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev