Hi,

Michael Trimarchi wrote:
>From e477da42a62a7836a0c5e87008e2502572be5e2d Mon Sep 17 00:00:00 2001
From: michael <[email protected]>
Date: Wed, 18 Mar 2009 11:38:36 +0100
Subject: [PATCH] The ioctl wext etc, seems to be broken because they don't take 
any lock
 during shutdown. If the user do an echo to the state variabile of the
 rfkill during the network scanning the system can go in panic. It
 introduces a reference count to the ar priv data and a hw_available
 variable and a new spin lock. If a process has a ioctl pending, the
 shutdown process set the hardware unvailable and wait for pending
 request.

Signed-off-by: Michael Trimarchi <[email protected]>
---
 drivers/ar6000/ar6000/ar6000_drv.c   |   24 ++-
 drivers/ar6000/ar6000/ar6000_drv.h   |   18 ++
 drivers/ar6000/ar6000/wireless_ext.c |  492 ++++++++++++++++++++++++++--------
 3 files changed, 413 insertions(+), 121 deletions(-)

diff --git a/drivers/ar6000/ar6000/ar6000_drv.c 
b/drivers/ar6000/ar6000/ar6000_drv.c
index 8165576..df3a399 100644
--- a/drivers/ar6000/ar6000/ar6000_drv.c
+++ b/drivers/ar6000/ar6000/ar6000_drv.c
@@ -854,6 +854,9 @@ ar6000_avail_ev(HTC_HANDLE HTCHandle)
     }
spin_lock_init(&ar->arLock);
+    spin_lock_init(&ar->arUsed);
+    atomic_set(&ar->refcnt, 0);
+    ar->hw_available = 1;
/* Don't install the init function if BMI is requested */
     if(!bmienable)
@@ -940,7 +943,18 @@ static void
 ar6000_unavail_ev(void *Instance)
 {
     AR_SOFTC_T *ar = (AR_SOFTC_T *)Instance;
-        /* NULL out it's entry in the global list */
+    /* NULL out it's entry in the global list */
+retry:
+    spin_lock(&ar->arUsed);
+    ar->hw_available = 0;
+    BUG_ON(atomic_read(&ar->refcnt) < 0);
+    if (atomic_read(&ar->refcnt) > 0) {
+        cpu_relax();
+        spin_unlock(&ar->arUsed);
+        goto retry;
+    }
+    spin_unlock(&ar->arUsed);
+
I must fix this one, the lock is not necessary. :(, I use and atomic variable here. This patch is an rfc one, and I write this morning, sorry if there is some mistakes.

Michael


Reply via email to