[PATCH] cpqfc driver for 2.5.1-pre5 tree

From: Stephen Cameron (smcameron@yahoo.com)
Date: Thu Dec 06 2001 - 11:42:06 EST


Hi folks,

Here is a patch for the cpqfc driver to make it compile and run in the 2.5.1-pre5
tree. I feel obligated to mention that I did see messages along the lines
of "running *really* low on DMA buffers" coming from scsi_merge.c, but
Jens told me not to worry about that, so here's the patch.

It gets rid of the io_request_lock dependency, and silences a few
annoying printks that the driver has been spewing on startup.

-- steve

diff -urN linux-2.5.1-pre4/drivers/scsi/cpqfc.Readme
linux-2.5.1-pre4-cpqfc_2.5.0/drivers/scsi/cpqfc.Readme
--- linux-2.5.1-pre4/drivers/scsi/cpqfc.Readme Thu Oct 25 14:53:50 2001
+++ linux-2.5.1-pre4-cpqfc_2.5.0/drivers/scsi/cpqfc.Readme Fri Nov 30 22:26:00 2001
@@ -7,6 +7,11 @@
 SEST size 512 Exchanges (simultaneous I/Os) limited by module kmalloc()
         max of 128k bytes contiguous.
 
+Ver 2.5.0 Nov 29, 2001
+ * eliminated io_request_lock. This change makes the driver specific
+ to the 2.5.x kernels.
+ * silenced excessively noisy printks.
+
 Ver 2.1.1 Oct 18, 2001
    * reinitialize Cmnd->SCp.sent_command (used to identify commands as
      passthrus) on calling scsi_done, since the scsi mid layer does not
diff -urN linux-2.5.1-pre4/drivers/scsi/cpqfcTScontrol.c
linux-2.5.1-pre4-cpqfc_2.5.0/drivers/scsi/cpqfcTScontrol.c
--- linux-2.5.1-pre4/drivers/scsi/cpqfcTScontrol.c Thu Oct 25 14:53:50 2001
+++ linux-2.5.1-pre4-cpqfc_2.5.0/drivers/scsi/cpqfcTScontrol.c Fri Nov 30 22:19:39 2001
@@ -97,11 +97,11 @@
   fcChip->Exchanges = NULL;
   cpqfcHBAdata->fcLQ = NULL;
   
- printk("Allocating %u for %u Exchanges ",
- (ULONG)sizeof(FC_EXCHANGES), TACH_MAX_XID);
+ /* printk("Allocating %u for %u Exchanges ",
+ (ULONG)sizeof(FC_EXCHANGES), TACH_MAX_XID); */
   fcChip->Exchanges = pci_alloc_consistent(cpqfcHBAdata->PciDev,
                         sizeof(FC_EXCHANGES), &fcChip->exch_dma_handle);
- printk("@ %p\n", fcChip->Exchanges);
+ /* printk("@ %p\n", fcChip->Exchanges); */
 
   if( fcChip->Exchanges == NULL ) // fatal error!!
   {
@@ -112,10 +112,10 @@
   memset( fcChip->Exchanges, 0, sizeof( FC_EXCHANGES));
 
 
- printk("Allocating %u for LinkQ ", (ULONG)sizeof(FC_LINK_QUE));
+ /* printk("Allocating %u for LinkQ ", (ULONG)sizeof(FC_LINK_QUE)); */
   cpqfcHBAdata->fcLQ = pci_alloc_consistent(cpqfcHBAdata->PciDev,
                                  sizeof( FC_LINK_QUE), &cpqfcHBAdata->fcLQ_dma_handle);
- printk("@ %p (%u elements)\n", cpqfcHBAdata->fcLQ, FC_LINKQ_DEPTH);
+ /* printk("@ %p (%u elements)\n", cpqfcHBAdata->fcLQ, FC_LINKQ_DEPTH); */
   memset( cpqfcHBAdata->fcLQ, 0, sizeof( FC_LINK_QUE));
 
   if( cpqfcHBAdata->fcLQ == NULL ) // fatal error!!
@@ -222,8 +222,8 @@
   // power-of-2 boundary
   // LIVE DANGEROUSLY! Assume the boundary for SEST mem will
   // be on physical page (e.g. 4k) boundary.
- printk("Allocating %u for TachSEST for %u Exchanges\n",
- (ULONG)sizeof(TachSEST), TACH_SEST_LEN);
+ /* printk("Allocating %u for TachSEST for %u Exchanges\n",
+ (ULONG)sizeof(TachSEST), TACH_SEST_LEN); */
   fcChip->SEST = fcMemManager( cpqfcHBAdata->PciDev,
                   &cpqfcHBAdata->dynamic_mem[0],
                   sizeof(TachSEST), 4, 0L, &SESTdma );
@@ -289,7 +289,7 @@
 
   // set the Host's pointer for Tachyon to access
 
- printk(" cpqfcTS: writing IMQ BASE %Xh ", fcChip->IMQ->base );
+ /* printk(" cpqfcTS: writing IMQ BASE %Xh ", fcChip->IMQ->base ); */
   writel( fcChip->IMQ->base,
     (fcChip->Registers.ReMapMemBase + IMQ_BASE));
 
@@ -315,9 +315,9 @@
     return -1; // failed
   }
 #endif
-//#if DBG
+#if DBG
   printk(" PI %Xh\n", (ULONG)ulAddr );
-//#endif
+#endif
   writel( (ULONG)ulAddr,
     (fcChip->Registers.ReMapMemBase + IMQ_PRODUCER_INDEX));
 
@@ -337,9 +337,9 @@
   writel( fcChip->SEST->base,
     (fcChip->Registers.ReMapMemBase + TL_MEM_SEST_BASE));
 
- printk(" cpqfcTS: SEST %p(virt): Wrote base %Xh @ %p\n",
+ /* printk(" cpqfcTS: SEST %p(virt): Wrote base %Xh @ %p\n",
     fcChip->SEST, fcChip->SEST->base,
- fcChip->Registers.ReMapMemBase + TL_MEM_SEST_BASE);
+ fcChip->Registers.ReMapMemBase + TL_MEM_SEST_BASE); */
 
   writel( fcChip->SEST->length,
     (fcChip->Registers.ReMapMemBase + TL_MEM_SEST_LENGTH));
@@ -1723,7 +1723,7 @@
         UCHAR Minor = (UCHAR)(RevId & 0x3);
         UCHAR Major = (UCHAR)((RevId & 0x1C) >>2);
   
- printk(" HBA Tachyon RevId %d.%d\n", Major, Minor);
+ /* printk(" HBA Tachyon RevId %d.%d\n", Major, Minor); */
           if( (Major == 1) && (Minor == 2) )
         {
           sprintf( cpqfcHBAdata->fcChip.Name, STACHLITE66_TS12);
diff -urN linux-2.5.1-pre4/drivers/scsi/cpqfcTSinit.c
linux-2.5.1-pre4-cpqfc_2.5.0/drivers/scsi/cpqfcTSinit.c
--- linux-2.5.1-pre4/drivers/scsi/cpqfcTSinit.c Thu Oct 25 14:53:50 2001
+++ linux-2.5.1-pre4-cpqfc_2.5.0/drivers/scsi/cpqfcTSinit.c Fri Nov 30 22:11:47 2001
@@ -188,7 +188,7 @@
   DEBUG_PCI(printk(" IOBaseU = %x\n",
     cpqfcHBAdata->fcChip.Registers.IOBaseU));
   
- printk(" ioremap'd Membase: %p\n", cpqfcHBAdata->fcChip.Registers.ReMapMemBase);
+ /* printk(" ioremap'd Membase: %p\n", cpqfcHBAdata->fcChip.Registers.ReMapMemBase); */
   
   DEBUG_PCI(printk(" SFQconsumerIndex.address = %p\n",
     cpqfcHBAdata->fcChip.Registers.SFQconsumerIndex.address));
@@ -242,7 +242,7 @@
   cpqfcHBAdata->notify_wt = &sem;
 
   /* must unlock before kernel_thread(), for it may cause a reschedule. */
- spin_unlock_irq(&io_request_lock);
+ spin_unlock_irq(&HostAdapter->host_lock);
   kernel_thread((int (*)(void *))cpqfcTSWorkerThread,
                           (void *) HostAdapter, 0);
   /*
@@ -250,7 +250,7 @@
 
    */
   down (&sem);
- spin_lock_irq(&io_request_lock);
+ spin_lock_irq(&HostAdapter->host_lock);
   cpqfcHBAdata->notify_wt = NULL;
 
   LEAVE("launch_FC_worker_thread");
@@ -312,8 +312,8 @@
       }
 
       // NOTE: (kernel 2.2.12-32) limits allocation to 128k bytes...
- printk(" scsi_register allocating %d bytes for FC HBA\n",
- (ULONG)sizeof(CPQFCHBA));
+ /* printk(" scsi_register allocating %d bytes for FC HBA\n",
+ (ULONG)sizeof(CPQFCHBA)); */
 
       HostAdapter = scsi_register( ScsiHostTemplate, sizeof( CPQFCHBA ) );
       
@@ -403,9 +403,11 @@
       DEBUG_PCI(printk(" Requesting 255 I/O addresses @ %x\n",
         cpqfcHBAdata->fcChip.Registers.IOBaseU ));
 
-
+
+
       // start our kernel worker thread
 
+ spin_lock_irq(&HostAdapter->host_lock);
       launch_FCworker_thread(HostAdapter);
 
 
@@ -445,15 +447,16 @@
         
         unsigned long stop_time;
 
- spin_unlock_irq(&io_request_lock);
+ spin_unlock_irq(&HostAdapter->host_lock);
         stop_time = jiffies + 4*HZ;
         while ( time_before(jiffies, stop_time) )
                   schedule(); // (our worker task needs to run)
 
- spin_lock_irq(&io_request_lock);
       }
       
+ spin_lock_irq(&HostAdapter->host_lock);
       NumberOfAdapters++;
+ spin_unlock_irq(&HostAdapter->host_lock);
     } // end of while()
   }
 
@@ -1593,9 +1596,9 @@
   int retval;
   Scsi_Device *SDpnt = Cmnd->device;
   // printk(" ENTERING cpqfcTS_eh_device_reset() \n");
- spin_unlock_irq(&io_request_lock);
+ spin_unlock_irq(&Cmnd->host->host_lock);
   retval = cpqfcTS_TargetDeviceReset( SDpnt, 0);
- spin_lock_irq(&io_request_lock);
+ spin_lock_irq(&Cmnd->host->host_lock);
   return retval;
 }
 
@@ -1650,8 +1653,7 @@
   UCHAR IntPending;
   
   ENTER("intr_handler");
-
- spin_lock_irqsave( &io_request_lock, flags);
+ spin_lock_irqsave( &HostAdapter->host_lock, flags);
   // is this our INT?
   IntPending = readb( cpqfcHBA->fcChip.Registers.INTPEND.address);
 
@@ -1700,7 +1702,7 @@
       }
     }
   }
- spin_unlock_irqrestore( &io_request_lock, flags);
+ spin_unlock_irqrestore( &HostAdapter->host_lock, flags);
   LEAVE("intr_handler");
 }
 
diff -urN linux-2.5.1-pre4/drivers/scsi/cpqfcTSstructs.h
linux-2.5.1-pre4-cpqfc_2.5.0/drivers/scsi/cpqfcTSstructs.h
--- linux-2.5.1-pre4/drivers/scsi/cpqfcTSstructs.h Thu Oct 25 14:53:50 2001
+++ linux-2.5.1-pre4-cpqfc_2.5.0/drivers/scsi/cpqfcTSstructs.h Fri Nov 30 20:42:28 2001
@@ -32,8 +32,8 @@
 #define CPQFCTS_DRIVER_VER(maj,min,submin) ((maj<<16)|(min<<8)|(submin))
 // don't forget to also change MODULE_DESCRIPTION in cpqfcTSinit.c
 #define VER_MAJOR 2
-#define VER_MINOR 1
-#define VER_SUBMINOR 1
+#define VER_MINOR 5
+#define VER_SUBMINOR 0
 
 // Macros for kernel (esp. SMP) tracing using a PCI analyzer
 // (e.g. x86).
diff -urN linux-2.5.1-pre4/drivers/scsi/cpqfcTSworker.c
linux-2.5.1-pre4-cpqfc_2.5.0/drivers/scsi/cpqfcTSworker.c
--- linux-2.5.1-pre4/drivers/scsi/cpqfcTSworker.c Thu Oct 25 14:53:50 2001
+++ linux-2.5.1-pre4-cpqfc_2.5.0/drivers/scsi/cpqfcTSworker.c Fri Nov 30 21:52:28 2001
@@ -227,7 +227,7 @@
     PCI_TRACE( 0x90)
     // first, take the IO lock so the SCSI upper layers can't call
     // into our _quecommand function (this also disables INTs)
- spin_lock_irqsave( &io_request_lock, flags); // STOP _que function
+ spin_lock_irqsave( &HostAdapter->host_lock, flags); // STOP _que function
     PCI_TRACE( 0x90)
          
     CPQ_SPINLOCK_HBA( cpqfcHBAdata)
@@ -241,7 +241,7 @@
     PCI_TRACE( 0x90)
 
     // release the IO lock (and re-enable interrupts)
- spin_unlock_irqrestore( &io_request_lock, flags);
+ spin_unlock_irqrestore( &HostAdapter->host_lock, flags);
 
     // disable OUR HBA interrupt (keep them off as much as possible
     // during error recovery)
@@ -3077,7 +3077,8 @@
   if( cpqfcHBAdata->BoardLock) // Worker Task Running?
     goto Skip;
 
- spin_lock_irqsave( &io_request_lock, flags); // STOP _que function
+ // STOP _que function
+ spin_lock_irqsave( &cpqfcHBAdata->HostAdapter->host_lock, flags);
 
   PCI_TRACE( 0xA8)
 
@@ -3085,7 +3086,7 @@
   cpqfcHBAdata->BoardLock = &BoardLock; // stop Linux SCSI command queuing
   
   // release the IO lock (and re-enable interrupts)
- spin_unlock_irqrestore( &io_request_lock, flags);
+ spin_unlock_irqrestore( &cpqfcHBAdata->HostAdapter->host_lock, flags);
   
   // Ensure no contention from _quecommand or Worker process
   CPQ_SPINLOCK_HBA( cpqfcHBAdata)

__________________________________________________
Do You Yahoo!?
Send your FREE holiday greetings online!
http://greetings.yahoo.com
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri Dec 07 2001 - 21:00:34 EST