net: wireless: bcmdhd: Daemonize wl_event_handler
Dmitry Shmidt [Mon, 30 Jan 2012 21:03:19 +0000 (13:03 -0800)]
Daemonizing makes thread (besides other things) NON-FREEZABLE, and it will not
get fake signal on suspend to quicl down_interruptible()

Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>

drivers/net/wireless/bcmdhd/dhd_linux.c
drivers/net/wireless/bcmdhd/include/linuxver.h
drivers/net/wireless/bcmdhd/wl_cfg80211.c

index c639110..a73d48d 100644 (file)
@@ -361,19 +361,6 @@ char iface_name[IFNAMSIZ] = {'\0'};
 module_param_string(iface_name, iface_name, IFNAMSIZ, 0);
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0))
-#define DAEMONIZE(a) daemonize(a); \
-       allow_signal(SIGKILL); \
-       allow_signal(SIGTERM);
-#else /* Linux 2.4 (w/o preemption patch) */
-#define RAISE_RX_SOFTIRQ() \
-       cpu_raise_softirq(smp_processor_id(), NET_RX_SOFTIRQ)
-#define DAEMONIZE(a) daemonize(); \
-       do { if (a) \
-               strncpy(current->comm, a, MIN(sizeof(current->comm), (strlen(a) + 1))); \
-       } while (0);
-#endif /* LINUX_VERSION_CODE  */
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0))
 #define BLOCKABLE()    (!in_atomic())
 #else
 #define BLOCKABLE()    (!in_interrupt())
index e518982..d269e66 100644 (file)
@@ -511,6 +511,18 @@ typedef struct {
        (tsk_ctl)->thr_pid = -1; \
 }
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0))
+#define DAEMONIZE(a) daemonize(a); \
+       allow_signal(SIGKILL); \
+       allow_signal(SIGTERM);
+#else /* Linux 2.4 (w/o preemption patch) */
+#define RAISE_RX_SOFTIRQ() \
+       cpu_raise_softirq(smp_processor_id(), NET_RX_SOFTIRQ)
+#define DAEMONIZE(a) daemonize(); \
+       do { if (a) \
+               strncpy(current->comm, a, MIN(sizeof(current->comm), (strlen(a) + 1))); \
+       } while (0);
+#endif /* LINUX_VERSION_CODE  */
 
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31))
index 850c724..fea69cf 100644 (file)
@@ -6138,6 +6138,9 @@ static s32 wl_event_handler(void *data)
        tsk_ctl_t *tsk = (tsk_ctl_t *)data;
 
        wl = (struct wl_priv *)tsk->parent;
+
+       DAEMONIZE("wl_event_handler");
+
        complete(&tsk->completed);
 
        while (down_interruptible (&tsk->sema) == 0) {