staging: wilc1000: txq_thread_started: replaces a semaphore with a completion
authorLeo Kim <leo.kim@atmel.com>
Fri, 1 Apr 2016 08:44:15 +0000 (17:44 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 29 Apr 2016 04:58:42 +0000 (21:58 -0700)
This patch replaces a semaphore(txq_thread_started) with a completion.
Struct semaphore txq_thread_started is used to signal completion of txq thread.
It is better to use completion than semaphore for this case.

Signed-off-by: Leo Kim <leo.kim@atmel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/wilc1000/linux_wlan.c
drivers/staging/wilc1000/wilc_wfi_netdevice.h

index a858552737b6217a76d16ba24ab0a1b199cc6c47..2ed2bf32f7893bc833ab1fd37f94715967409bce 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/skbuff.h>
 
 #include <linux/semaphore.h>
+#include <linux/completion.h>
 
 static int dev_state_ev_handler(struct notifier_block *this,
                                unsigned long event, void *ptr);
@@ -313,12 +314,12 @@ static int linux_wlan_txq_task(void *vp)
        vif = netdev_priv(dev);
        wl = vif->wilc;
 
-       up(&wl->txq_thread_started);
+       complete(&wl->txq_thread_started);
        while (1) {
                down(&wl->txq_event);
 
                if (wl->close) {
-                       up(&wl->txq_thread_started);
+                       complete(&wl->txq_thread_started);
 
                        while (!kthread_should_stop())
                                schedule();
@@ -693,8 +694,7 @@ static int wlan_init_locks(struct net_device *dev)
 
        sema_init(&wl->cfg_event, 0);
        sema_init(&wl->sync_event, 0);
-
-       sema_init(&wl->txq_thread_started, 0);
+       init_completion(&wl->txq_thread_started);
 
        return 0;
 }
@@ -731,7 +731,7 @@ static int wlan_initialize_threads(struct net_device *dev)
                wilc->close = 0;
                return -ENOBUFS;
        }
-       down(&wilc->txq_thread_started);
+       wait_for_completion(&wilc->txq_thread_started);
 
        return 0;
 }
index 3d0ca8e3ae24472c116b03774957824ea6796501..3a561df6d370b896a06b689de801ee7bba78ec01 100644 (file)
@@ -179,8 +179,7 @@ struct wilc {
        struct semaphore cfg_event;
        struct semaphore sync_event;
        struct semaphore txq_event;
-
-       struct semaphore txq_thread_started;
+       struct completion txq_thread_started;
 
        struct task_struct *txq_thread;