Release Date	: Thu Nov 16 15:32:35 EST 2006 -
				Sumant Patro <sumant.patro@lsi.com>
Current Version : 2.20.5.1 (scsi module), 2.20.2.6 (cmm module)
Older Version	: 2.20.4.9 (scsi module), 2.20.2.6 (cmm module)

1.	Changes in Initialization to fix kdump failure.
	Send SYNC command on loading.
	This command clears the pending commands in the adapter
	and re-initialize its internal RAID structure.
	Without this change, megaraid driver either panics or fails to
	initialize the adapter during kdump's second kernel boot
	if there are pending commands or interrupts from other devices
	sharing the same IRQ.
2. 	Authors email-id domain name changed from lsil.com to lsi.com.
	Also modified the MODULE_AUTHOR to megaraidlinux@lsi.com

Release Date	: Fri May 19 09:31:45 EST 2006 - Seokmann Ju <sju@lsil.com>
Current Version : 2.20.4.9 (scsi module), 2.20.2.6 (cmm module)
Older Version	: 2.20.4.8 (scsi module), 2.20.2.6 (cmm module)

1.	Fixed a bug in megaraid_init_mbox().
	Customer reported "garbage in file on x86_64 platform".
	Root Cause: the driver registered controllers as 64-bit DMA capable
	for those which are not support it.
	Fix: Made change in the function inserting identification machanism
	identifying 64-bit DMA capable controllers.

	> -----Original Message-----
	> From: Vasily Averin [mailto:vvs@sw.ru]
	> Sent: Thursday, May 04, 2006 2:49 PM
	> To: linux-scsi@vger.kernel.org; Kolli, Neela; Mukker, Atul;
	> Ju, Seokmann; Bagalkote, Sreenivas;
	> James.Bottomley@SteelEye.com; devel@openvz.org
	> Subject: megaraid_mbox: garbage in file
	>
	> Hello all,
	>
	> I've investigated customers claim on the unstable work of
	> their node and found a
	> strange effect: reading from some files leads to the
	>  "attempt to access beyond end of device" messages.
	>
	> I've checked filesystem, memory on the node, motherboard BIOS
	> version, but it
	> does not help and issue still has been reproduced by simple
	> file reading.
	>
	> Reproducer is simple:
	>
	> echo 0xffffffff >/proc/sys/dev/scsi/logging_level ;
	> cat /vz/private/101/root/etc/ld.so.cache >/tmp/ttt  ;
	> echo 0 >/proc/sys/dev/scsi/logging
	>
	> It leads to the following messages in dmesg
	>
	> sd_init_command: disk=sda, block=871769260, count=26
	> sda : block=871769260
	> sda : reading 26/26 512 byte blocks.
	> scsi_add_timer: scmd: f79ed980, time: 7500, (c02b1420)
	> sd 0:1:0:0: send 0xf79ed980                  sd 0:1:0:0:
	>         command: Read (10): 28 00 33 f6 24 ac 00 00 1a 00
	> buffer = 0xf7cfb540, bufflen = 13312, done = 0xc0366b40,
	> queuecommand 0xc0344010
	> leaving scsi_dispatch_cmnd()
	> scsi_delete_timer: scmd: f79ed980, rtn: 1
	> sd 0:1:0:0: done 0xf79ed980 SUCCESS        0 sd 0:1:0:0:
	>         command: Read (10): 28 00 33 f6 24 ac 00 00 1a 00
	> scsi host busy 1 failed 0
	> sd 0:1:0:0: Notifying upper driver of completion (result 0)
	> sd_rw_intr: sda: res=0x0
	> 26 sectors total, 13312 bytes done.
	> use_sg is 4
	> attempt to access beyond end of device
	> sda6: rw=0, want=1044134458, limit=951401367
	> Buffer I/O error on device sda6, logical block 522067228
	> attempt to access beyond end of device

2.	When INQUIRY with EVPD bit set issued to the MegaRAID controller,
	system memory gets corrupted.
	Root Cause: MegaRAID F/W handle the INQUIRY with EVPD bit set
	incorrectly.
	Fix: MegaRAID F/W has fixed the problem and being process of release,
	soon. Meanwhile, driver will filter out the request.

3.	One of member in the data structure of the driver leads unaligne
	issue on 64-bit platform.
	Customer reporeted "kernel unaligned access addrss" issue when
	application communicates with MegaRAID HBA driver.
	Root Cause: in uioc_t structure, one of member had misaligned and it
	led system to display the error message.
	Fix: A patch submitted to community from following folk.

	> -----Original Message-----
	> From: linux-scsi-owner@vger.kernel.org
	> [mailto:linux-scsi-owner@vger.kernel.org] On Behalf Of Sakurai Hiroomi
	> Sent: Wednesday, July 12, 2006 4:20 AM
	> To: linux-scsi@vger.kernel.org; linux-kernel@vger.kernel.org
	> Subject: Re: Help: strange messages from kernel on IA64 platform
	>
	> Hi,
	>
	> I saw same message.
	>
	> When GAM(Global Array Manager) is started, The following
	> message output.
	> kernel: kernel unaligned access to 0xe0000001fe1080d4,
	> ip=0xa000000200053371
	>
	> The uioc structure used by ioctl is defined by packed,
	> the allignment of each member are disturbed.
	> In a 64 bit structure, the allignment of member doesn't fit 64 bit
	> boundary. this causes this messages.
	> In a 32 bit structure, we don't see the message because the allinment
	> of member fit 32 bit boundary even if packed is specified.
	>
	> patch
	> I Add 32 bit dummy member to fit 64 bit boundary. I tested.
	> We confirmed this patch fix the problem by IA64 server.
	>
	> **************************************************************
	> ****************
	> --- linux-2.6.9/drivers/scsi/megaraid/megaraid_ioctl.h.orig
	> 2006-04-03 17:13:03.000000000 +0900
	> +++ linux-2.6.9/drivers/scsi/megaraid/megaraid_ioctl.h
	> 2006-04-03 17:14:09.000000000 +0900
	> @@ -132,6 +132,10 @@
	>  /* Driver Data: */
	>          void __user *           user_data;
	>          uint32_t                user_data_len;
	> +
	> +        /* 64bit alignment */
	> +        uint32_t                pad_0xBC;
	> +
	>          mraid_passthru_t        __user *user_pthru;
	>
	>          mraid_passthru_t        *pthru32;
	> **************************************************************
	> ****************

Release Date	: Mon Apr 11 12:27:22 EST 2006 - Seokmann Ju <sju@lsil.com>
Current Version : 2.20.4.8 (scsi module), 2.20.2.6 (cmm module)
Older Version	: 2.20.4.7 (scsi module), 2.20.2.6 (cmm module)

1.	Fixed a bug in megaraid_reset_handler().
	Customer reported "Unable to handle kernel NULL pointer dereference
	at virtual address 00000000" when system goes to reset condition
	for some reason. It happened randomly.
	Root Cause: in the megaraid_reset_handler(), there is possibility not
	returning pending packets in the pend_list if there are multiple
	pending packets.
	Fix: Made the change in the driver so that it will return all packets
	in the pend_list.

2.	Added change request.
	As found in the following URL, rmb() only didn't help the
	problem. I had to increase the loop counter to 0xFFFFFF. (6 F's)
	http://marc.theaimsgroup.com/?l=linux-scsi&m=110971060502497&w=2

	I attached a patch for your reference, too.
	Could you check and get this fix in your driver?

	Best Regards,
	Jun'ichi Nomura

Release Date	: Fri Nov 11 12:27:22 EST 2005 - Seokmann Ju <sju@lsil.com>
Current Version : 2.20.4.7 (scsi module), 2.20.2.6 (cmm module)
Older Version	: 2.20.4.6 (scsi module), 2.20.2.6 (cmm module)

1.	Sorted out PCI IDs to remove megaraid support overlaps.
	Based on the patch from Daniel, sorted out PCI IDs along with
	character node name change from 'megadev' to 'megadev_legacy' to avoid
	conflict.
	---
	Hopefully we'll be getting the build restriction zapped much sooner, 
	but we should also be thinking about totally removing the hardware 
	support overlap in the megaraid drivers.

	This patch pencils in a date of Feb 06 for this, and performs some 
	printk abuse in hope that existing legacy users might pick up on what's
	going on.

	Signed-off-by: Daniel Drake <dsd@gentoo.org>
	---

2.	Fixed a issue: megaraid always fails to reset handler.
	---
	I found that the megaraid driver always fails to reset the
	adapter with the following message:
		megaraid: resetting the host...
		megaraid mbox: reset sequence completed successfully
		megaraid: fast sync command timed out
		megaraid: reservation reset failed
	when the "Cluster mode" of the adapter BIOS is enabled.
	So, whenever the reset occurs, the adapter goes to
	offline and just become unavailable.

	Jun'ichi Nomura [mailto:jnomura@mtc.biglobe.ne.jp]
	---

Release Date	: Mon Mar 07 12:27:22 EST 2005 - Seokmann Ju <sju@lsil.com>
Current Version : 2.20.4.6 (scsi module), 2.20.2.6 (cmm module)
Older Version	: 2.20.4.5 (scsi module), 2.20.2.5 (cmm module)

1.	Added IOCTL backward compatibility.
	Convert megaraid_mm driver to new compat_ioctl entry points.
	I don't have easy access to hardware, so only compile tested.
		- Signed-off-by:Andi Kleen <ak@muc.de>

2.	megaraid_mbox fix: wrong order of arguments in memset()
	That, BTW, shows why cross-builds are useful-the only indication of
	problem had been a new warning showing up in sparse output on alpha
	build (number of exceeding 256 got truncated).
		- Signed-off-by: Al Viro
		<viro@parcelfarce.linux.theplanet.co.uk>

3.	Convert pci_module_init to pci_register_driver
	Convert from pci_module_init to pci_register_driver
	(from:http://kernelnewbies.org/KernelJanitors/TODO)
		- Signed-off-by: Domen Puncer <domen@coderock.org>

4.	Use the pre defined DMA mask constants from dma-mapping.h
	Use the DMA_{64,32}BIT_MASK constants from dma-mapping.h when calling
	pci_set_dma_mask() or pci_set_consistent_dma_mask(). See
	http://marc.theaimsgroup.com/?t=108001993000001&r=1&w=2 for more
	details.
		Signed-off-by: Tobias Klauser <tklauser@nuerscht.ch>
		Signed-off-by: Domen Puncer <domen@coderock.org>

5.	Remove SSID checking for Dobson, Lindsay, and Verde based products.
	Checking the SSVID/SSID for controllers which have Dobson, Lindsay,
	and Verde is unnecessary because device ID has been assigned by LSI
	and it is unique value. So, all controllers with these IOPs have to be
	supported by the driver regardless SSVID/SSID.

6.	Date Thu, 27 Jan 2005 04:31:09 +0100 
	From Herbert Poetzl <> 
	Subject RFC: assert_spin_locked() for 2.6 

	Greetings!

	overcautious programming will kill your kernel ;)
	ever thought about checking a spin_lock or even
	asserting that it must be held (maybe just for
	spinlock debugging?) ...

	there are several checks present in the kernel
	where somebody does a variation on the following:

	  BUG_ON(!spin_is_locked(&some_lock));

	so what's wrong about that? nothing, unless you
	compile the code with CONFIG_DEBUG_SPINLOCK but 
	without CONFIG_SMP ... in which case the BUG()
	will kill your kernel ...

	maybe it's not advised to make such assertions, 
	but here is a solution which works for me ...
	(compile tested for sh, x86_64 and x86, boot/run
	tested for x86 only)

	best,
	Herbert

		- Herbert Poetzl <herbert@13thfloor.at>, Thu, 27 Jan 2005

Release Date	: Thu Feb 03 12:27:22 EST 2005 - Seokmann Ju <sju@lsil.com>
Current Version	: 2.20.4.5 (scsi module), 2.20.2.5 (cmm module)
Older Version	: 2.20.4.4 (scsi module), 2.20.2.4 (cmm module)

1.	Modified name of two attributes in scsi_host_template.
	On Wed, 2005-02-02 at 10:56 -0500, Ju, Seokmann wrote:
	> +	.sdev_attrs			= megaraid_device_attrs,
	> +	.shost_attrs			= megaraid_class_device_attrs,

	These are, perhaps, slightly confusing names.
	The terms device and class_device have well defined meanings in the
	generic device model, neither of which is what you mean here.
	Why not simply megaraid_sdev_attrs and megaraid_shost_attrs?

	Other than this, it looks fine to me too.

Release Date	: Thu Jan 27 00:01:03 EST 2005 - Atul Mukker <atulm@lsil.com>
Current Version	: 2.20.4.4 (scsi module), 2.20.2.5 (cmm module)
Older Version	: 2.20.4.3 (scsi module), 2.20.2.4 (cmm module)

1.	Bump up the version of scsi module due to its conflict.

Release Date	: Thu Jan 21 00:01:03 EST 2005 - Atul Mukker <atulm@lsil.com>
Current Version	: 2.20.4.3 (scsi module), 2.20.2.5 (cmm module)
Older Version	: 2.20.4.2 (scsi module), 2.20.2.4 (cmm module)

1.	Remove driver ioctl for logical drive to scsi address translation and
	replace with the sysfs attribute. To remove drives and change
	capacity, application shall now use the device attribute to get the
	logical drive number for a scsi device. For adding newly created
	logical drives, class device attribute would be required to uniquely
	identify each controller.
		- Atul Mukker <atulm@lsil.com>

	"James, I've been thinking about this a little more, and you may be on
	to something here. Let each driver add files as such:"

		- Matt Domsch <Matt_Domsch@dell.com>, 12.15.2004
		 linux-scsi mailing list


	"Then, if you simply publish your LD number as an extra parameter of
	the device, you can look through /sys to find it."

		- James Bottomley <James.Bottomley@SteelEye.com>, 01.03.2005
		 linux-scsi mailing list


	"I don't see why not ... it's your driver, you can publish whatever
	extra information you need as scsi_device attributes; that was one of
	the designs of the extensible attribute system."

		- James Bottomley <James.Bottomley@SteelEye.com>, 01.06.2005
		 linux-scsi mailing list

2.	Add AMI megaraid support - Brian King <brking@charter.net>
		PCI_VENDOR_ID_AMI, PCI_DEVICE_ID_AMI_MEGARAID3,
		PCI_VENDOR_ID_AMI, PCI_SUBSYS_ID_PERC3_DC,

3.	Make some code static - Adrian Bunk <bunk@stusta.de>
	Date:	Mon, 15 Nov 2004 03:14:57 +0100

	The patch below makes some needlessly global code static.
	-wait_queue_head_t wait_q;
	+static wait_queue_head_t wait_q;

	Signed-off-by: Adrian Bunk <bunk@stusta.de>

4.	Added NEC ROMB support - NEC MegaRAID PCI Express ROMB controller
		PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_MEGARAID_NEC_ROMB_2E,
		PCI_SUBSYS_ID_NEC, PCI_SUBSYS_ID_MEGARAID_NEC_ROMB_2E,

5.	Fixed Tape drive issue : For any Direct CDB command to physical device
	including tape, timeout value set by driver was 10 minutes. With this 
	value, most of command will return within timeout. However, for those
	command like ERASE or FORMAT, it takes more than an hour depends on
	capacity of the device and the command could be terminated before it 
	completes.
	To address this issue, the 'timeout' field in the DCDB command will 
	have NO TIMEOUT (i.e., 4) value as its timeout on DCDB command.



Release Date	: Thu Dec  9 19:10:23 EST 2004
	- Sreenivas Bagalkote <sreenib@lsil.com>

Current Version	: 2.20.4.2 (scsi module), 2.20.2.4 (cmm module)
Older Version	: 2.20.4.1 (scsi module), 2.20.2.3 (cmm module)

i.	Introduced driver ioctl that returns scsi address for a given ld.
	
	"Why can't the existing sysfs interfaces be used to do this?"
		- Brian King (brking@us.ibm.com)
	
	"I've looked into solving this another way, but I cannot see how
	to get this driver-private mapping of logical drive number-> HCTL
	without putting code something like this into the driver."

	"...and by providing a mapping a function to userspace, the driver
	is free to change its mapping algorithm in the future if necessary .."
		- Matt Domsch (Matt_Domsch@dell.com)

Release Date	: Thu Dec  9 19:02:14 EST 2004 - Sreenivas Bagalkote <sreenib@lsil.com>

Current Version	: 2.20.4.1 (scsi module), 2.20.2.3 (cmm module)
Older Version	: 2.20.4.1 (scsi module), 2.20.2.2 (cmm module)

i.	Fix a bug in kioc's dma buffer deallocation

Release Date	: Thu Nov  4 18:24:56 EST 2004 - Sreenivas Bagalkote <sreenib@lsil.com>

Current Version	: 2.20.4.1 (scsi module), 2.20.2.2 (cmm module)
Older Version	: 2.20.4.0 (scsi module), 2.20.2.1 (cmm module)

i.	Handle IOCTL cmd timeouts more properly.

ii.	pci_dma_sync_{sg,single}_for_cpu was introduced into megaraid_mbox
	incorrectly (instead of _for_device). Changed to appropriate 
	pci_dma_sync_{sg,single}_for_device.

Release Date	: Wed Oct 06 11:15:29 EDT 2004 - Sreenivas Bagalkote <sreenib@lsil.com>
Current Version	: 2.20.4.0 (scsi module), 2.20.2.1 (cmm module)
Older Version	: 2.20.4.0 (scsi module), 2.20.2.0 (cmm module)

i.	Remove CONFIG_COMPAT around register_ioctl32_conversion

Release Date	: Mon Sep 27 22:15:07 EDT 2004 - Atul Mukker <atulm@lsil.com>
Current Version	: 2.20.4.0 (scsi module), 2.20.2.0 (cmm module)
Older Version	: 2.20.3.1 (scsi module), 2.20.2.0 (cmm module)

i.	Fix data corruption. Because of a typo in the driver, the IO packets
	were wrongly shared by the ioctl path. This causes a whole IO command
	to be replaced by an incoming ioctl command.

Release Date	: Tue Aug 24 09:43:35 EDT 2004 - Atul Mukker <atulm@lsil.com>
Current Version	: 2.20.3.1 (scsi module), 2.20.2.0 (cmm module)
Older Version	: 2.20.3.0 (scsi module), 2.20.2.0 (cmm module)

i.	Function reordering so that inline functions are defined before they
	are actually used. It is now mandatory for GCC 3.4.1 (current stable)

	Declare some heavy-weight functions to be non-inlined,
	megaraid_mbox_build_cmd, megaraid_mbox_runpendq,
	megaraid_mbox_prepare_pthru, megaraid_mbox_prepare_epthru,
	megaraid_busywait_mbox

		- Andrew Morton, 08.19.2004
		linux-scsi mailing list

	"Something else to clean up after inclusion: every instance of an
	inline function is actually rendered as a full function call, because
	the function is always used before it is defined.  Atul, please
	re-arrange the code to eliminate the need for most (all) of the
	function prototypes at the top of each file, and define (not just
	declare with a prototype) each inline function before its first use"

		- Matt Domsch <Matt_Domsch@dell.com>, 07.27.2004
		linux-scsi mailing list


ii.	Display elapsed time (countdown) while waiting for FW to boot.

iii.	Module compilation reorder in Makefile so that unresolved symbols do
	not occur when driver is compiled non-modular.

		Patrick J. LoPresti <patl@users.sourceforge.net>, 8.22.2004
		linux-scsi mailing list


Release Date	: Thu Aug 19 09:58:33 EDT 2004 - Atul Mukker <atulm@lsil.com>
Current Version	: 2.20.3.0 (scsi module), 2.20.2.0 (cmm module)
Older Version	: 2.20.2.0 (scsi module), 2.20.1.0 (cmm module)

i.	When copying the mailbox packets, copy only first 14 bytes (for 32-bit
	mailboxes) and only first 22 bytes (for 64-bit mailboxes). This is to
	avoid getting the stale values for busy bit. We want to set the busy
	bit just before issuing command to the FW.

ii.	In the reset handling, if the reseted command is not owned by the
	driver, do not (wrongly) print information for the "attached" driver
	packet.

iii.	Have extended wait when issuing command in synchronous mode. This is
	required for the cases where the option ROM is disabled and there is
	no BIOS to start the controller. The FW starts to boot after receiving
	the first command from the driver. The current driver has 1 second
	timeout for the synchronous commands, which is far less than what is
	actually required. We now wait up to MBOX_RESET_TIME (180 seconds) for
	FW boot process.

iv.	In megaraid_mbox_product_info, clear the mailbox contents completely
	before preparing the command for inquiry3. This is to ensure that the
	FW does not get junk values in the command.

v.	Do away with the redundant LSI_CONFIG_COMPAT redefinition for
	CONFIG_COMPAT. Replace <asm/ioctl32.h> with <linux/ioctl32.h>

		- James Bottomley <James.Bottomley@SteelEye.com>, 08.17.2004
		 linux-scsi mailing list

vi.	Add support for 64-bit applications. Current drivers assume only
	32-bit applications, even on 64-bit platforms. Use the "data" and
	"buffer" fields of the mimd_t structure, instead of embedded 32-bit
	addresses in application mailbox and passthru structures.

vii.	Move the function declarations for the management module from
	megaraid_mm.h to megaraid_mm.c

		- Andrew Morton, 08.19.2004
		linux-scsi mailing list

viii.	Change default values for MEGARAID_NEWGEN, MEGARAID_MM, and
	MEGARAID_MAILBOX to 'n' in Kconfig.megaraid

		- Andrew Morton, 08.19.2004
		linux-scsi mailing list

ix.	replace udelay with msleep

x.	Typos corrected in comments and whitespace adjustments, explicit
	grouping of expressions.


Release Date	: Fri Jul 23 15:22:07 EDT 2004 - Atul Mukker <atulm@lsil.com>
Current Version	: 2.20.2.0 (scsi module), 2.20.1.0 (cmm module)
Older Version	: 2.20.1.0 (scsi module), 2.20.0.0 (cmm module)

i.	Add PCI ids for Acer ROMB 2E solution

ii.	Add PCI ids for I4

iii.	Typo corrected for subsys id for megaraid sata 300-4x

iv.	Remove yield() while mailbox handshake in synchronous commands


	"My other main gripe is things like this:

	+	// wait for maximum 1 second for status to post
	+	for (i = 0; i < 40000; i++) {
	+		if (mbox->numstatus != 0xFF) break;
	+		udelay(25); yield();
	+	}

	which litter the driver.  Use of yield() in drivers is deprecated."

		- James Bottomley <James.Bottomley@SteelEye.com>, 07.14.2004
		 linux-scsi mailing list

v.	Remove redundant __megaraid_busywait_mbox routine

vi.	Fix bug in the management module, which causes a system lockup when the
	IO module is loaded and then unloaded, followed by executing any
	management utility. The current version of management module does not
	handle the adapter unregister properly.

	Specifically, it still keeps a reference to the unregistered
	controllers. To avoid this, the static array adapters has been
	replaced by a dynamic list, which gets updated every time an adapter
	is added or removed.

	Also, during unregistration of the IO module, the resources are
	now released in the exact reverse order of the allocation time
	sequence.


Release Date	: Fri Jun 25 18:58:43 EDT 2004 - Atul Mukker <atulm@lsil.com>
Current Version	: 2.20.1.0
Older Version	: megaraid 2.20.0.1

i.	Stale list pointer in adapter causes kernel panic when module
	megaraid_mbox is unloaded


Release Date	: Thu Jun 24 20:37:11 EDT 2004 - Atul Mukker <atulm@lsil.com>
Current Version	: 2.20.0.1
Older Version	: megaraid 2.20.0.00

i.	Modules are not 'y' by default, but depend on current definition of
	SCSI & PCI.

ii.	Redundant structure mraid_driver_t removed.

iii.	Miscellaneous indentation and goto/label fixes.
		- Christoph Hellwig <hch@infradead.org>, 06.24.2004 linux-scsi

iv.	scsi_host_put(), do just before completing HBA shutdown.



Release Date	: Mon Jun 21 19:53:54 EDT 2004 - Atul Mukker <atulm@lsil.com>
Current Version	: 2.20.0.0
Older Version	: megaraid 2.20.0.rc2 and 2.00.3

i.	Independent module to interact with userland applications and
	multiplex command to low level RAID module(s).

	"Shared code in a third module, a "library module", is an acceptable
	solution. modprobe automatically loads dependent modules, so users
	running "modprobe driver1" or "modprobe driver2" would automatically
	load the shared library module."

		- Jeff Garzik <jgarzik@pobox.com> 02.25.2004 LKML

	"As Jeff hinted, if your userspace<->driver API is consistent between
	your new MPT-based RAID controllers and your existing megaraid driver,
	then perhaps you need a single small helper module (lsiioctl or some
	better name), loaded by both mptraid and megaraid automatically, which
	handles registering the /dev/megaraid node dynamically. In this case,
	both mptraid and megaraid would register with lsiioctl for each
	adapter discovered, and lsiioctl would essentially be a switch,
	redirecting userspace tool ioctls to the appropriate driver."

		- Matt Domsch <Matt_Domsch@dell.com> 02.25.2004 LKML

ii.	Remove C99 initializations from pci_device id.

	"pci_id_table_g would be much more readable when not using C99
	initializers.
	PCI table doesn't change, there's lots of users that prefer the more
	readable variant.  And it's really far less and much easier to grok
	lines without C99 initializers."

		- Christoph Hellwig <hch@infradead.org>, 05.28.2004 linux-scsi

iii.	Many fixes as suggested by Christoph Hellwig <hch@infradead.org> on
	linux-scsi, 05.28.2004

iv.	We now support up to 32 parallel ioctl commands instead of current 1.
	There is a conscious effort to let memory allocation not fail for ioctl
	commands.

v.	Do away with internal memory management. Use pci_pool_(create|alloc)
	instead.

vi.	Kill tasklet when unloading the driver.

vii.	Do not use "host_lock', driver has fine-grain locks now to protect all
	data structures.

viii.	Optimize the build scatter-gather list routine. The callers already
	know the data transfer address and length.

ix.	Better implementation of error handling and recovery. Driver now
	performs extended errors recovery for instances like scsi cable pull.

x.	Disassociate the management commands with an overlaid scsi command.
	Driver now treats the management packets as special packets and has a
	dedicated callback routine.
