From e9d0a1b16b5a57b18988a5a5e81f4a1e510bd09c Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Thu, 13 Dec 2007 21:48:00 -0500 Subject: [PATCH] --- yaml --- r: 79220 b: refs/heads/master c: d9f88705a7ce2f9ef13d6656ee715493a663edfc h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/net/wireless/libertas/main.c | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index a1d8063376a9..18122d522d06 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4ad36d780caf34630d1a4cc39f9bc11017f5b81d +refs/heads/master: d9f88705a7ce2f9ef13d6656ee715493a663edfc diff --git a/trunk/drivers/net/wireless/libertas/main.c b/trunk/drivers/net/wireless/libertas/main.c index 5d2bf539d4b9..b51513fb59ec 100644 --- a/trunk/drivers/net/wireless/libertas/main.c +++ b/trunk/drivers/net/wireless/libertas/main.c @@ -662,8 +662,10 @@ static int lbs_thread(void *data) set_current_state(TASK_INTERRUPTIBLE); spin_lock_irq(&priv->driver_lock); - if (priv->surpriseremoved) + if (kthread_should_stop()) shouldsleep = 0; /* Bye */ + else if (priv->surpriseremoved) + shouldsleep = 1; /* We need to wait until we're _told_ to die */ else if (priv->psstate == PS_STATE_SLEEP) shouldsleep = 1; /* Sleep mode. Nothing we can do till it wakes */ else if (priv->intcounter) @@ -699,12 +701,15 @@ static int lbs_thread(void *data) lbs_deb_thread("main-thread 333: intcounter=%d currenttxskb=%p dnld_sent=%d\n", priv->intcounter, priv->currenttxskb, priv->dnld_sent); - if (kthread_should_stop() || priv->surpriseremoved) { - lbs_deb_thread("main-thread: break from main thread: surpriseremoved=0x%x\n", - priv->surpriseremoved); + if (kthread_should_stop()) { + lbs_deb_thread("main-thread: break from main thread\n"); break; } + if (priv->surpriseremoved) { + lbs_deb_thread("adapter removed; waiting to die...\n"); + continue; + } spin_lock_irq(&priv->driver_lock);