From: Finn Thain <fthain@telegraphics.com.au>
To: "James E.J. Bottomley" <JBottomley@parallels.com>
Cc: Michael Schmitz <schmitzmic@gmail.com>,
Sam Creasey <sammy@sammy.net>,
linux-scsi@vger.kernel.org, linux-m68k@vger.kernel.org,
Russell King <linux@arm.linux.org.uk>,
linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 13/37] ncr5380: Move static PDMA spin counters to host data
Date: Wed, 12 Nov 2014 16:11:59 +1100 [thread overview]
Message-ID: <20141112051149.585464493@telegraphics.com.au> (raw)
In-Reply-To: 20141112051146.525489687@telegraphics.com.au
[-- Attachment #1: ncr5380-move-pdma-spin-counters --]
[-- Type: text/plain, Size: 7000 bytes --]
Static variables from dtc.c and pas16.c should not appear in the core
NCR5380.c driver. Aside from being a layering issue this worsens the
divergence between the three core driver variants (atari_NCR5380.c and
sun3_NCR5380.c don't support PSEUDO_DMA) and it can mean multiple hosts
share the same counters.
Fix this by making the pseudo DMA spin counters in the core more generic.
This also avoids the abuse of the {DTC,PAS16}_PUBLIC_RELEASE macros, so
they can be removed.
oak.c doesn't use PDMA and hence it doesn't use the counters and hence it
needs no write_info() method. Remove it.
Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Tested-by: Michael Schmitz <schmitzmic@gmail.com>
---
drivers/scsi/NCR5380.c | 22 ++++++++++------------
drivers/scsi/NCR5380.h | 4 ++++
drivers/scsi/arm/oak.c | 2 --
drivers/scsi/dtc.c | 13 ++++++-------
drivers/scsi/pas16.c | 12 ++++++------
5 files changed, 26 insertions(+), 27 deletions(-)
Index: linux/drivers/scsi/NCR5380.c
===================================================================
--- linux.orig/drivers/scsi/NCR5380.c 2014-11-12 16:11:06.000000000 +1100
+++ linux/drivers/scsi/NCR5380.c 2014-11-12 16:11:10.000000000 +1100
@@ -692,6 +692,7 @@ static void NCR5380_print_status(struct
NCR5380_dprint_phase(NDEBUG_ANY, instance);
}
+#ifdef PSEUDO_DMA
/******************************************/
/*
* /proc/scsi/[dtc pas16 t128 generic]/[0-ASC_NUM_BOARD_SUPPORTED]
@@ -709,14 +710,13 @@ static void NCR5380_print_status(struct
static int __maybe_unused NCR5380_write_info(struct Scsi_Host *instance,
char *buffer, int length)
{
-#ifdef DTC_PUBLIC_RELEASE
- dtc_wmaxi = dtc_maxi = 0;
-#endif
-#ifdef PAS16_PUBLIC_RELEASE
- pas_wmaxi = pas_maxi = 0;
-#endif
- return (-ENOSYS); /* Currently this is a no-op */
+ struct NCR5380_hostdata *hostdata = shost_priv(instance);
+
+ hostdata->spin_max_r = 0;
+ hostdata->spin_max_w = 0;
+ return 0;
}
+#endif
#undef SPRINTF
#define SPRINTF(args...) seq_printf(m, ## args)
@@ -751,11 +751,9 @@ static int __maybe_unused NCR5380_show_i
SPRINTF("PAS16 release=%d", PAS16_PUBLIC_RELEASE);
#endif
-#ifdef DTC_PUBLIC_RELEASE
- SPRINTF("Highwater I/O busy_spin_counts -- write: %d read: %d\n", dtc_wmaxi, dtc_maxi);
-#endif
-#ifdef PAS16_PUBLIC_RELEASE
- SPRINTF("Highwater I/O busy_spin_counts -- write: %d read: %d\n", pas_wmaxi, pas_maxi);
+#ifdef PSEUDO_DMA
+ SPRINTF("Highwater I/O busy spin counts: write %d, read %d\n",
+ hostdata->spin_max_w, hostdata->spin_max_r);
#endif
spin_lock_irq(instance->host_lock);
if (!hostdata->connected)
Index: linux/drivers/scsi/NCR5380.h
===================================================================
--- linux.orig/drivers/scsi/NCR5380.h 2014-11-12 16:11:06.000000000 +1100
+++ linux/drivers/scsi/NCR5380.h 2014-11-12 16:11:10.000000000 +1100
@@ -274,6 +274,10 @@ struct NCR5380_hostdata {
struct delayed_work coroutine; /* our co-routine */
struct scsi_eh_save ses;
char info[256];
+#ifdef PSEUDO_DMA
+ unsigned spin_max_r;
+ unsigned spin_max_w;
+#endif
};
#ifdef __KERNEL__
Index: linux/drivers/scsi/dtc.c
===================================================================
--- linux.orig/drivers/scsi/dtc.c 2014-11-12 16:11:06.000000000 +1100
+++ linux/drivers/scsi/dtc.c 2014-11-12 16:11:10.000000000 +1100
@@ -332,13 +332,11 @@ static int dtc_biosparam(struct scsi_dev
* timeout.
*/
-static int dtc_maxi = 0;
-static int dtc_wmaxi = 0;
-
static inline int NCR5380_pread(struct Scsi_Host *instance, unsigned char *dst, int len)
{
unsigned char *d = dst;
int i; /* For counting time spent in the poll-loop */
+ struct NCR5380_hostdata *hostdata = shost_priv(instance);
NCR5380_local_declare();
NCR5380_setup(instance);
@@ -369,8 +367,8 @@ static inline int NCR5380_pread(struct S
NCR5380_write(MODE_REG, 0); /* Clear the operating mode */
rtrc(0);
NCR5380_read(RESET_PARITY_INTERRUPT_REG);
- if (i > dtc_maxi)
- dtc_maxi = i;
+ if (i > hostdata->spin_max_r)
+ hostdata->spin_max_r = i;
return (0);
}
@@ -390,6 +388,7 @@ static inline int NCR5380_pread(struct S
static inline int NCR5380_pwrite(struct Scsi_Host *instance, unsigned char *src, int len)
{
int i;
+ struct NCR5380_hostdata *hostdata = shost_priv(instance);
NCR5380_local_declare();
NCR5380_setup(instance);
@@ -422,8 +421,8 @@ static inline int NCR5380_pwrite(struct
/* Check for parity error here. fixme. */
NCR5380_write(MODE_REG, 0); /* Clear the operating mode */
rtrc(0);
- if (i > dtc_wmaxi)
- dtc_wmaxi = i;
+ if (i > hostdata->spin_max_w)
+ hostdata->spin_max_w = i;
return (0);
}
Index: linux/drivers/scsi/pas16.c
===================================================================
--- linux.orig/drivers/scsi/pas16.c 2014-11-12 16:11:06.000000000 +1100
+++ linux/drivers/scsi/pas16.c 2014-11-12 16:11:10.000000000 +1100
@@ -88,8 +88,6 @@
#include "NCR5380.h"
-static int pas_maxi = 0;
-static int pas_wmaxi = 0;
static unsigned short pas16_addr = 0;
static int pas16_irq = 0;
@@ -502,6 +500,7 @@ static inline int NCR5380_pread (struct
P_DATA_REG_OFFSET);
register int i = len;
int ii = 0;
+ struct NCR5380_hostdata *hostdata = shost_priv(instance);
while ( !(inb(instance->io_port + P_STATUS_REG_OFFSET) & P_ST_RDY) )
++ii;
@@ -514,8 +513,8 @@ static inline int NCR5380_pread (struct
instance->host_no);
return -1;
}
- if (ii > pas_maxi)
- pas_maxi = ii;
+ if (ii > hostdata->spin_max_r)
+ hostdata->spin_max_r = ii;
return 0;
}
@@ -538,6 +537,7 @@ static inline int NCR5380_pwrite (struct
register unsigned short reg = (instance->io_port + P_DATA_REG_OFFSET);
register int i = len;
int ii = 0;
+ struct NCR5380_hostdata *hostdata = shost_priv(instance);
while ( !((inb(instance->io_port + P_STATUS_REG_OFFSET)) & P_ST_RDY) )
++ii;
@@ -550,8 +550,8 @@ static inline int NCR5380_pwrite (struct
instance->host_no);
return -1;
}
- if (ii > pas_maxi)
- pas_wmaxi = ii;
+ if (ii > hostdata->spin_max_w)
+ hostdata->spin_max_w = ii;
return 0;
}
Index: linux/drivers/scsi/arm/oak.c
===================================================================
--- linux.orig/drivers/scsi/arm/oak.c 2014-11-12 16:11:06.000000000 +1100
+++ linux/drivers/scsi/arm/oak.c 2014-11-12 16:11:10.000000000 +1100
@@ -31,7 +31,6 @@
#define NCR5380_queue_command oakscsi_queue_command
#define NCR5380_info oakscsi_info
#define NCR5380_show_info oakscsi_show_info
-#define NCR5380_write_info oakscsi_write_info
#define NCR5380_implementation_fields \
void __iomem *base
@@ -108,7 +107,6 @@ printk("reading %p len %d\n", addr, len)
static struct scsi_host_template oakscsi_template = {
.module = THIS_MODULE,
.show_info = oakscsi_show_info,
- .write_info = oakscsi_write_info,
.name = "Oak 16-bit SCSI",
.info = oakscsi_info,
.queuecommand = oakscsi_queue_command,
next prev parent reply other threads:[~2014-11-12 5:11 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-12 5:11 [PATCH v3 00/37] Fixes, cleanups and modernization for NCR5380 drivers Finn Thain
2014-11-12 5:11 ` [PATCH v3 01/37] ncr5380: Use printk() not pr_debug() Finn Thain
2014-11-12 5:11 ` [PATCH v3 02/37] ncr5380: Remove unused hostdata fields Finn Thain
2014-11-12 5:11 ` [PATCH v3 03/37] ncr5380: Fix compiler warnings and __setup options Finn Thain
2014-11-12 5:11 ` [PATCH v3 04/37] ncr5380: Remove unused macros Finn Thain
2014-11-12 5:11 ` [PATCH v3 05/37] ncr5380: Remove useless prototypes Finn Thain
2014-11-12 5:11 ` [PATCH v3 06/37] ncr5380: Remove more " Finn Thain
2014-11-12 5:11 ` [PATCH v3 07/37] ncr5380: Cleanup TAG_NEXT and TAG_NONE macros Finn Thain
2014-11-12 5:11 ` [PATCH v3 08/37] ncr5380: Remove redundant AUTOSENSE macro Finn Thain
2014-11-12 5:11 ` [PATCH v3 09/37] ncr5380: Remove duplicate comments Finn Thain
2014-11-12 5:11 ` [PATCH v3 10/37] ncr5380: Fix SCSI_IRQ_NONE bugs Finn Thain
2014-11-12 5:11 ` [PATCH v3 11/37] ncr5380: Remove NCR5380_STATS Finn Thain
2014-11-12 5:11 ` [PATCH v3 12/37] ncr5380: Cleanup host info() methods Finn Thain
2014-11-12 5:11 ` Finn Thain [this message]
2014-11-12 5:12 ` [PATCH v3 14/37] ncr5380: Remove pointless compiler command line override macros Finn Thain
2014-11-12 5:12 ` [PATCH v3 15/37] ncr5380: Remove *_RELEASE macros Finn Thain
2014-11-12 5:12 ` [PATCH v3 16/37] ncr5380: Drop legacy scsi.h include Finn Thain
2014-11-12 5:12 ` [PATCH v3 17/37] dmx3191d: Use NO_IRQ Finn Thain
2014-11-12 5:12 ` [PATCH v3 18/37] mac_scsi: Remove header Finn Thain
2014-11-12 5:12 ` [PATCH v3 19/37] mac_scsi: Add module option to Kconfig Finn Thain
2014-11-12 5:12 ` [PATCH v3 20/37] mac_scsi: Cleanup PDMA code Finn Thain
2014-11-12 5:12 ` [PATCH v3 21/37] mac_scsi: Convert to platform device Finn Thain
2014-11-12 5:12 ` [PATCH v3 22/37] atari_scsi: Fix atari_scsi deadlocks on Falcon Finn Thain
2014-11-12 5:12 ` [PATCH v3 23/37] atari_scsi: Convert to platform device Finn Thain
2014-11-12 5:12 ` [PATCH v3 24/37] atari_scsi: Remove header Finn Thain
2014-11-12 5:12 ` [PATCH v3 25/37] sun3_scsi: Convert to platform device Finn Thain
2014-11-12 9:17 ` Geert Uytterhoeven
2014-11-12 11:20 ` Finn Thain
2014-11-13 1:21 ` [PATCH v4 " Finn Thain
2014-11-12 5:12 ` [PATCH v3 26/37] sun3_scsi: Move macro definitions Finn Thain
2014-11-12 5:12 ` [PATCH v3 27/37] ncr5380: Remove ENABLE_IRQ/DISABLE_IRQ macros Finn Thain
2014-11-12 5:12 ` [PATCH v3 28/37] atari_NCR5380: Refactor Falcon special cases Finn Thain
2014-11-12 5:12 ` [PATCH v3 29/37] atari_NCR5380: Refactor Falcon locking Finn Thain
2014-11-12 5:12 ` [PATCH v3 30/37] atari_NCR5380: Merge from sun3_NCR5380.c Finn Thain
2014-11-12 5:12 ` [PATCH v3 31/37] sun3_scsi: Adopt atari_NCR5380 core driver and remove sun3_NCR5380.c Finn Thain
2014-11-12 5:12 ` [PATCH v3 32/37] atari_NCR5380: Merge from NCR5380.c Finn Thain
2014-11-12 5:12 ` [PATCH v3 33/37] atari_NCR5380: Introduce FLAG_TAGGED_QUEUING Finn Thain
2014-11-12 5:12 ` [PATCH v3 34/37] atari_NCR5380: Move static TagAlloc array to host data Finn Thain
2014-11-12 5:12 ` [PATCH v3 35/37] atari_NCR5380: Move static co-routine variables " Finn Thain
2014-11-12 5:12 ` [PATCH v3 36/37] atari_NCR5380: Remove RESET_RUN_DONE macro Finn Thain
2014-11-12 5:12 ` [PATCH v3 37/37] atari_NCR5380: Fix "transfered" typo Finn Thain
2014-11-20 15:56 ` [PATCH v3 00/37] Fixes, cleanups and modernization for NCR5380 drivers Christoph Hellwig
2014-11-21 4:21 ` Finn Thain
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=20141112051149.585464493@telegraphics.com.au \
--to=fthain@telegraphics.com.au \
--cc=JBottomley@parallels.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-m68k@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=sammy@sammy.net \
--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