[PATCH v3 01/23] g_ncr5380: Remove CONFIG_SCSI_GENERIC_NCR53C400

2016-03-20 Thread Finn Thain
This change brings a number of improvements: fewer macros, better test
coverage, simpler code and sane Kconfig options. The downside is a small
chance of incompatibility (which seems unavoidable).

CONFIG_SCSI_GENERIC_NCR53C400 exists to enable or inhibit pseudo DMA
transfers when the driver is used with 53C400-compatible cards. Thanks to
Ondrej Zary's patches, PDMA now works which means it can be enabled
unconditionally.

Due to bad design, CONFIG_SCSI_GENERIC_NCR53C400 ties together unrelated
functionality as it sets both PSEUDO_DMA and BIOSPARAM macros. This patch
effectively enables PSEUDO_DMA and disables BIOSPARAM.

The defconfigs and the Kconfig default leave CONFIG_SCSI_GENERIC_NCR53C400
undefined. Red Hat 9 and CentOS 2.1 were the same. This leaves both
PSEUDO_DMA and BIOSPARAM disabled. The effect of this patch should be
better performance from enabling PSEUDO_DMA.

On the other hand, Debian 4 and SLES 10 had CONFIG_SCSI_GENERIC_NCR53C400
enabled, so both PSEUDO_DMA and BIOSPARAM were enabled. This patch might
affect configurations like this by disabling BIOSPARAM. My best guess is
that this could be a problem only in the vanishingly rare case that
1) the CHS values stored in the boot device partition table are wrong and
2) a 5380 card is in use (because PDMA on 53C400 used to be broken).

Signed-off-by: Finn Thain 
Reviewed-by: Hannes Reinecke 

---

Here are the distro kernel versions I looked at:

CentOS 2.1:

$ strings 
kernel-2.4.9-e.40.i686/lib/modules/2.4.9-e.40/kernel/drivers/scsi/g_NCR5380.o | 
grep extension
NO NCR53C400 driver extensions


Red Hat 7:

$ strings 
kernel-2.4.18-3.i386/lib/modules/2.4.18-3/kernel/drivers/scsi/g_NCR5380.o | 
grep extension
NO NCR53C400 driver extensions


Red Hat 9:

$ strings 
kernel-2.4.20-8.i586/lib/modules/2.4.20-8/kernel/drivers/scsi/g_NCR5380.o | 
grep extension
NO NCR53C400 driver extensions


Debian 4:

$ strings 
linux-image-2.6.24-etchnhalf.1-486_2.6.24-6-etchnhalf.9etch3_i386/lib/modules/2.6.24-etchnhalf.1-486/kernel/drivers/scsi/g_NCR5380_mmio.ko
 | grep extension
NCR53C400 extension version %d
$ strings 
kernel-image-2.6.8-2-386_2.6.8-13_i386/lib/modules/2.6.8-2-386/kernel/drivers/scsi/g_NCR5380_mmio.ko
 | grep extension
NCR53C400 extension version %d


SLES 10.2:

$ strings 
kernel-default-2.6.18.2-34.i586/lib/modules/2.6.18.2-34-default/kernel/drivers/scsi/g_NCR5380_mmio.ko
 | grep extension
NCR53C400 extension version %d

---
 drivers/scsi/Kconfig |   11 --
 drivers/scsi/g_NCR5380.c |   75 ++-
 drivers/scsi/g_NCR5380.h |   16 +-
 3 files changed, 25 insertions(+), 77 deletions(-)

Index: linux/drivers/scsi/Kconfig
===
--- linux.orig/drivers/scsi/Kconfig 2016-03-21 13:31:07.0 +1100
+++ linux/drivers/scsi/Kconfig  2016-03-21 13:31:07.0 +1100
@@ -812,17 +812,6 @@ config SCSI_GENERIC_NCR5380_MMIO
  To compile this driver as a module, choose M here: the
  module will be called g_NCR5380_mmio.
 
-config SCSI_GENERIC_NCR53C400
-   bool "Enable NCR53c400 extensions"
-   depends on SCSI_GENERIC_NCR5380
-   help
- This enables certain optimizations for the NCR53c400 SCSI cards.
- You might as well try it out.  Note that this driver will only probe
- for the Trantor T130B in its default configuration; you might have
- to pass a command line option to the kernel at boot time if it does
- not detect your card.  See the file
-  for details.
-
 config SCSI_IPS
tristate "IBM ServeRAID support"
depends on PCI && SCSI
Index: linux/drivers/scsi/g_NCR5380.c
===
--- linux.orig/drivers/scsi/g_NCR5380.c 2016-03-21 13:31:07.0 +1100
+++ linux/drivers/scsi/g_NCR5380.c  2016-03-21 13:31:07.0 +1100
@@ -57,10 +57,7 @@
  */
 
 #define AUTOPROBE_IRQ
-
-#ifdef CONFIG_SCSI_GENERIC_NCR53C400
 #define PSEUDO_DMA
-#endif
 
 #include 
 #include 
@@ -270,7 +267,7 @@ static int __init generic_NCR5380_detect
 #ifndef SCSI_G_NCR5380_MEM
int i;
int port_idx = -1;
-   unsigned long region_size = 16;
+   unsigned long region_size;
 #endif
static unsigned int __initdata ncr_53c400a_ports[] = {
0x280, 0x290, 0x300, 0x310, 0x330, 0x340, 0x348, 0x350, 0
@@ -290,6 +287,7 @@ static int __init generic_NCR5380_detect
 #ifdef SCSI_G_NCR5380_MEM
unsigned long base;
void __iomem *iomem;
+   resource_size_t iomem_size;
 #endif
 
if (ncr_irq)
@@ -353,9 +351,7 @@ static int __init generic_NCR5380_detect
flags = FLAG_NO_PSEUDO_DMA;
break;
case BOARD_NCR53C400:
-#ifdef PSEUDO_DMA
flags = FLAG_NO_DMA_FIXUP;
-#endif
break;
case 

[PATCH v3 01/23] g_ncr5380: Remove CONFIG_SCSI_GENERIC_NCR53C400

2016-03-20 Thread Finn Thain
This change brings a number of improvements: fewer macros, better test
coverage, simpler code and sane Kconfig options. The downside is a small
chance of incompatibility (which seems unavoidable).

CONFIG_SCSI_GENERIC_NCR53C400 exists to enable or inhibit pseudo DMA
transfers when the driver is used with 53C400-compatible cards. Thanks to
Ondrej Zary's patches, PDMA now works which means it can be enabled
unconditionally.

Due to bad design, CONFIG_SCSI_GENERIC_NCR53C400 ties together unrelated
functionality as it sets both PSEUDO_DMA and BIOSPARAM macros. This patch
effectively enables PSEUDO_DMA and disables BIOSPARAM.

The defconfigs and the Kconfig default leave CONFIG_SCSI_GENERIC_NCR53C400
undefined. Red Hat 9 and CentOS 2.1 were the same. This leaves both
PSEUDO_DMA and BIOSPARAM disabled. The effect of this patch should be
better performance from enabling PSEUDO_DMA.

On the other hand, Debian 4 and SLES 10 had CONFIG_SCSI_GENERIC_NCR53C400
enabled, so both PSEUDO_DMA and BIOSPARAM were enabled. This patch might
affect configurations like this by disabling BIOSPARAM. My best guess is
that this could be a problem only in the vanishingly rare case that
1) the CHS values stored in the boot device partition table are wrong and
2) a 5380 card is in use (because PDMA on 53C400 used to be broken).

Signed-off-by: Finn Thain 
Reviewed-by: Hannes Reinecke 

---

Here are the distro kernel versions I looked at:

CentOS 2.1:

$ strings 
kernel-2.4.9-e.40.i686/lib/modules/2.4.9-e.40/kernel/drivers/scsi/g_NCR5380.o | 
grep extension
NO NCR53C400 driver extensions


Red Hat 7:

$ strings 
kernel-2.4.18-3.i386/lib/modules/2.4.18-3/kernel/drivers/scsi/g_NCR5380.o | 
grep extension
NO NCR53C400 driver extensions


Red Hat 9:

$ strings 
kernel-2.4.20-8.i586/lib/modules/2.4.20-8/kernel/drivers/scsi/g_NCR5380.o | 
grep extension
NO NCR53C400 driver extensions


Debian 4:

$ strings 
linux-image-2.6.24-etchnhalf.1-486_2.6.24-6-etchnhalf.9etch3_i386/lib/modules/2.6.24-etchnhalf.1-486/kernel/drivers/scsi/g_NCR5380_mmio.ko
 | grep extension
NCR53C400 extension version %d
$ strings 
kernel-image-2.6.8-2-386_2.6.8-13_i386/lib/modules/2.6.8-2-386/kernel/drivers/scsi/g_NCR5380_mmio.ko
 | grep extension
NCR53C400 extension version %d


SLES 10.2:

$ strings 
kernel-default-2.6.18.2-34.i586/lib/modules/2.6.18.2-34-default/kernel/drivers/scsi/g_NCR5380_mmio.ko
 | grep extension
NCR53C400 extension version %d

---
 drivers/scsi/Kconfig |   11 --
 drivers/scsi/g_NCR5380.c |   75 ++-
 drivers/scsi/g_NCR5380.h |   16 +-
 3 files changed, 25 insertions(+), 77 deletions(-)

Index: linux/drivers/scsi/Kconfig
===
--- linux.orig/drivers/scsi/Kconfig 2016-03-21 13:31:07.0 +1100
+++ linux/drivers/scsi/Kconfig  2016-03-21 13:31:07.0 +1100
@@ -812,17 +812,6 @@ config SCSI_GENERIC_NCR5380_MMIO
  To compile this driver as a module, choose M here: the
  module will be called g_NCR5380_mmio.
 
-config SCSI_GENERIC_NCR53C400
-   bool "Enable NCR53c400 extensions"
-   depends on SCSI_GENERIC_NCR5380
-   help
- This enables certain optimizations for the NCR53c400 SCSI cards.
- You might as well try it out.  Note that this driver will only probe
- for the Trantor T130B in its default configuration; you might have
- to pass a command line option to the kernel at boot time if it does
- not detect your card.  See the file
-  for details.
-
 config SCSI_IPS
tristate "IBM ServeRAID support"
depends on PCI && SCSI
Index: linux/drivers/scsi/g_NCR5380.c
===
--- linux.orig/drivers/scsi/g_NCR5380.c 2016-03-21 13:31:07.0 +1100
+++ linux/drivers/scsi/g_NCR5380.c  2016-03-21 13:31:07.0 +1100
@@ -57,10 +57,7 @@
  */
 
 #define AUTOPROBE_IRQ
-
-#ifdef CONFIG_SCSI_GENERIC_NCR53C400
 #define PSEUDO_DMA
-#endif
 
 #include 
 #include 
@@ -270,7 +267,7 @@ static int __init generic_NCR5380_detect
 #ifndef SCSI_G_NCR5380_MEM
int i;
int port_idx = -1;
-   unsigned long region_size = 16;
+   unsigned long region_size;
 #endif
static unsigned int __initdata ncr_53c400a_ports[] = {
0x280, 0x290, 0x300, 0x310, 0x330, 0x340, 0x348, 0x350, 0
@@ -290,6 +287,7 @@ static int __init generic_NCR5380_detect
 #ifdef SCSI_G_NCR5380_MEM
unsigned long base;
void __iomem *iomem;
+   resource_size_t iomem_size;
 #endif
 
if (ncr_irq)
@@ -353,9 +351,7 @@ static int __init generic_NCR5380_detect
flags = FLAG_NO_PSEUDO_DMA;
break;
case BOARD_NCR53C400:
-#ifdef PSEUDO_DMA
flags = FLAG_NO_DMA_FIXUP;
-#endif
break;
case BOARD_NCR53C400A:
flags =