OSDN Git Service

scsi: aacraid: change event_wait to a completion
authorArnd Bergmann <arnd@arndb.de>
Mon, 10 Dec 2018 21:32:41 +0000 (22:32 +0100)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 13 Dec 2018 01:35:33 +0000 (20:35 -0500)
The event_wait semaphore has completion semantics, so we can
change it over to the completion interface for clarity without
changing the behavior.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: Dave Carroll <david.carroll@microsemi.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/aacraid/aacraid.h
drivers/scsi/aacraid/commctrl.c
drivers/scsi/aacraid/commsup.c
drivers/scsi/aacraid/dpcsup.c
drivers/scsi/aacraid/linit.c
drivers/scsi/aacraid/src.c

index 531a0b9..3291d1c 100644 (file)
@@ -40,6 +40,7 @@
 #define nblank(x) _nblank(x)[0]
 
 #include <linux/interrupt.h>
+#include <linux/completion.h>
 #include <linux/pci.h>
 #include <scsi/scsi_host.h>
 
@@ -1313,7 +1314,7 @@ struct fib {
         *      This is the event the sendfib routine will wait on if the
         *      caller did not pass one and this is synch io.
         */
-       struct semaphore        event_wait;
+       struct completion       event_wait;
        spinlock_t              event_lock;
 
        u32                     done;   /* gets set to 1 when fib is complete */
index 6a6ad94..e2899ff 100644 (file)
@@ -41,7 +41,6 @@
 #include <linux/blkdev.h>
 #include <linux/delay.h> /* ssleep prototype */
 #include <linux/kthread.h>
-#include <linux/semaphore.h>
 #include <linux/uaccess.h>
 #include <scsi/scsi_host.h>
 
index 7ed51a7..d5a6aa9 100644 (file)
@@ -44,7 +44,6 @@
 #include <linux/delay.h>
 #include <linux/kthread.h>
 #include <linux/interrupt.h>
-#include <linux/semaphore.h>
 #include <linux/bcd.h>
 #include <scsi/scsi.h>
 #include <scsi/scsi_host.h>
@@ -189,7 +188,7 @@ int aac_fib_setup(struct aac_dev * dev)
                fibptr->hw_fib_va = hw_fib;
                fibptr->data = (void *) fibptr->hw_fib_va->data;
                fibptr->next = fibptr+1;        /* Forward chain the fibs */
-               sema_init(&fibptr->event_wait, 0);
+               init_completion(&fibptr->event_wait);
                spin_lock_init(&fibptr->event_lock);
                hw_fib->header.XferState = cpu_to_le32(0xffffffff);
                hw_fib->header.SenderSize =
@@ -623,7 +622,7 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size,
                }
                if (wait) {
                        fibptr->flags |= FIB_CONTEXT_FLAG_WAIT;
-                       if (down_interruptible(&fibptr->event_wait)) {
+                       if (wait_for_completion_interruptible(&fibptr->event_wait)) {
                                fibptr->flags &= ~FIB_CONTEXT_FLAG_WAIT;
                                return -EFAULT;
                        }
@@ -659,7 +658,7 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size,
                         * hardware failure has occurred.
                         */
                        unsigned long timeout = jiffies + (180 * HZ); /* 3 minutes */
-                       while (down_trylock(&fibptr->event_wait)) {
+                       while (!try_wait_for_completion(&fibptr->event_wait)) {
                                int blink;
                                if (time_is_before_eq_jiffies(timeout)) {
                                        struct aac_queue * q = &dev->queues->queue[AdapNormCmdQueue];
@@ -689,9 +688,9 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size,
                                 */
                                schedule();
                        }
-               } else if (down_interruptible(&fibptr->event_wait)) {
+               } else if (wait_for_completion_interruptible(&fibptr->event_wait)) {
                        /* Do nothing ... satisfy
-                        * down_interruptible must_check */
+                        * wait_for_completion_interruptible must_check */
                }
 
                spin_lock_irqsave(&fibptr->event_lock, flags);
@@ -777,7 +776,7 @@ int aac_hba_send(u8 command, struct fib *fibptr, fib_callback callback,
                        return -EFAULT;
 
                fibptr->flags |= FIB_CONTEXT_FLAG_WAIT;
-               if (down_interruptible(&fibptr->event_wait))
+               if (wait_for_completion_interruptible(&fibptr->event_wait))
                        fibptr->done = 2;
                fibptr->flags &= ~(FIB_CONTEXT_FLAG_WAIT);
 
@@ -1538,7 +1537,7 @@ static int _aac_reset_adapter(struct aac_dev *aac, int forced, u8 reset_type)
                  || fib->flags & FIB_CONTEXT_FLAG_WAIT) {
                        unsigned long flagv;
                        spin_lock_irqsave(&fib->event_lock, flagv);
-                       up(&fib->event_wait);
+                       complete(&fib->event_wait);
                        spin_unlock_irqrestore(&fib->event_lock, flagv);
                        schedule();
                        retval = 0;
index ddc6973..40a771d 100644 (file)
@@ -38,7 +38,6 @@
 #include <linux/slab.h>
 #include <linux/completion.h>
 #include <linux/blkdev.h>
-#include <linux/semaphore.h>
 
 #include "aacraid.h"
 
@@ -129,7 +128,7 @@ unsigned int aac_response_normal(struct aac_queue * q)
                        spin_lock_irqsave(&fib->event_lock, flagv);
                        if (!fib->done) {
                                fib->done = 1;
-                               up(&fib->event_wait);
+                               complete(&fib->event_wait);
                        }
                        spin_unlock_irqrestore(&fib->event_lock, flagv);
 
@@ -376,16 +375,16 @@ unsigned int aac_intr_normal(struct aac_dev *dev, u32 index, int isAif,
                                start_callback = 1;
                        } else {
                                unsigned long flagv;
-                               int complete = 0;
+                               int completed = 0;
 
                                dprintk((KERN_INFO "event_wait up\n"));
                                spin_lock_irqsave(&fib->event_lock, flagv);
                                if (fib->done == 2) {
                                        fib->done = 1;
-                                       complete = 1;
+                                       completed = 1;
                                } else {
                                        fib->done = 1;
-                                       up(&fib->event_wait);
+                                       complete(&fib->event_wait);
                                }
                                spin_unlock_irqrestore(&fib->event_lock, flagv);
 
@@ -395,7 +394,7 @@ unsigned int aac_intr_normal(struct aac_dev *dev, u32 index, int isAif,
                                        mflags);
 
                                FIB_COUNTER_INCREMENT(aac_config.NativeRecved);
-                               if (complete)
+                               if (completed)
                                        aac_fib_complete(fib);
                        }
                } else {
@@ -428,16 +427,16 @@ unsigned int aac_intr_normal(struct aac_dev *dev, u32 index, int isAif,
                                start_callback = 1;
                        } else {
                                unsigned long flagv;
-                               int complete = 0;
+                               int completed = 0;
 
                                dprintk((KERN_INFO "event_wait up\n"));
                                spin_lock_irqsave(&fib->event_lock, flagv);
                                if (fib->done == 2) {
                                        fib->done = 1;
-                                       complete = 1;
+                                       completed = 1;
                                } else {
                                        fib->done = 1;
-                                       up(&fib->event_wait);
+                                       complete(&fib->event_wait);
                                }
                                spin_unlock_irqrestore(&fib->event_lock, flagv);
 
@@ -447,7 +446,7 @@ unsigned int aac_intr_normal(struct aac_dev *dev, u32 index, int isAif,
                                        mflags);
 
                                FIB_COUNTER_INCREMENT(aac_config.NormalRecved);
-                               if (complete)
+                               if (completed)
                                        aac_fib_complete(fib);
                        }
                }
index 42defee..1c5d54c 100644 (file)
@@ -1560,7 +1560,7 @@ static void __aac_shutdown(struct aac_dev * aac)
                        struct fib *fib = &aac->fibs[i];
                        if (!(fib->hw_fib_va->header.XferState & cpu_to_le32(NoResponseExpected | Async)) &&
                            (fib->hw_fib_va->header.XferState & cpu_to_le32(ResponseExpected)))
-                               up(&fib->event_wait);
+                               complete(&fib->event_wait);
                }
                kthread_stop(aac->thread);
                aac->thread = NULL;
index 7a51ccf..8377aec 100644 (file)
@@ -106,7 +106,7 @@ static irqreturn_t aac_src_intr_message(int irq, void *dev_id)
                        spin_lock_irqsave(&dev->sync_fib->event_lock, sflags);
                        if (dev->sync_fib->flags & FIB_CONTEXT_FLAG_WAIT) {
                                dev->management_fib_count--;
-                               up(&dev->sync_fib->event_wait);
+                               complete(&dev->sync_fib->event_wait);
                        }
                        spin_unlock_irqrestore(&dev->sync_fib->event_lock,
                                                sflags);