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: (spock@mgnet.de) 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> ",