ncr5380: Use work_struct instead of delayed_work
authorFinn Thain <fthain@telegraphics.com.au>
Sun, 3 Jan 2016 05:05:37 +0000 (16:05 +1100)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 7 Jan 2016 02:42:59 +0000 (21:42 -0500)
Each host instance now has it's own work queue so the main() work item can
sleep when necessary. That means we can use a simple work item rather than
a delayed work item. This brings NCR5380.c closer to atari_NCR5380.c.

Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Tested-by: Ondrej Zary <linux@rainbow-software.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/NCR5380.c
drivers/scsi/NCR5380.h

index a64b298eeb559eed1418b728f96277bf14ea3935..8ff59509585cde89a3edf00b1462d2aaa4639e98 100644 (file)
@@ -697,7 +697,7 @@ static int NCR5380_init(struct Scsi_Host *instance, int flags)
        hostdata->issue_queue = NULL;
        hostdata->disconnected_queue = NULL;
        
-       INIT_DELAYED_WORK(&hostdata->coroutine, NCR5380_main);
+       INIT_WORK(&hostdata->main_task, NCR5380_main);
        hostdata->work_q = alloc_workqueue("ncr5380_%d",
                                WQ_UNBOUND | WQ_MEM_RECLAIM,
                                1, instance->host_no);
@@ -797,7 +797,7 @@ static void NCR5380_exit(struct Scsi_Host *instance)
 {
        struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
 
-       cancel_delayed_work_sync(&hostdata->coroutine);
+       cancel_work_sync(&hostdata->main_task);
        destroy_workqueue(hostdata->work_q);
 }
 
@@ -859,9 +859,8 @@ static int NCR5380_queue_command(struct Scsi_Host *instance,
 
        dprintk(NDEBUG_QUEUES, "scsi%d : command added to %s of queue\n", instance->host_no, (cmd->cmnd[0] == REQUEST_SENSE) ? "head" : "tail");
 
-       /* Run the coroutine if it isn't already running. */
        /* Kick off command processing */
-       queue_delayed_work(hostdata->work_q, &hostdata->coroutine, 0);
+       queue_work(hostdata->work_q, &hostdata->main_task);
        return 0;
 }
 
@@ -880,7 +879,7 @@ static int NCR5380_queue_command(struct Scsi_Host *instance,
 static void NCR5380_main(struct work_struct *work)
 {
        struct NCR5380_hostdata *hostdata =
-               container_of(work, struct NCR5380_hostdata, coroutine.work);
+               container_of(work, struct NCR5380_hostdata, main_task);
        struct Scsi_Host *instance = hostdata->host;
        struct scsi_cmnd *tmp, *prev;
        int done;
@@ -1037,8 +1036,7 @@ static irqreturn_t NCR5380_intr(int dummy, void *dev_id)
                }       /* if BASR_IRQ */
                spin_unlock_irqrestore(instance->host_lock, flags);
                if(!done)
-                       queue_delayed_work(hostdata->work_q,
-                                          &hostdata->coroutine, 0);
+                       queue_work(hostdata->work_q, &hostdata->main_task);
        } while (!done);
        return IRQ_HANDLED;
 }
index 9b7d7671d123c70de7c607299af2a6027cfb070e..7ffcb0c33a225db766523147f4fa74d040c04a90 100644 (file)
@@ -256,7 +256,6 @@ struct NCR5380_hostdata {
        volatile struct scsi_cmnd *issue_queue; /* waiting to be issued */
        volatile struct scsi_cmnd *disconnected_queue;  /* waiting for reconnect */
        int flags;
-       struct delayed_work coroutine;          /* our co-routine */
        struct scsi_eh_save ses;
        char info[256];
        int read_overruns;                /* number of bytes to cut from a