From 8d8601a757688386e914b922cc267a9244e0fdc9 Mon Sep 17 00:00:00 2001 From: Finn Thain Date: Sun, 3 Jan 2016 16:05:37 +1100 Subject: [PATCH] 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 Reviewed-by: Hannes Reinecke Tested-by: Ondrej Zary Signed-off-by: Martin K. Petersen --- drivers/scsi/NCR5380.c | 12 +++++------- 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 -- 2.20.1