diff options
author | Finn Thain <fthain@telegraphics.com.au> | 2016-01-03 08:05:37 +0300 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2016-01-07 05:42:59 +0300 |
commit | 8d8601a757688386e914b922cc267a9244e0fdc9 (patch) | |
tree | f92f9fa36f61508ebbb13bbc7a35841e4a4262d8 /drivers/scsi | |
parent | 401e79fe8d9f0151ad99e6fd7c1bd2e178c84d25 (diff) | |
download | linux-8d8601a757688386e914b922cc267a9244e0fdc9.tar.xz |
ncr5380: Use work_struct instead of delayed_work
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>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/NCR5380.c | 12 | ||||
-rw-r--r-- | drivers/scsi/NCR5380.h | 1 |
2 files changed, 5 insertions, 8 deletions
diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c index a64b298eeb55..8ff59509585c 100644 --- a/drivers/scsi/NCR5380.c +++ b/drivers/scsi/NCR5380.c @@ -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; } diff --git a/drivers/scsi/NCR5380.h b/drivers/scsi/NCR5380.h index 9b7d7671d123..7ffcb0c33a22 100644 --- a/drivers/scsi/NCR5380.h +++ b/drivers/scsi/NCR5380.h @@ -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 |