DAC960: remove sleep_on usage
authorArnd Bergmann <arnd@arndb.de>
Wed, 26 Feb 2014 11:01:43 +0000 (12:01 +0100)
committerJens Axboe <axboe@fb.com>
Thu, 13 Mar 2014 20:56:38 +0000 (14:56 -0600)
sleep_on and its variants are going away. The use of sleep_on() in
DAC960_V2_ExecuteUserCommand seems to be bogus because the command
by the time we get there, the command has completed already and
we just enter the timeout. Based on this interpretation, I concluded
that we can replace it with a simple msleep(1000) and rearrange the
code around it slightly.

The interruptible_sleep_on_timeout in DAC960_gam_ioctl seems equivalent
to the race-free version using wait_event_interruptible_timeout.
I left the driver to return -EINTR rather than -ERESTARTSYS to preserve
the timeout behavior.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/block/DAC960.c

index eb39501..125d845 100644 (file)
@@ -6411,12 +6411,12 @@ static bool DAC960_V2_ExecuteUserCommand(DAC960_Controller_T *Controller,
                                        .ScatterGatherSegments[0]
                                        .SegmentByteCount =
            CommandMailbox->ControllerInfo.DataTransferSize;
-         DAC960_ExecuteCommand(Command);
-         while (Controller->V2.NewControllerInformation->PhysicalScanActive)
-           {
-             DAC960_ExecuteCommand(Command);
-             sleep_on_timeout(&Controller->CommandWaitQueue, HZ);
-           }
+         while (1) {
+           DAC960_ExecuteCommand(Command);
+           if (!Controller->V2.NewControllerInformation->PhysicalScanActive)
+               break;
+           msleep(1000);
+         }
          DAC960_UserCritical("Discovery Completed\n", Controller);
        }
     }
@@ -7035,18 +7035,16 @@ static long DAC960_gam_ioctl(struct file *file, unsigned int Request,
                ErrorCode = -EFAULT;
                break;
        }
-       while (Controller->V2.HealthStatusBuffer->StatusChangeCounter
-              == HealthStatusBuffer.StatusChangeCounter &&
-              Controller->V2.HealthStatusBuffer->NextEventSequenceNumber
-              == HealthStatusBuffer.NextEventSequenceNumber)
-         {
-           interruptible_sleep_on_timeout(&Controller->HealthStatusWaitQueue,
-                                          DAC960_MonitoringTimerInterval);
-           if (signal_pending(current)) {
-               ErrorCode = -EINTR;
-               break;
-           }
-         }
+       ErrorCode = wait_event_interruptible_timeout(Controller->HealthStatusWaitQueue,
+                       !(Controller->V2.HealthStatusBuffer->StatusChangeCounter
+                           == HealthStatusBuffer.StatusChangeCounter &&
+                         Controller->V2.HealthStatusBuffer->NextEventSequenceNumber
+                           == HealthStatusBuffer.NextEventSequenceNumber),
+                       DAC960_MonitoringTimerInterval);
+       if (ErrorCode == -ERESTARTSYS) {
+               ErrorCode = -EINTR;
+               break;
+       }
        if (copy_to_user(GetHealthStatus.HealthStatusBuffer,
                         Controller->V2.HealthStatusBuffer,
                         sizeof(DAC960_V2_HealthStatusBuffer_T)))