All of lore.kernel.org
 help / color / mirror / Atom feed
* RE: ANNOUNCE: megaraid driver version 2.10.1
@ 2004-01-30 15:03 Mukker, Atul
  2004-01-30 15:40 ` Jeff Garzik
  0 siblings, 1 reply; 7+ messages in thread
From: Mukker, Atul @ 2004-01-30 15:03 UTC (permalink / raw)
  To: 'hch@infradead.org'
  Cc: 'James Bottomley', 'marcelo.tosatti@cyclades.com',
	Matt_Domsch, 'linux-kernel@vger.kernel.org',
	linux-scsi

Hello Christoph,

I am in process of testing the next version of the megaraid driver. I faced
an issue while doing the insmod-rmmod sequence. Your patch for PCI hotplug
does "pci_disable_device" when the driver is unloaded.

The insmod-rmmod-insmod fails the first time unless you do an explicit
pci_set_master at driver load time, since pci_enable_device does not seem to
enable bus mastering, which is disabled by pci_disable_device.

Even with pci_set_master, insmod stalls the CPU after about 2-3 hours of
insmod-rmmod sequence. So I took out the pci_disable_device altogether to
find out it takes only longer, about 9 hours, but CPU stalls at the exact
location again with a NMI watchdog. It happens when the driver issues the
first command to the FW, which is never received by it and driver gets stuck
in a forever cpu_relax loop waiting for the command to complete

After an hour or two I get "Unable to proc_mkdir in
scsi.c/build_proc_dir_entries", but that's another story.

The kernel is a genre of 2.4.21

Any ideas....

Thanks
-Atul Mukker
LSI Logic

> -----Original Message-----
> From: 'hch@infradead.org' [mailto:hch@infradead.org]
> Sent: Wednesday, January 14, 2004 4:22 AM
> To: Mukker, Atul
> Cc: 'hch@infradead.org'; 'James Bottomley';
> 'linux-kernel@vger.kernel.org'; linux-scsi@vger.kernel.org;
> 'marcelo.tosatti@cyclades.com'; Matt_Domsch@dell.com
> Subject: Re: ANNOUNCE: megaraid driver version 2.10.1
> 
> 
> On Tue, Jan 13, 2004 at 04:39:12PM -0500, Mukker, Atul wrote:
> > The changes in 2.6.1 are rather extensive, so it would be 
> sometime before
> > kernel 2.6.1 version of megaraid is sync'ed against 
> megaraid-2.10.1. Also,
> > we would like to backport the PCI hotplug changes to 2.4.x 
> kernel megaraid
> > as well.
> 
> The problem with backporting is that the 2.4 scsi layer is 
> not hot-plug aware,
> so while you can make the driver detect a newly inserted or 
> removed HBA there's
> no way to tell the SCSI midlayer.
> 
> > +#ifdef SCSI_HAS_HOST_LOCK
> > +#  if LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,9)
> > +		/* This is the Red Hat AS2.1 kernel */
> > +		adapter->host_lock = &adapter->lock;
> > +		host->lock = adapter->host_lock;
> > +#  elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
> > +		/* This is the later Red Hat 2.4 kernels */
> > +		adapter->host_lock = &adapter->lock;
> > +		host->host_lock = adapter->host_lock;
> > +#  else
> > +		/* This is the 2.6 and later kernel series */
> > +		adapter->host_lock = &adapter->lock;
> > +		scsi_set_host_lock(&adapter->lock);
> > +#  endif
> > +#else
> > +		/* And this is the remainder of the 2.4 kernel series */
> >  		adapter->host_lock = &io_request_lock;
> > +#endif
> 
> This is horribly ugly, but not your faul.  Any chance you could hide
> it into some macro ala megaraid_set_host_lock(adapter, host).
> 
> Also note that in 2.6 scsi_set_host_lock should and could 
> easily be avoided,
> just let your adapter->host_lock point to host->host_lock.
> 
> >  		if((adapter->flag & 
> BOARD_64BIT)&&(sizeof(dma_addr_t) == 8))
> > {
> > -			pci_set_dma_mask(pdev, 0xffffffffffffffff);
> > +			pci_set_dma_mask(pdev, 0xffffffffffffffffULL);
> 
> This needs error return checking.  Again this no regression 
> from the previous
> version, could you please fix it in the next update?
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread
* RE: ANNOUNCE: megaraid driver version 2.10.1
@ 2004-01-13 21:39 Mukker, Atul
  2004-01-14  9:22 ` 'hch@infradead.org'
  0 siblings, 1 reply; 7+ messages in thread
From: Mukker, Atul @ 2004-01-13 21:39 UTC (permalink / raw)
  To: 'hch@infradead.org', 'James Bottomley'
  Cc: 'linux-kernel@vger.kernel.org',
	linux-scsi, 'torvalds@osdl.org',
	'marcelo.tosatti@cyclades.com',
	Matt_Domsch

> > The megaraid driver version 2.10.1 is released and can be 
> downloaded from
> > ftp://ftp.lsil.com/pub/linux-megaraid/drivers/version-2.10.1/
> > 
> > Following other components are also available at this location:
> > i.	Patches for Red Hat and SuSE stock kernels
> 
> Can't find patches for mainline anywhere.  Also it's usually a good
> idea to send the _patches_ to lkml for review.
I have inlined the patch for driver against kernel 2.4.24 version driver. It
is also available at
ftp://ftp.lsil.com/pub/linux-megaraid/drivers/version-2.10.1/megaraid-linux-
2.4.24-megaraid-2.10.1.patch

Marcelo:
Please update your tree with the latest megaraid 2.10.1 using this patch

> 
> I've diffed the driver against the 2.4 megaraid2 driver and it looks
> mostly sane, the 2.6 version OTOH copletly backs out the changes that
> went into the driver from outside LSI.  Please try to port the changes
> you made to the driver in 2.6.1.
> 
The changes in 2.6.1 are rather extensive, so it would be sometime before
kernel 2.6.1 version of megaraid is sync'ed against megaraid-2.10.1. Also,
we would like to backport the PCI hotplug changes to 2.4.x kernel megaraid
as well.

diff -Naur megaraid-linux-2.4.24/changelog.megaraid2
megaraid-2.10.1/changelog.megaraid2
--- megaraid-linux-2.4.24/changelog.megaraid2	2004-01-13
17:22:25.000000000 -0500
+++ megaraid-2.10.1/changelog.megaraid2	2004-01-13 17:22:57.000000000 -0500
@@ -1,3 +1,31 @@
+### Version 2.10.1
+Wed Dec  3 15:34:42 EST 2003 - Atul Mukker <atulm@lsil.com>
+1.	pci_dma_sync_sg(), 2nd argument is pointer to scatter-gather list.
All
+	previous drivers have a pointer which is incremented beyond the end
of
+	the scatter-gather list
+2.	Remove 'ipdev', pci device pointer, to allocate memory for internal
+	commands. pci_alloc_consistent() guaranteed to allocate memory below
+	4GB, which is a requirement for these commands -
+		Tom Coughlan <coughlan@redhat.com>
+3.	Added support for LSI SATA PCI-X controllers
+4.	Advanced Server 3.0 version of the driver is the reference driver
now.
+	For all other kernels, we create patches.
+5.	Removed superfluous white spaces.
+6.	Corrected some comments
+
+### Version 2.10.0
+Tue Nov  4 14:33:43 EST 2003 - Atul Mukker <atulm@lsil.com>
+1.	Added vendor ids and device ids for PCI-Express controllers,
+	PERC4E/Si, PERC4E/Di, PERC4E/DC, PERC4E/SC
+2.	Backport some minor changes from 2.6 kernel version of the driver.
+
+### Version 2.00.9a
+Fri Oct  3 18:04:29 EDT 2003 - Atul Mukker <atulm@lsil.com>
+1.	Minor changes which are brough in when sync'ing with kernel
2.9-test6.
+2.	Use sizeof(mbox_t) in synchronous routines instead of hard-coded
value
+	of 16 bytes.
+3.	De-couple adapter->host->pci_dev. Replace with adapter->pdev
+
 ### Version 2.00.9
 Thu Sep  4 17:49:42 EDT 2003 - Atul Mukker <atulm@lsil.com>
 i.	For extended passthru commands, 64-bit scatter-gather list and
64-bit
diff -Naur megaraid-linux-2.4.24/megaraid2.c megaraid-2.10.1/megaraid2.c
--- megaraid-linux-2.4.24/megaraid2.c	2004-01-13 15:57:56.000000000 -0500
+++ megaraid-2.10.1/megaraid2.c	2004-01-13 17:17:52.000000000 -0500
@@ -14,7 +14,7 @@
  *	  - speed-ups (list handling fixes, issued_list, optimizations.)
  *	  - lots of cleanups.
  *
- * Version : v2.00.9 (Sep 04, 2003) - Atul Mukker <Atul.Mukker@lsil.com>
+ * Version : v2.10.1 (Dec 03, 2003) - Atul Mukker <Atul.Mukker@lsil.com>
  *
  * Description: Linux device driver for LSI Logic MegaRAID controller
  *
@@ -102,7 +102,7 @@
 static struct mcontroller mcontroller[MAX_CONTROLLERS];
 
 /* The current driver version */
-static u32 driver_ver = 0x02000000;
+static u32 driver_ver = 0x02100000;
 
 /* major number used by the device for character interface */
 static int major;
@@ -142,6 +142,7 @@
  * products. All of them share the same vendor id, device id, and subsystem
  * vendor id but different subsystem ids. As of now, driver does not use
the
  * subsystem id.
+ * PERC4E device ids are for the PCI-Express controllers
  */
 static int
 megaraid_detect(Scsi_Host_Template *host_template)
@@ -150,13 +151,16 @@
 	u16	dev_sw_table[] = {	/* Table of all supported
 					   vendor/device ids */
 
-		PCI_VENDOR_ID_DELL,		PCI_DEVICE_ID_DISCOVERY, 
-		PCI_VENDOR_ID_DELL,		PCI_DEVICE_ID_PERC4_DI, 
-		PCI_VENDOR_ID_LSI_LOGIC,
PCI_DEVICE_ID_PERC4_QC_VERDE, 
-		PCI_VENDOR_ID_AMI,		PCI_DEVICE_ID_AMI_MEGARAID, 
-		PCI_VENDOR_ID_AMI,		PCI_DEVICE_ID_AMI_MEGARAID2,

-		PCI_VENDOR_ID_AMI,		PCI_DEVICE_ID_AMI_MEGARAID3,

-		PCI_VENDOR_ID_INTEL,		PCI_DEVICE_ID_AMI_MEGARAID3,

+		PCI_VENDOR_ID_LSI_LOGIC,	PCI_DEVICE_ID_LSI_SATA_PCIX,
+		PCI_VENDOR_ID_LSI_LOGIC,	PCI_DEVICE_ID_PERC4E_DC_SC,
+		PCI_VENDOR_ID_DELL,		PCI_DEVICE_ID_PERC4E_SI_DI,
+		PCI_VENDOR_ID_DELL,		PCI_DEVICE_ID_DISCOVERY,
+		PCI_VENDOR_ID_DELL,		PCI_DEVICE_ID_PERC4_DI,
+		PCI_VENDOR_ID_LSI_LOGIC,
PCI_DEVICE_ID_PERC4_QC_VERDE,
+		PCI_VENDOR_ID_AMI,		PCI_DEVICE_ID_AMI_MEGARAID,
+		PCI_VENDOR_ID_AMI,		PCI_DEVICE_ID_AMI_MEGARAID2,
+		PCI_VENDOR_ID_AMI,		PCI_DEVICE_ID_AMI_MEGARAID3,
+		PCI_VENDOR_ID_INTEL,		PCI_DEVICE_ID_AMI_MEGARAID3,
 		PCI_VENDOR_ID_LSI_LOGIC,	PCI_DEVICE_ID_AMI_MEGARAID3
};
 
 
@@ -246,7 +250,6 @@
 	u8	did_ioremap_f = 0;
 	u8	did_req_region_f = 0;
 	u8	did_scsi_reg_f = 0;
-	u8	got_ipdev_f = 0;
 	u8	alloc_int_buf_f = 0;
 	u8	alloc_scb_f = 0;
 	u8	got_irq_f = 0;
@@ -261,7 +264,6 @@
 		did_ioremap_f = 0;
 		did_req_region_f = 0;
 		did_scsi_reg_f = 0;
-		got_ipdev_f = 0;
 		alloc_int_buf_f = 0;
 		alloc_scb_f = 0;
 		got_irq_f = 0;
@@ -277,9 +279,15 @@
 		 * valid and 64 bit is implicit
 		 */
 		if( (pci_vendor == PCI_VENDOR_ID_DELL &&
-			pci_device == PCI_DEVICE_ID_PERC4_DI) ||
+				pci_device == PCI_DEVICE_ID_PERC4_DI) ||
 			(pci_vendor == PCI_VENDOR_ID_LSI_LOGIC &&
-			pci_device == PCI_DEVICE_ID_PERC4_QC_VERDE) ) {
+				pci_device == PCI_DEVICE_ID_PERC4_QC_VERDE)
||
+			(pci_vendor == PCI_VENDOR_ID_LSI_LOGIC &&
+				pci_device == PCI_DEVICE_ID_PERC4E_DC_SC) ||
+			(pci_vendor == PCI_VENDOR_ID_DELL &&
+				pci_device == PCI_DEVICE_ID_PERC4E_SI_DI) ||
+			(pci_vendor == PCI_VENDOR_ID_LSI_LOGIC &&
+				pci_device == PCI_DEVICE_ID_LSI_SATA_PCIX))
{
 
 			flag |= BOARD_64BIT;
 		}
@@ -367,21 +375,6 @@
 		adapter = (adapter_t *)host->hostdata;
 		memset(adapter, 0, sizeof(adapter_t));
 
-		/*
-		 * Allocate a pci device structure for allocations done
-		 * internally - all of which would be in memory <4GB
-		 */
-		adapter->ipdev = kmalloc(sizeof(struct pci_dev),
GFP_KERNEL);
-
-		if( adapter->ipdev == NULL ) goto fail_attach;
-
-		got_ipdev_f = 1;
-
-		memcpy(adapter->ipdev, pdev, sizeof(struct pci_dev));
-
-		if( pci_set_dma_mask(adapter->ipdev, 0xffffffff) != 0 )
-			goto fail_attach;
-
 		printk(KERN_NOTICE
 			"scsi%d:Found MegaRAID controller at 0x%lx,
IRQ:%d\n",
 			host->host_no, mega_baseport, irq);
@@ -395,10 +388,24 @@
 		adapter->flag = flag;
 		spin_lock_init(&adapter->lock);
 
-		// replace adapter->lock with io_request_lock for kernels
w/o
-		// per host lock and delete the line which tries to
initialize
-		// the lock in host structure.
+#ifdef SCSI_HAS_HOST_LOCK
+#  if LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,9)
+		/* This is the Red Hat AS2.1 kernel */
+		adapter->host_lock = &adapter->lock;
+		host->lock = adapter->host_lock;
+#  elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
+		/* This is the later Red Hat 2.4 kernels */
+		adapter->host_lock = &adapter->lock;
+		host->host_lock = adapter->host_lock;
+#  else
+		/* This is the 2.6 and later kernel series */
+		adapter->host_lock = &adapter->lock;
+		scsi_set_host_lock(&adapter->lock);
+#  endif
+#else
+		/* And this is the remainder of the 2.4 kernel series */
 		adapter->host_lock = &io_request_lock;
+#endif
 
 		host->cmd_per_lun = max_cmd_per_lun;
 		host->max_sectors = max_sectors_per_io;
@@ -613,14 +620,14 @@
 
 		/* Set the Mode of addressing to 64 bit if we can */
 		if((adapter->flag & BOARD_64BIT)&&(sizeof(dma_addr_t) == 8))
{
-			pci_set_dma_mask(pdev, 0xffffffffffffffff);
+			pci_set_dma_mask(pdev, 0xffffffffffffffffULL);
 			adapter->has_64bit_addr = 1;
 		}
 		else  {
 			pci_set_dma_mask(pdev, 0xffffffff);
 			adapter->has_64bit_addr = 0;
 		}
-		
+
 		init_MUTEX(&adapter->int_mtx);
 		init_waitqueue_head(&adapter->int_waitq);
 
@@ -669,8 +676,6 @@
 					adapter->buf_dma_handle);
 		}
 
-		if( got_ipdev_f ) kfree(adapter->ipdev);
-
 		if( did_scsi_reg_f ) scsi_unregister(host);
 
 		if( did_ioremap_f ) {
@@ -701,7 +706,7 @@
 			sizeof(mbox64_t), &adapter->una_mbox64_dma);
 
 	if( !adapter->una_mbox64 ) return -1;
-		
+
 	adapter->mbox = &adapter->una_mbox64->mbox;
 
 	adapter->mbox = (mbox_t *)((((unsigned long) adapter->mbox) + 15) &
@@ -754,7 +759,7 @@
 {
 	dma_addr_t	prod_info_dma_handle;
 	mega_inquiry3	*inquiry3;
-	u8	raw_mbox[16];
+	u8	raw_mbox[sizeof(mbox_t)];
 	mbox_t	*mbox;
 	int	retval;
 
@@ -763,7 +768,7 @@
 	mbox = (mbox_t *)raw_mbox;
 
 	memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
-	memset(mbox, 0, 16);
+	memset(raw_mbox, 0, sizeof(raw_mbox));
 
 	/*
 	 * Try to issue Inquiry3 command
@@ -1695,21 +1700,22 @@
 	u8	status;
 	int	i;
 
-	raw_mbox[0x1] = 0xFE;	/* Set cmdid */
-	raw_mbox[0xF] = 1;	/* Set busy */
-
 	/* Wait until mailbox is free */
 	if(mega_busywait_mbox (adapter))
 		goto bug_blocked_mailbox;
 
 	/* Copy mailbox data into host structure */
-	memcpy((char *) mbox, raw_mbox, 16);
+	memcpy((char *)mbox, raw_mbox, 16);
+	mbox->cmdid = 0xFE;
+	mbox->busy = 1;
 
 	switch (raw_mbox[0]) {
+	case MEGA_MBOXCMD_EXTPTHRU:
+		if( !adapter->has_64bit_addr ) break;
+		// else fall through
 	case MEGA_MBOXCMD_LREAD64:
 	case MEGA_MBOXCMD_LWRITE64:
 	case MEGA_MBOXCMD_PASSTHRU64:
-	case MEGA_MBOXCMD_EXTPTHRU:
 		mbox64->xfer_segment_lo = mbox->xferaddr;
 		mbox64->xfer_segment_hi = 0;
 		mbox->xferaddr = 0xFFFFFFFF;
@@ -1989,6 +1995,7 @@
 	Scsi_Cmnd	*cmd = NULL;
 	mega_passthru	*pthru = NULL;
 	mbox_t	*mbox = NULL;
+	int	islogical;
 	u8	c;
 	scb_t	*scb;
 	int	cmdid;
@@ -2072,9 +2079,10 @@
 #if MEGA_HAVE_STATS
 			{
 
-			int	islogical =
adapter->logdrv_chan[cmd->channel];
 			int	logdrv = mbox->logdrv;
 
+			islogical = adapter->logdrv_chan[cmd->channel];
+
 			/*
 			 * Maintain an error counter for the logical drive.
 			 * Some application like SNMP agent need such
@@ -2110,23 +2118,21 @@
 		 * hard disk and not logical, request should return failure!
-
 		 * PJ
 		 */
-		if(cmd->cmnd[0] == INQUIRY) {
-			int islogical = adapter->logdrv_chan[cmd->channel];
+		islogical = adapter->logdrv_chan[cmd->channel];
+		if (cmd->cmnd[0] == INQUIRY && !islogical) {
 
-			if(!islogical) {
-				if( cmd->use_sg ) {
-					sgl = (struct scatterlist *)
-						cmd->request_buffer;
-					c = *(u8 *)sgl[0].address;
-				}
-				else {
-					c = *(u8 *)cmd->request_buffer;
-				}
+			if( cmd->use_sg ) {
+				sgl = (struct scatterlist *)
+					cmd->request_buffer;
+				c = *(u8 *)sgl[0].address;
+			}
+			else {
+				c = *(u8 *)cmd->request_buffer;
+			}
 
-				if(IS_RAID_CH(adapter, cmd->channel) &&
-						((c & 0x1F ) == TYPE_DISK))
{
-					status = 0xF0;
-				}
+			if(IS_RAID_CH(adapter, cmd->channel) &&
+					((c & 0x1F ) == TYPE_DISK)) {
+				status = 0xF0;
 			}
 		}
 
@@ -2243,12 +2249,11 @@
 		break;
 
 	case MEGA_BULK_DATA:
-		pci_unmap_page(adapter->host->pci_dev, scb->dma_h_bulkdata,
+		pci_unmap_page(adapter->dev, scb->dma_h_bulkdata,
 			scb->cmd->request_bufflen, scb->dma_direction);
 
 		if( scb->dma_direction == PCI_DMA_FROMDEVICE ) {
-			pci_dma_sync_single(adapter->host->pci_dev,
-					scb->dma_h_bulkdata,
+			pci_dma_sync_single(adapter->dev,
scb->dma_h_bulkdata,
 					scb->cmd->request_bufflen,
 					PCI_DMA_FROMDEVICE);
 		}
@@ -2256,12 +2261,11 @@
 		break;
 
 	case MEGA_SGLIST:
-		pci_unmap_sg(adapter->host->pci_dev,
scb->cmd->request_buffer,
+		pci_unmap_sg(adapter->dev, scb->cmd->request_buffer,
 			scb->cmd->use_sg, scb->dma_direction);
 
 		if( scb->dma_direction == PCI_DMA_FROMDEVICE ) {
-			pci_dma_sync_sg(adapter->host->pci_dev,
-					scb->cmd->request_buffer,
+			pci_dma_sync_sg(adapter->dev,
scb->cmd->request_buffer,
 					scb->cmd->use_sg,
PCI_DMA_FROMDEVICE);
 		}
 
@@ -2332,8 +2336,7 @@
 
 		offset = ((unsigned long)cmd->request_buffer & ~PAGE_MASK);
 
-		scb->dma_h_bulkdata = pci_map_page(adapter->host->pci_dev,
-						  page, offset,
+		scb->dma_h_bulkdata = pci_map_page(adapter->dev, page,
offset,
 						  cmd->request_bufflen,
 						  scb->dma_direction);
 		scb->dma_type = MEGA_BULK_DATA;
@@ -2355,7 +2358,7 @@
 		}
 
 		if( scb->dma_direction == PCI_DMA_TODEVICE ) {
-			pci_dma_sync_single(adapter->host->pci_dev,
+			pci_dma_sync_single(adapter->dev,
 					scb->dma_h_bulkdata,
 					cmd->request_bufflen,
 					PCI_DMA_TODEVICE);
@@ -2371,8 +2374,7 @@
 	 *
 	 * The number of sg elements returned must not exceed our limit
 	 */
-	sgcnt = pci_map_sg(adapter->host->pci_dev, sgl, cmd->use_sg,
-			scb->dma_direction);
+	sgcnt = pci_map_sg(adapter->dev, sgl, cmd->use_sg,
scb->dma_direction);
 
 	scb->dma_type = MEGA_SGLIST;
 
@@ -2400,8 +2402,8 @@
 	*len = (u32)cmd->request_bufflen;
 
 	if( scb->dma_direction == PCI_DMA_TODEVICE ) {
-		pci_dma_sync_sg(adapter->host->pci_dev, cmd->request_buffer,
cmd->use_sg,
-				PCI_DMA_TODEVICE);
+		pci_dma_sync_sg(adapter->dev, cmd->request_buffer,
+				cmd->use_sg, PCI_DMA_TODEVICE);
 	}
 
 	/* Return count of SG requests */
@@ -2458,7 +2460,7 @@
 {
 	adapter_t	*adapter;
 	mbox_t	*mbox;
-	u_char	raw_mbox[16];
+	u_char	raw_mbox[sizeof(mbox_t)];
 #ifdef CONFIG_PROC_FS
 	char	buf[12] = { 0 };
 #endif
@@ -2469,7 +2471,7 @@
 	printk(KERN_NOTICE "megaraid: being unloaded...");
 
 	/* Flush adapter cache */
-	memset(mbox, 0, 16);
+	memset(raw_mbox, 0, sizeof(raw_mbox));
 	raw_mbox[0] = FLUSH_ADAPTER;
 
 	irq_disable(adapter);
@@ -2479,7 +2481,7 @@
 	issue_scb_block(adapter, raw_mbox);
 
 	/* Flush disks cache */
-	memset(mbox, 0, 16);
+	memset(raw_mbox, 0, sizeof(raw_mbox));
 	raw_mbox[0] = FLUSH_SYSTEM;
 
 	/* Issue a blocking (interrupts disabled) command to the card */
@@ -2540,8 +2542,6 @@
 	pci_free_consistent(adapter->dev, sizeof(mbox64_t),
 			(void *)adapter->una_mbox64,
adapter->una_mbox64_dma);
 
-	kfree(adapter->ipdev);
-
 	hba_count--;
 
 	if( hba_count == 0 ) {
@@ -2723,7 +2723,7 @@
 		 */
 		if( !(iter % 1000) ) {
 			printk(
-			"megarid: Waiting for %d commands to flush:
iter:%ld\n",
+			"megaraid: Waiting for %d commands to flush:
iter:%ld\n",
 				atomic_read(&adapter->pend_cmds), iter);
 		}
 
@@ -2742,7 +2742,7 @@
 
 	if( rval == SUCCESS ) {
 		printk(KERN_INFO
-			"megaraid: abort sequence successfully
complete.\n");
+			"megaraid: abort sequence successfully
completed.\n");
 	}
 
 	return rval;
@@ -2803,7 +2803,7 @@
 		 */
 		if( !(iter % 1000) ) {
 			printk(
-			"megarid: Waiting for %d commands to flush:
iter:%ld\n",
+			"megaraid: Waiting for %d commands to flush:
iter:%ld\n",
 				atomic_read(&adapter->pend_cmds), iter);
 		}
 
@@ -2822,7 +2822,7 @@
 
 	if( rval == SUCCESS ) {
 		printk(KERN_INFO
-			"megaraid: reset sequence successfully
complete.\n");
+			"megaraid: reset sequence successfully
completed.\n");
 	}
 
 	return rval;
@@ -2953,7 +2953,7 @@
 	len += sprintf(page+len, "Base = %08lx, Irq = %d, ", adapter->base,
 			adapter->host->irq);
 
-	len += sprintf(page+len, "Logical Drives = %d, Channels = %d\n",
+	len += sprintf(page+len, "Initial Logical Drives = %d, Channels =
%d\n",
 			adapter->numldrv, adapter->product_info.nchannels);
 
 	len += sprintf(page+len, "Version =%s:%s, DRAM = %dMb\n",
@@ -3109,7 +3109,7 @@
 	struct pci_dev	*pdev;
 	int	len = 0;
 
-	pdev = adapter->ipdev;
+	pdev = adapter->dev;
 
 	if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) {
 		*eof = 1;
@@ -3171,7 +3171,7 @@
 	char	str[256];
 	int	len = 0;
 
-	pdev = adapter->ipdev;
+	pdev = adapter->dev;
 
 	if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) {
 		*eof = 1;
@@ -3209,22 +3209,22 @@
 
 	if(battery_status & MEGA_BATT_MODULE_MISSING)
 		strcat(str, " Module Missing");
-	
+
 	if(battery_status & MEGA_BATT_LOW_VOLTAGE)
 		strcat(str, " Low Voltage");
-	
+
 	if(battery_status & MEGA_BATT_TEMP_HIGH)
 		strcat(str, " Temperature High");
-	
+
 	if(battery_status & MEGA_BATT_PACK_MISSING)
 		strcat(str, " Pack Missing");
-	
+
 	if(battery_status & MEGA_BATT_CHARGE_INPROG)
 		strcat(str, " Charge In-progress");
-	
+
 	if(battery_status & MEGA_BATT_CHARGE_FAIL)
 		strcat(str, " Charge Fail");
-	
+
 	if(battery_status & MEGA_BATT_CYCLES_EXCEEDED)
 		strcat(str, " Cycles Exceeded");
 
@@ -3354,7 +3354,7 @@
 	char	str[80];
 	int	i;
 
-	pdev = adapter->ipdev;
+	pdev = adapter->dev;
 
 	if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) {
 		return len;
@@ -3403,32 +3403,27 @@
 		switch( state & 0x0F ) {
 
 		case PDRV_ONLINE:
-			sprintf(str,
-			"Channel:%2d Id:%2d State: Online",
+			sprintf(str, "Channel:%2d Id:%2d State: Online",
 				channel, tgt);
 			break;
 
 		case PDRV_FAILED:
-			sprintf(str,
-			"Channel:%2d Id:%2d State: Failed",
+			sprintf(str, "Channel:%2d Id:%2d State: Failed",
 				channel, tgt);
 			break;
 
 		case PDRV_RBLD:
-			sprintf(str,
-			"Channel:%2d Id:%2d State: Rebuild",
+			sprintf(str, "Channel:%2d Id:%2d State: Rebuild",
 				channel, tgt);
 			break;
 
 		case PDRV_HOTSPARE:
-			sprintf(str,
-			"Channel:%2d Id:%2d State: Hot spare",
+			sprintf(str, "Channel:%2d Id:%2d State: Hot spare",
 				channel, tgt);
 			break;
 
 		default:
-			sprintf(str,
-			"Channel:%2d Id:%2d State: Un-configured",
+			sprintf(str, "Channel:%2d Id:%2d State:
Un-configured",
 				channel, tgt);
 			break;
 
@@ -3543,7 +3538,7 @@
  * @eof - set if no more data needs to be returned
  * @data - pointer to our soft state
  *
- * Display real time information about the logical drives 0 through 9.
+ * Display real time information about the logical drives 10 through 19.
  */
 static int
 proc_rdrv_20(char *page, char **start, off_t offset, int count, int *eof,
@@ -3566,7 +3561,7 @@
  * @eof - set if no more data needs to be returned
  * @data - pointer to our soft state
  *
- * Display real time information about the logical drives 0 through 9.
+ * Display real time information about the logical drives 20 through 29.
  */
 static int
 proc_rdrv_30(char *page, char **start, off_t offset, int count, int *eof,
@@ -3589,7 +3584,7 @@
  * @eof - set if no more data needs to be returned
  * @data - pointer to our soft state
  *
- * Display real time information about the logical drives 0 through 9.
+ * Display real time information about the logical drives 30 through 39.
  */
 static int
 proc_rdrv_40(char *page, char **start, off_t offset, int count, int *eof,
@@ -3614,7 +3609,7 @@
  * /proc/scsi/scsi interface
  */
 static int
-proc_rdrv(adapter_t *adapter, char *page, int start, int end )
+proc_rdrv(adapter_t *adapter, char *page, int start, int end)
 {
 	dma_addr_t	dma_handle;
 	logdrv_param	*lparam;
@@ -3630,7 +3625,7 @@
 	int	i;
 	u8	span8_flag = 1;
 
-	pdev = adapter->ipdev;
+	pdev = adapter->dev;
 
 	if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) {
 		return len;
@@ -3650,7 +3645,7 @@
 	memset(&mc, 0, sizeof(megacmd_t));
 
 	if( adapter->flag & BOARD_40LD ) {
-		
+
 		array_sz = sizeof(disk_array_40ld);
 
 		rdrv_state = ((mega_inquiry3 *)inquiry)->ldrv_state;
@@ -3747,7 +3742,7 @@
 			else {
 				lparam = (logdrv_param*)
&((diskarray_span4_t*)
 						(disk_array))->log_drv[i];
-			}	
+			}
 		}
 
 		/*
@@ -3792,7 +3787,7 @@
 			len += sprintf(page+len,
 					", initialization in progress");
 		}
-		
+
 		len += sprintf(page+len, "\n");
 
 		len += sprintf(page+len, "Span depth:%3d, ",
@@ -3966,7 +3961,7 @@
 
 	if (blksize_size[ma])
 		block = blksize_size[ma][mi];
-		
+
 	if (!(bh = bread(MKDEV(ma,mi), 0, block)))
 		return -1;
 
@@ -4026,7 +4021,7 @@
 {
 	adapter_t *adapter;
 	struct Scsi_Host *host;
-	u8 raw_mbox[16];
+	u8 raw_mbox[sizeof(mbox_t)];
 	mbox_t *mbox;
 	int i;
 
@@ -4042,7 +4037,7 @@
 		mbox = (mbox_t *)raw_mbox;
 
 		/* Flush adapter cache */
-		memset(mbox, 0, 16);
+		memset(raw_mbox, 0, sizeof(raw_mbox));
 		raw_mbox[0] = FLUSH_ADAPTER;
 
 		irq_disable(adapter);
@@ -4055,7 +4050,7 @@
 		issue_scb_block(adapter, raw_mbox);
 
 		/* Flush disks cache */
-		memset(mbox, 0, 16);
+		memset(raw_mbox, 0, sizeof(raw_mbox));
 		raw_mbox[0] = FLUSH_SYSTEM;
 
 		issue_scb_block(adapter, raw_mbox);
@@ -4374,7 +4369,7 @@
 		 * For all internal commands, the buffer must be allocated
in
 		 * <4GB address range
 		 */
-		pdev = adapter->ipdev;
+		pdev = adapter->dev;
 
 		/* Is it a passthru command or a DCMD */
 		if( uioc.uioc_rmbox[0] == MEGA_MBOXCMD_PASSTHRU ) {
@@ -4786,13 +4781,13 @@
 static int
 mega_is_bios_enabled(adapter_t *adapter)
 {
-	unsigned char	raw_mbox[16];
+	unsigned char	raw_mbox[sizeof(mbox_t)];
 	mbox_t	*mbox;
 	int	ret;
 
 	mbox = (mbox_t *)raw_mbox;
 
-	memset(mbox, 0, 16);
+	memset(raw_mbox, 0, sizeof(raw_mbox));
 
 	memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
 
@@ -4819,13 +4814,13 @@
 static void
 mega_enum_raid_scsi(adapter_t *adapter)
 {
-	unsigned char raw_mbox[16];
+	unsigned char raw_mbox[sizeof(mbox_t)];
 	mbox_t *mbox;
 	int i;
 
 	mbox = (mbox_t *)raw_mbox;
 
-	memset(mbox, 0, 16);
+	memset(raw_mbox, 0, sizeof(raw_mbox));
 
 	/*
 	 * issue command to find out what channels are raid/scsi
@@ -4848,7 +4843,7 @@
 
 	}
 
-	for( i = 0; i < adapter->product_info.nchannels; i++ ) { 
+	for( i = 0; i < adapter->product_info.nchannels; i++ ) {
 		if( (adapter->mega_ch_class >> i) & 0x01 ) {
 			printk(KERN_INFO "megaraid: channel[%d] is raid.\n",
 					i);
@@ -4874,7 +4869,7 @@
 mega_get_boot_drv(adapter_t *adapter)
 {
 	struct private_bios_data	*prv_bios_data;
-	unsigned char	raw_mbox[16];
+	unsigned char	raw_mbox[sizeof(mbox_t)];
 	mbox_t	*mbox;
 	u16	cksum = 0;
 	u8	*cksum_p;
@@ -4883,7 +4878,7 @@
 
 	mbox = (mbox_t *)raw_mbox;
 
-	memset(mbox, 0, sizeof(raw_mbox));
+	memset(raw_mbox, 0, sizeof(raw_mbox));
 
 	raw_mbox[0] = BIOS_PVT_DATA;
 	raw_mbox[2] = GET_BIOS_PVT_DATA;
@@ -4940,13 +4935,13 @@
 static int
 mega_support_random_del(adapter_t *adapter)
 {
-	unsigned char raw_mbox[16];
+	unsigned char raw_mbox[sizeof(mbox_t)];
 	mbox_t *mbox;
 	int rval;
 
 	mbox = (mbox_t *)raw_mbox;
 
-	memset(mbox, 0, 16);
+	memset(raw_mbox, 0, sizeof(raw_mbox));
 
 	/*
 	 * issue command
@@ -4969,13 +4964,13 @@
 static int
 mega_support_ext_cdb(adapter_t *adapter)
 {
-	unsigned char raw_mbox[16];
+	unsigned char raw_mbox[sizeof(mbox_t)];
 	mbox_t *mbox;
 	int rval;
 
 	mbox = (mbox_t *)raw_mbox;
 
-	memset(mbox, 0, 16);
+	memset(raw_mbox, 0, sizeof(raw_mbox));
 	/*
 	 * issue command to find out if controller supports extended CDBs.
 	 */
@@ -5053,7 +5048,9 @@
 mega_do_del_logdrv(adapter_t *adapter, int logdrv)
 {
 	int	rval;
-	u8	raw_mbox[16];
+	u8	raw_mbox[sizeof(mbox_t)];
+
+	memset(raw_mbox, 0, sizeof(raw_mbox));
 
 	raw_mbox[0] = FC_DEL_LOGDRV;
 	raw_mbox[2] = OP_DEL_LOGDRV;
@@ -5088,12 +5085,12 @@
 static void
 mega_get_max_sgl(adapter_t *adapter)
 {
-	unsigned char	raw_mbox[16];
+	unsigned char	raw_mbox[sizeof(mbox_t)];
 	mbox_t	*mbox;
 
 	mbox = (mbox_t *)raw_mbox;
 
-	memset(mbox, 0, sizeof(raw_mbox));
+	memset(raw_mbox, 0, sizeof(raw_mbox));
 
 	memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
 
@@ -5111,7 +5108,7 @@
 	}
 	else {
 		adapter->sglen = *((char *)adapter->mega_buffer);
-		
+
 		/*
 		 * Make sure this is not more than the resources we are
 		 * planning to allocate
@@ -5133,12 +5130,12 @@
 static int
 mega_support_cluster(adapter_t *adapter)
 {
-	unsigned char	raw_mbox[16];
+	unsigned char	raw_mbox[sizeof(mbox_t)];
 	mbox_t	*mbox;
 
 	mbox = (mbox_t *)raw_mbox;
 
-	memset(mbox, 0, sizeof(raw_mbox));
+	memset(raw_mbox, 0, sizeof(raw_mbox));
 
 	memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
 
@@ -5183,7 +5180,7 @@
 	int		ldrv_num;
 
 	tgt = cmd->target;
-	
+
 	if ( tgt > adapter->this_id )
 		tgt--;	/* we do not get inquires for initiator id */
 
@@ -5485,7 +5482,7 @@
 	 * For all internal commands, the buffer must be allocated in <4GB
 	 * address range
 	 */
-	pdev = adapter->ipdev;
+	pdev = adapter->dev;
 
 	pthru = pci_alloc_consistent(pdev, sizeof(mega_passthru),
 			&pthru_dma_handle);
diff -Naur megaraid-linux-2.4.24/megaraid2.h megaraid-2.10.1/megaraid2.h
--- megaraid-linux-2.4.24/megaraid2.h	2004-01-13 15:57:56.000000000 -0500
+++ megaraid-2.10.1/megaraid2.h	2004-01-13 17:26:38.000000000 -0500
@@ -6,7 +6,7 @@
 
 
 #define MEGARAID_VERSION	\
-	"v2.00.9 (Release Date: Thu Sep  4 17:49:42 EDT 2003)\n"
+	"v2.10.1 (Release Date: Wed Dec  3 15:34:42 EST 2003)\n"
 
 /*
  * Driver features - change the values to enable or disable features in the
@@ -77,6 +77,9 @@
 #define PCI_DEVICE_ID_DISCOVERY		0x000E
 #define PCI_DEVICE_ID_PERC4_DI		0x000F
 #define PCI_DEVICE_ID_PERC4_QC_VERDE	0x0407
+#define PCI_DEVICE_ID_PERC4E_SI_DI	0x0013
+#define PCI_DEVICE_ID_PERC4E_DC_SC	0x0408
+#define PCI_DEVICE_ID_LSI_SATA_PCIX	0x0409
 
 /* Sub-System Vendor IDs */
 #define	AMI_SUBSYS_VID			0x101E
@@ -520,10 +523,10 @@
 
 typedef struct  {
 	unsigned char	channel;
-	unsigned char	target; 
+	unsigned char	target;
 }__attribute__ ((packed)) device_t;
 
-typedef struct { 
+typedef struct {
 	unsigned long	start_blk;
 	unsigned long	total_blks;
 	device_t	device[ MAX_STRIPES ];
@@ -537,38 +540,38 @@
 	unsigned long	size;
 }__attribute__ ((packed)) phydrv_t;
 
-typedef struct { 
+typedef struct {
 	unsigned char	span_depth;
 	unsigned char	raid;
-	unsigned char	read_ahead;	/* 0=No rdahead,1=RDAHEAD,2=adaptive
*/ 
+	unsigned char	read_ahead;	/* 0=No rdahead,1=RDAHEAD,2=adaptive
*/
 	unsigned char	stripe_sz;
 	unsigned char	status;
-	unsigned char	write_policy;	/* 0=wrthru,1=wrbak */ 
-	unsigned char	direct_io;   	/* 1=directio,0=cached */ 
+	unsigned char	write_policy;	/* 0=wrthru,1=wrbak */
+	unsigned char	direct_io;   	/* 1=directio,0=cached */
 	unsigned char	no_stripes;
 	span_t		span[ SPAN4_DEPTH ];
 }__attribute__ ((packed)) ld_span4_t;
 
-typedef struct { 
+typedef struct {
 	unsigned char	span_depth;
 	unsigned char	raid;
-	unsigned char	read_ahead;	/* 0=No rdahead,1=RDAHEAD,2=adaptive
*/ 
+	unsigned char	read_ahead;	/* 0=No rdahead,1=RDAHEAD,2=adaptive
*/
 	unsigned char	stripe_sz;
 	unsigned char	status;
-	unsigned char	write_policy;	/* 0=wrthru,1=wrbak */ 
-	unsigned char	direct_io;   	/* 1=directio,0=cached */ 
+	unsigned char	write_policy;	/* 0=wrthru,1=wrbak */
+	unsigned char	direct_io;   	/* 1=directio,0=cached */
 	unsigned char	no_stripes;
 	span_t		span[ SPAN8_DEPTH ];
 }__attribute__ ((packed)) ld_span8_t;
 
-typedef struct { 
+typedef struct {
 	unsigned char	no_log_drives;
 	unsigned char	pad[3];
 	ld_span4_t	log_drv[ MAX_LOGICAL_DRIVES_8LD ];
 	phydrv_t	phys_drv[ MAX_PHYDRVS ];
 }__attribute__ ((packed)) diskarray_span4_t;
 
-typedef struct { 
+typedef struct {
 	unsigned char	no_log_drives;
 	unsigned char	pad[3];
 	ld_span8_t	log_drv[ MAX_LOGICAL_DRIVES_8LD ];
@@ -894,9 +897,7 @@
 	volatile mbox64_t	*mbox64;/* ptr to 64-bit mailbox */
 	volatile mbox_t		*mbox;	/* ptr to standard mailbox */
 	dma_addr_t		mbox_dma;
-
-	struct pci_dev	*dev;
-	struct pci_dev	*ipdev;		/* for internal allocation */
+	struct pci_dev		*dev;
 
 	struct list_head	free_list;
 	struct list_head	pending_list;


^ permalink raw reply	[flat|nested] 7+ messages in thread
* Re: ANNOUNCE: megaraid driver version 2.10.1
@ 2004-01-10 13:52 Xose Vazquez Perez
  0 siblings, 0 replies; 7+ messages in thread
From: Xose Vazquez Perez @ 2004-01-10 13:52 UTC (permalink / raw)
  To: Atul Mukker, linux-scsi

Atul Mukker wrote:	

> The megaraid driver version 2.10.1 is released and can be downloaded from
> ftp://ftp.lsil.com/pub/linux-megaraid/drivers/version-2.10.1/

I just saw that your base kernel for the driver is Red Hat Enterprise Linux
2.4.21-4.EL.

would you mind send 2.4 and 2.6 patches to this list ?

-thank you-


^ permalink raw reply	[flat|nested] 7+ messages in thread
* ANNOUNCE: megaraid driver version 2.10.1
@ 2004-01-09 23:54 Mukker, Atul
  2004-01-11 14:06 ` 'hch@infradead.org'
  0 siblings, 1 reply; 7+ messages in thread
From: Mukker, Atul @ 2004-01-09 23:54 UTC (permalink / raw)
  To: 'linux-kernel@vger.kernel.org', linux-scsi
  Cc: 'hch@infradead.org', 'torvalds@osdl.org',
	'marcelo.tosatti@cyclades.com',
	Matt_Domsch

All,

The megaraid driver version 2.10.1 is released and can be downloaded from
ftp://ftp.lsil.com/pub/linux-megaraid/drivers/version-2.10.1/

Following other components are also available at this location:
i.	Patches for Red Hat and SuSE stock kernels
ii.	Driver update disks for Red Hat and SuSE
iii.	RPM packages to update drivers

Thanks
-Atul Mukker
LSI Logic

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2004-01-30 15:40 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-01-30 15:03 ANNOUNCE: megaraid driver version 2.10.1 Mukker, Atul
2004-01-30 15:40 ` Jeff Garzik
  -- strict thread matches above, loose matches on Subject: below --
2004-01-13 21:39 Mukker, Atul
2004-01-14  9:22 ` 'hch@infradead.org'
2004-01-10 13:52 Xose Vazquez Perez
2004-01-09 23:54 Mukker, Atul
2004-01-11 14:06 ` 'hch@infradead.org'

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.