staging: wilc1000: replace semaphore sem_inactive_time with a completion
authorAlison Schofield <amsfield22@gmail.com>
Mon, 14 Mar 2016 17:34:14 +0000 (10:34 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 28 Mar 2016 14:30:36 +0000 (07:30 -0700)
Semaphore sem_inactive_time is used to signal completion of its host
interface message. Since the thread locking this semaphore will have
to wait, completions are the preferred mechanism and will offer a
performance improvement.

Signed-off-by: Alison Schofield <amsfield22@gmail.com>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Tested-by: Leo Kim <leo.kim@atmel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/wilc1000/host_interface.c
drivers/staging/wilc1000/host_interface.h

index e73ee89cf6d43c8c5cc80df896dff353ac3a983b..2f14370b3ecc7c5db903ad32c9785ed37533ea2e 100644 (file)
@@ -2,6 +2,7 @@
 #include <linux/time.h>
 #include <linux/kthread.h>
 #include <linux/delay.h>
+#include <linux/completion.h>
 #include "host_interface.h"
 #include "coreconfigurator.h"
 #include "wilc_wlan.h"
@@ -1979,7 +1980,7 @@ static s32 Handle_Get_InActiveTime(struct wilc_vif *vif,
                return -EFAULT;
        }
 
-       up(&hif_drv->sem_inactive_time);
+       complete(&hif_drv->comp_inactive_time);
 
        return result;
 }
@@ -3220,7 +3221,7 @@ s32 wilc_get_inactive_time(struct wilc_vif *vif, const u8 *mac,
        if (result)
                netdev_err(vif->ndev, "Failed to send get host ch param\n");
 
-       down(&hif_drv->sem_inactive_time);
+       wait_for_completion(&hif_drv->comp_inactive_time);
 
        *pu32InactiveTime = inactive_time;
 
@@ -3407,7 +3408,7 @@ int wilc_init(struct net_device *dev, struct host_if_drv **hif_drv_handler)
        sema_init(&hif_drv->sem_test_key_block, 0);
        sema_init(&hif_drv->sem_test_disconn_block, 0);
        sema_init(&hif_drv->sem_get_rssi, 0);
-       sema_init(&hif_drv->sem_inactive_time, 0);
+       init_completion(&hif_drv->comp_inactive_time);
 
        if (clients_count == 0) {
                result = wilc_mq_create(&hif_msg_q);
index 01f3222a423142310b0cda1b531e8b2627c221b4..68852b3404d2a70dc9d453f9576d6c37c2b67b8e 100644 (file)
@@ -278,7 +278,7 @@ struct host_if_drv {
        struct semaphore sem_test_key_block;
        struct semaphore sem_test_disconn_block;
        struct semaphore sem_get_rssi;
-       struct semaphore sem_inactive_time;
+       struct completion comp_inactive_time;
 
        struct timer_list scan_timer;
        struct timer_list connect_timer;