From: Michael Schmitz <schmitzmic@gmail.com>
To: linux-m68k@vger.kernel.org
Cc: geert@linux-m68k.org, JBottomley@parallels.com,
linux-scsi@vger.kernel.org, arnd@arndb.de,
Michael Schmitz <schmitz@debian.org>
Subject: [PATCH 2/3] m68k/atari - atari_scsi: change abort/reset return codes
Date: Wed, 29 Jan 2014 12:55:23 +1300 [thread overview]
Message-ID: <1390953324-19962-3-git-send-email-schmitz@debian.org> (raw)
In-Reply-To: <1388664474-1710039-3-git-send-email-arnd@arndb.de>
The abort/reset lowlevel return codes had changed with the new
error SCSI handling - update Atari NCR5380 driver to reflect this.
Change reset handling to clear queues only, do not attempt to
call done() on each command aborted by the reset. The EH code
should do that for us.
Queues _must_ be cleared, otherwise atari_scsi_bus_reset will not
release the ST-DMA lock, deadlocking further error recovery.
Signed-off-by: Michael Schmitz <schmitz@debian.org>
---
drivers/scsi/atari_NCR5380.c | 29 ++++++++++++++++++-----------
drivers/scsi/atari_scsi.c | 2 +-
2 files changed, 19 insertions(+), 12 deletions(-)
diff --git a/drivers/scsi/atari_NCR5380.c b/drivers/scsi/atari_NCR5380.c
index 0f3cdbc..465e63d 100644
--- a/drivers/scsi/atari_NCR5380.c
+++ b/drivers/scsi/atari_NCR5380.c
@@ -2683,11 +2683,11 @@ int NCR5380_abort(Scsi_Cmnd *cmd)
local_irq_restore(flags);
cmd->scsi_done(cmd);
falcon_release_lock_if_possible(hostdata);
- return SCSI_ABORT_SUCCESS;
+ return SUCCESS;
} else {
/* local_irq_restore(flags); */
printk("scsi%d: abort of connected command failed!\n", HOSTNO);
- return SCSI_ABORT_ERROR;
+ return FAILED;
}
}
#endif
@@ -2711,7 +2711,7 @@ int NCR5380_abort(Scsi_Cmnd *cmd)
* yet... */
tmp->scsi_done(tmp);
falcon_release_lock_if_possible(hostdata);
- return SCSI_ABORT_SUCCESS;
+ return SUCCESS;
}
}
@@ -2729,7 +2729,7 @@ int NCR5380_abort(Scsi_Cmnd *cmd)
if (hostdata->connected) {
local_irq_restore(flags);
ABRT_PRINTK("scsi%d: abort failed, command connected.\n", HOSTNO);
- return SCSI_ABORT_SNOOZE;
+ return FAILED;
}
/*
@@ -2764,7 +2764,7 @@ int NCR5380_abort(Scsi_Cmnd *cmd)
ABRT_PRINTK("scsi%d: aborting disconnected command.\n", HOSTNO);
if (NCR5380_select(instance, cmd, (int)cmd->tag))
- return SCSI_ABORT_BUSY;
+ return FAILED;
ABRT_PRINTK("scsi%d: nexus reestablished.\n", HOSTNO);
@@ -2791,7 +2791,7 @@ int NCR5380_abort(Scsi_Cmnd *cmd)
local_irq_restore(flags);
tmp->scsi_done(tmp);
falcon_release_lock_if_possible(hostdata);
- return SCSI_ABORT_SUCCESS;
+ return SUCCESS;
}
}
}
@@ -2816,7 +2816,7 @@ int NCR5380_abort(Scsi_Cmnd *cmd)
*/
falcon_release_lock_if_possible(hostdata);
- return SCSI_ABORT_NOT_RUNNING;
+ return FAILED;
}
@@ -2834,7 +2834,7 @@ static int NCR5380_bus_reset(Scsi_Cmnd *cmd)
SETUP_HOSTDATA(cmd->device->host);
int i;
unsigned long flags;
-#if 1
+#if defined(RESET_RUN_DONE)
Scsi_Cmnd *connected, *disconnected_queue;
#endif
@@ -2859,7 +2859,14 @@ static int NCR5380_bus_reset(Scsi_Cmnd *cmd)
* through anymore ... */
(void)NCR5380_read(RESET_PARITY_INTERRUPT_REG);
-#if 1 /* XXX Should now be done by midlevel code, but it's broken XXX */
+ /* MSch 20140115 - looking at the generic NCR5380 driver, all of this
+ * should go.
+ * Catch-22: if we don't clear all queues, the SCSI driver lock will
+ * not be reset by atari_scsi_reset()!
+ */
+
+#if defined(RESET_RUN_DONE)
+ /* XXX Should now be done by midlevel code, but it's broken XXX */
/* XXX see below XXX */
/* MSch: old-style reset: actually abort all command processing here */
@@ -2915,7 +2922,7 @@ static int NCR5380_bus_reset(Scsi_Cmnd *cmd)
* the midlevel code that the reset was SUCCESSFUL, and there is no
* need to 'wake up' the commands by a request_sense
*/
- return SCSI_RESET_SUCCESS | SCSI_RESET_BUS_RESET;
+ return SUCCESS;
#else /* 1 */
/* MSch: new-style reset handling: let the mid-level do what it can */
@@ -2963,6 +2970,6 @@ static int NCR5380_bus_reset(Scsi_Cmnd *cmd)
local_irq_restore(flags);
/* we did no complete reset of all commands, so a wakeup is required */
- return SCSI_RESET_WAKEUP | SCSI_RESET_BUS_RESET;
+ return SUCCESS;
#endif /* 1 */
}
diff --git a/drivers/scsi/atari_scsi.c b/drivers/scsi/atari_scsi.c
index cc1b013..5e19509 100644
--- a/drivers/scsi/atari_scsi.c
+++ b/drivers/scsi/atari_scsi.c
@@ -827,7 +827,7 @@ static int atari_scsi_bus_reset(Scsi_Cmnd *cmd)
} else {
atari_turnon_irq(IRQ_MFP_FSCSI);
}
- if ((rv & SCSI_RESET_ACTION) == SCSI_RESET_SUCCESS)
+ if (rv == SUCCESS)
falcon_release_lock_if_possible(hostdata);
return rv;
--
1.7.0.4
next prev parent reply other threads:[~2014-01-28 23:55 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1388664474-1710039-1-git-send-email-arnd@arndb.de>
[not found] ` <1388664474-1710039-2-git-send-email-arnd@arndb.de>
2014-01-02 12:27 ` Fwd: [PATCH, RFC 01/30] ataflop: fix sleep_on races Geert Uytterhoeven
2014-01-05 1:39 ` Michael Schmitz
[not found] ` <1388664474-1710039-15-git-send-email-arnd@arndb.de>
2014-01-02 12:27 ` Fwd: [PATCH, RFC 14/30] tty/amiserial: avoid interruptible_sleep_on Geert Uytterhoeven
[not found] ` <1388664474-1710039-3-git-send-email-arnd@arndb.de>
2014-01-02 12:26 ` Fwd: [PATCH, RFC 02/30] scsi: atari_scsi: fix sleep_on race Geert Uytterhoeven
2014-01-05 1:35 ` Michael Schmitz
2014-01-12 1:40 ` Michael Schmitz
2014-01-12 20:00 ` Arnd Bergmann
2014-01-13 7:35 ` Michael Schmitz
2014-01-27 8:28 ` Michael Schmitz
2014-01-29 14:53 ` Arnd Bergmann
2014-01-30 7:54 ` schmitz
2014-01-30 7:57 ` Geert Uytterhoeven
2014-01-30 8:08 ` schmitz
2014-01-30 8:27 ` Geert Uytterhoeven
2014-01-30 8:06 ` schmitz
2014-01-13 8:20 ` schmitz
2014-01-14 8:29 ` Michael Schmitz
2014-01-19 22:04 ` Michael Schmitz
2014-01-28 7:52 ` [PATCH 0/3] m68k/atari - Atari NCR5380 SCSI driver fixes Michael Schmitz
2014-01-28 8:02 ` Geert Uytterhoeven
2014-01-28 7:52 ` [PATCH 1/3] m68k/atari - atari_scsi: fix wait_event completion conditions Michael Schmitz
2014-01-28 7:52 ` [PATCH 2/3] m68k/atari - atari_scsi: change abort/reset return codes Michael Schmitz
2014-01-28 7:52 ` [PATCH 3/3] m68k/atari - atari_scsi lock fixes: punt if deadlocked Michael Schmitz
2014-01-28 23:55 ` [PATCH 0/3] m68k/atari - Atari NCR5380 SCSI driver fixes (resent) Michael Schmitz
2014-01-28 23:55 ` [PATCH 1/3] m68k/atari - atari_scsi: fix wait_event completion conditions Michael Schmitz
2014-01-28 23:55 ` Michael Schmitz [this message]
2014-01-28 23:55 ` [PATCH 3/3] m68k/atari - atari_scsi lock fixes: punt if deadlocked Michael Schmitz
2014-03-01 7:51 [PATCH 0/3] m68k Atari SCSI fixes Michael Schmitz
2014-03-01 7:51 ` [PATCH 2/3] m68k/atari - atari_scsi: change abort/reset return codes Michael Schmitz
2014-03-11 8:21 ` Finn Thain
2014-03-11 8:28 ` Geert Uytterhoeven
2014-03-12 7:05 ` Michael Schmitz
2014-03-12 14:30 ` Finn Thain
2014-04-11 14:30 ` Sam Creasey
2014-03-12 7:03 ` Michael Schmitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1390953324-19962-3-git-send-email-schmitz@debian.org \
--to=schmitzmic@gmail.com \
--cc=JBottomley@parallels.com \
--cc=arnd@arndb.de \
--cc=geert@linux-m68k.org \
--cc=linux-m68k@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=schmitz@debian.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox