Subject: Workaround for Multiple Disk Problem

From: Klaus Naumann <[email-masked]>
Date: Mon, 23 Jul 2001 00:52:26 +0200 (CEST)

Hi all,

the attached patch is a _WORK-AROUND_ for the Multiple Disk Problem which
is one of the biggest show stoppers on Indy/Indigo2 systems.
It disables DMA transfers to the SCSI bus. I'm not sure if this
is much slower. Please consider this a work around for machines
which have small disks and need them all to make up a decent build
machine or so ...
The patch implements a new config option right below SGI WD33C93 SCSI
Support in the SCSI Devices Configuration. Activate it and recompile
your kernel (you may have to do make distclean to recompile).
The driver will display a warning at boot time that this kernel has
DMA disabled.
I also know that this C code is the kind of C code which is really bad.
It's somewhat like the stuff your mother has warned you before when
you were young ...
But well it's a hack so I don't care.

		Enjoy, Klaus

-- 
Full Name   : Klaus Naumann     | (http://www.mgnet.de/) (Germany)
Nickname    : Spock             | Org.: Mad Guys Network
Phone / FAX : ++49/177/7862964  | E-Mail: ([email-masked])
PGP Key     : www.mgnet.de/keys/key_spock.txt
--- cvs/linux/drivers/scsi/Config.in	Sun Apr 15 17:16:07 2001
+++ linux.build/drivers/scsi/Config.in	Sun Jul 22 23:51:19 2001
@@ -34,6 +34,9 @@
 
 if [ "$CONFIG_SGI_IP22" = "y" ]; then
    dep_tristate 'SGI WD93C93 SCSI Driver' CONFIG_SGIWD93_SCSI $CONFIG_SCSI
+   if [ "$CONFIG_SGIWD93_SCSI" != "n" ]; then
+      bool '  Disable DMA for SGI WD33C93 SCSI Driver' CONFIG_SGIWD93_SCSI_NODMA
+   fi
 fi
 if [ "$CONFIG_DECSTATION" = "y" ]; then
    if [ "$CONFIG_TC" = "y" ]; then
--- cvs/linux/drivers/scsi/sgiwd93.c	Tue Mar 27 00:11:49 2001
+++ linux.build/drivers/scsi/sgiwd93.c	Sun Jul 22 23:59:56 2001
@@ -102,6 +102,21 @@
 	wd33c93_regs *regp = hdata->regp;
 	struct hpc3_scsiregs *hregs = (struct hpc3_scsiregs *) cmd->host->base;
 	struct hpc_chunk *hcp = (struct hpc_chunk *) hdata->dma_bounce_buffer;
+#ifdef CONFIG_SGIWD93_SCSI_NODMA
+	static int printwarning = 0;
+#endif
+
+/* Klaus Naumann - this is a temporary workaround until
+we sorted out the DMA bug which occours if two disks are
+connected to the same SCSI bus.
+*/
+#ifdef CONFIG_SGIWD93_SCSI_NODMA
+	if(printwarning == 0) {
+		printk("\n\n --- WARNING --- DMA is disabled --- WARNING ---\n\n\n");
+		printwarning = 1;
+	}
+	return TRUE;
+#endif
 
 #ifdef DEBUG_DMA
 	printk("dma_setup: datainp<%d> hcp<%p> ",