All of lore.kernel.org
 help / color / mirror / Atom feed
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 */

  reply	other threads:[~2014-04-11 14:30 UTC|newest]

Thread overview: 16+ 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:26 Fwd: [PATCH, RFC 02/30] scsi: atari_scsi: fix sleep_on race Geert Uytterhoeven
2014-01-28  7:52 ` [PATCH 2/3] m68k/atari - atari_scsi: change abort/reset return codes Michael Schmitz
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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.