From: Sam Creasey <sammy@sammy.net>
To: Finn Thain <fthain@telegraphics.com.au>
Cc: Michael Schmitz <schmitzmic@gmail.com>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Linux/m68k <linux-m68k@vger.kernel.org>,
Michael Schmitz <schmitz@debian.org>,
"James E.J. Bottomley" <JBottomley@parallels.com>,
scsi <linux-scsi@vger.kernel.org>, Arnd Bergmann <arnd@arndb.de>,
Sam Creasey <sammy@sammy.net>
Subject: Re: [PATCH 2/3] m68k/atari - atari_scsi: change abort/reset return codes
Date: Fri, 11 Apr 2014 10:30:03 -0400 [thread overview]
Message-ID: <20140411143003.GF21346@anhedonia> (raw)
In-Reply-To: <alpine.LNX.2.00.1403130125180.26967@nippy.intranet>
Acked-by: Sam Creasey <sammy@sammy.net>
On Thu, Mar 13, 2014 at 01:30:15AM +1100, Finn Thain wrote:
>
> This is a larger version of Michael's patch. It takes care of the header
> files and comments and it addresses sun3_NCR5380 as well as atari_NCR5380.
> This means that the initio.h include (!) can be dropped from sun3_scsi.h.
>
> Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
>
> ---
>
> This version defines RESET_RUN_DONE in sun3_scsi.c, to avoid changing
> driver behaviour whilst trying to keep sun3_NCR5380.c in sync with
> atari_NCR5380.c (from which it was originally copied).
>
>
> Index: linux-m68k/drivers/scsi/atari_NCR5380.c
> ===================================================================
> --- linux-m68k.orig/drivers/scsi/atari_NCR5380.c 2014-03-13 01:12:33.000000000 +1100
> +++ linux-m68k/drivers/scsi/atari_NCR5380.c 2014-03-13 01:13:55.000000000 +1100
> @@ -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;
> }
>
>
> @@ -2825,7 +2825,7 @@ int NCR5380_abort(Scsi_Cmnd *cmd)
> *
> * Purpose : reset the SCSI bus.
> *
> - * Returns : SCSI_RESET_WAKEUP
> + * Returns : SUCCESS or FAILURE
> *
> */
>
> @@ -2834,7 +2834,7 @@ static int NCR5380_bus_reset(Scsi_Cmnd *
> 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 *
> * 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 released 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 *
> * 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 *
> 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 */
> }
> Index: linux-m68k/drivers/scsi/atari_scsi.c
> ===================================================================
> --- linux-m68k.orig/drivers/scsi/atari_scsi.c 2014-03-13 01:12:33.000000000 +1100
> +++ linux-m68k/drivers/scsi/atari_scsi.c 2014-03-13 01:13:55.000000000 +1100
> @@ -821,7 +821,7 @@ static int atari_scsi_bus_reset(Scsi_Cmn
> } 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;
> Index: linux-m68k/drivers/scsi/atari_scsi.h
> ===================================================================
> --- linux-m68k.orig/drivers/scsi/atari_scsi.h 2014-03-13 01:12:33.000000000 +1100
> +++ linux-m68k/drivers/scsi/atari_scsi.h 2014-03-13 01:13:55.000000000 +1100
> @@ -54,32 +54,6 @@
> #define NCR5380_dma_xfer_len(i,cmd,phase) \
> atari_dma_xfer_len(cmd->SCp.this_residual,cmd,((phase) & SR_IO) ? 0 : 1)
>
> -/* former generic SCSI error handling stuff */
> -
> -#define SCSI_ABORT_SNOOZE 0
> -#define SCSI_ABORT_SUCCESS 1
> -#define SCSI_ABORT_PENDING 2
> -#define SCSI_ABORT_BUSY 3
> -#define SCSI_ABORT_NOT_RUNNING 4
> -#define SCSI_ABORT_ERROR 5
> -
> -#define SCSI_RESET_SNOOZE 0
> -#define SCSI_RESET_PUNT 1
> -#define SCSI_RESET_SUCCESS 2
> -#define SCSI_RESET_PENDING 3
> -#define SCSI_RESET_WAKEUP 4
> -#define SCSI_RESET_NOT_RUNNING 5
> -#define SCSI_RESET_ERROR 6
> -
> -#define SCSI_RESET_SYNCHRONOUS 0x01
> -#define SCSI_RESET_ASYNCHRONOUS 0x02
> -#define SCSI_RESET_SUGGEST_BUS_RESET 0x04
> -#define SCSI_RESET_SUGGEST_HOST_RESET 0x08
> -
> -#define SCSI_RESET_BUS_RESET 0x100
> -#define SCSI_RESET_HOST_RESET 0x200
> -#define SCSI_RESET_ACTION 0xff
> -
> /* Debugging printk definitions:
> *
> * ARB -> arbitration
> Index: linux-m68k/drivers/scsi/sun3_NCR5380.c
> ===================================================================
> --- linux-m68k.orig/drivers/scsi/sun3_NCR5380.c 2014-03-13 01:12:33.000000000 +1100
> +++ linux-m68k/drivers/scsi/sun3_NCR5380.c 2014-03-13 01:13:55.000000000 +1100
> @@ -2664,11 +2664,11 @@ static int NCR5380_abort(struct scsi_cmn
> #endif
> local_irq_restore(flags);
> cmd->scsi_done(cmd);
> - 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
> @@ -2691,7 +2691,7 @@ static int NCR5380_abort(struct scsi_cmn
> /* Tagged queuing note: no tag to free here, hasn't been assigned
> * yet... */
> tmp->scsi_done(tmp);
> - return SCSI_ABORT_SUCCESS;
> + return SUCCESS;
> }
>
> /*
> @@ -2708,7 +2708,7 @@ static int NCR5380_abort(struct scsi_cmn
> if (hostdata->connected) {
> local_irq_restore(flags);
> ABRT_PRINTK("scsi%d: abort failed, command connected.\n", HOSTNO);
> - return SCSI_ABORT_SNOOZE;
> + return FAILED;
> }
>
> /*
> @@ -2743,7 +2743,7 @@ static int NCR5380_abort(struct scsi_cmn
> 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);
>
> @@ -2769,7 +2769,7 @@ static int NCR5380_abort(struct scsi_cmn
> #endif
> local_irq_restore(flags);
> tmp->scsi_done(tmp);
> - return SCSI_ABORT_SUCCESS;
> + return SUCCESS;
> }
> }
>
> @@ -2786,7 +2786,7 @@ static int NCR5380_abort(struct scsi_cmn
> local_irq_restore(flags);
> printk(KERN_INFO "scsi%d: warning : SCSI command probably completed successfully before abortion\n", HOSTNO);
>
> - return SCSI_ABORT_NOT_RUNNING;
> + return FAILED;
> }
>
>
> @@ -2795,7 +2795,7 @@ static int NCR5380_abort(struct scsi_cmn
> *
> * Purpose : reset the SCSI bus.
> *
> - * Returns : SCSI_RESET_WAKEUP
> + * Returns : SUCCESS or FAILURE
> *
> */
>
> @@ -2804,7 +2804,7 @@ static int NCR5380_bus_reset(struct scsi
> SETUP_HOSTDATA(cmd->device->host);
> int i;
> unsigned long flags;
> -#if 1
> +#if defined(RESET_RUN_DONE)
> struct scsi_cmnd *connected, *disconnected_queue;
> #endif
>
> @@ -2826,8 +2826,15 @@ static int NCR5380_bus_reset(struct scsi
> * through anymore ... */
> (void)NCR5380_read( RESET_PARITY_INTERRUPT_REG );
>
> -#if 1 /* XXX Should now be done by midlevel code, but it's broken XXX */
> - /* XXX see below 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 released 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 */
>
> @@ -2876,7 +2883,7 @@ static int NCR5380_bus_reset(struct scsi
> * 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 */
> @@ -2924,7 +2931,7 @@ static int NCR5380_bus_reset(struct scsi
> 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 */
> }
>
> Index: linux-m68k/drivers/scsi/sun3_scsi.c
> ===================================================================
> --- linux-m68k.orig/drivers/scsi/sun3_scsi.c 2014-03-13 01:12:33.000000000 +1100
> +++ linux-m68k/drivers/scsi/sun3_scsi.c 2014-03-13 01:13:55.000000000 +1100
> @@ -79,7 +79,6 @@
> #define REAL_DMA
>
> #include "scsi.h"
> -#include "initio.h"
> #include <scsi/scsi_host.h>
> #include "sun3_scsi.h"
>
> @@ -123,6 +122,8 @@ module_param(setup_hostid, int, 0);
>
> static struct scsi_cmnd *sun3_dma_setup_done = NULL;
>
> +#define RESET_RUN_DONE
> +
> #define AFTER_RESET_DELAY (HZ/2)
>
> /* ms to wait after hitting dma regs */
next prev parent reply other threads:[~2014-04-11 15:35 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-01 7:51 [PATCH 0/3] m68k Atari SCSI fixes Michael Schmitz
2014-03-01 7:51 ` [PATCH 1/3] m68k/atari - convert atari_scsi falcon_get_lock() to use wait_event() Michael Schmitz
2014-03-01 11:53 ` Arnd Bergmann
2014-03-01 23:05 ` schmitz
2014-03-06 13:48 ` Geert Uytterhoeven
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 [this message]
2014-03-12 7:03 ` Michael Schmitz
2014-05-02 8:43 ` [PATCH v2] " Michael Schmitz
2014-03-01 7:51 ` [PATCH 3/3] m68k/atari - atari_scsi: punt if deadlocked Michael Schmitz
-- strict thread matches above, loose matches on Subject: below --
2014-01-02 12:07 [PATCH, RFC 02/30] scsi: atari_scsi: fix sleep_on race Arnd Bergmann
2014-01-28 23:55 ` [PATCH 2/3] m68k/atari - atari_scsi: change abort/reset return codes 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=20140411143003.GF21346@anhedonia \
--to=sammy@sammy.net \
--cc=JBottomley@parallels.com \
--cc=arnd@arndb.de \
--cc=fthain@telegraphics.com.au \
--cc=geert@linux-m68k.org \
--cc=linux-m68k@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=schmitz@debian.org \
--cc=schmitzmic@gmail.com \
/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