MPT Fusion Linux OS Driver Release Notes
Driver Version: mptlinux-4.00.43.00-1
07/10/2008

Compatibility:
53C1020, 53C1030, 53C1035 (Scsi Mode)
FC909, FC919, FC929
FC919X, FC929X, FC929XL, FC939X, FC949X, FC949ES
SAS 1064, 1068
SAS 1064E, 1068E, 1078E

Special Notes For This Build:
No special notes available at this time.


Current Errata

These drivers do not include disk dump support that is sometimes added  by certain distro's.  This appears to be replaced by kdump. Here is help for using kdump: http://lse.sourceforge.net/kdump/
Kdump doesn't work for flashless controllers.
Fusion.mptctl will not be provided on RHEL5 Gold DUDs, nor KMP RPMS.  This is the service script that autoloads the mptctl driver.  You will find this only on SLES10 DUDS,RHEL5 Update 1 & 2 DUDS and generic RPMS(found in rpm-1 folder).
Due to increase in size of KMOD based DUD, the RHEL5 U1 & U2 DUD can be used only with thumb drives and Floppy based DUD is not supported from RHEL5 U1 onwards.

Driver Release Package Contents

Source tarball

	Source tarball is named as: mptlinux-<version>-src.tar.gz

	where:
	<version>	=	version tag for this rpm

RPM Binaries:

RPM images are named as:  mptlinux-<version>-<release>-<os>.<arch>.rpm

	where:
	<version>	=	version tag for this rpm
	<release>	=	release tag for this rpm
	<os>		=	{rhel5, sles10}
	<arch>	=	ia64 - Itanium Processor
	  			x86_64 - Opteron Processor, w/ x86_64 install
				i686 - i686 or later processor (Red Hat)
				i586 - x86 installations (SuSE)
				ppc - Power PC (64 bit)
Driver Update Disks

dud images are named : mptlinux-<version>-<release>-<os>.<arch>.dd.gz

	where:
	<version>	=	version tag for this rpm
	<release>	=	release tag for this rpm
	<os>		=	{rhel5, sles10}
	<arch>	=	ia64 - Itanium Processor
	  			x86_64 - Opteron Processor, w/ x86_64 install
				i686 - i686 or later processor (Red Hat)
				i586 - x86 installations (SuSE)
				ppc - Power PC (64 bit)

DKMS 

DKMS tarball is named : mptlinux-<version>-<release>.dkms.tar.gz

	where:
	<version>	=	version tag for this rpm
	<release>	=	release tag for this rpm

This is an rpm that provide prebuilt binaries for major releases, and will compile drivers on the fly for the other kernels.  Here is help on dkms: http://linux.dell.com/dkms/dkms.html

SRPMS 

SRPM images are named mptlinux-<version>-<release>.src.rpm

	where:
	<version>	=	version tag for this rpm
	<release>	=	release tag for this rpm


SuSE:


i686
	SLES 10
		Gold (2.6.16.21-0.8)	(bigsmp, debug, default, kdump, smp, xen)	
	SLES 10 SP1
		Gold (2.6.16.46-0.12)	(bigsmp, debug, default, kdump, smp, xen)	
	SLES 10 SP2
		Gold (2.6.16.60-0.21)	(bigsmp, debug, default, kdump, smp, xen)

x86_64	

	SLES10
		Gold (2.6.16.21-0.8)	(debug, default, kdump, smp, xen) 			
	SLES10 SP1
		Gold (2.6.16.46-0.12)	(debug, default, kdump, smp, xen) 			
	SLES 10 SP2
		Gold (2.6.16.60-0.21)	(debug, default, kdump, smp, xen)

ia64
	SLES10
		Gold (2.6.16.21-0.8)	(debug, default)   
	SLES10 SP1
		Gold (2.6.16.46-0.12)	(debug, default)   
	SLES 10 SP2
		Gold (2.6.16.60-0.21)	(debug, default)   

ppc
	SLES10
		Gold (2.6.16.21-0.8)	(debug, default, iseries64, ppc64)   
	SLES10 SP1
		Gold (2.6.16.46-0.12)	(debug, default, iseries64, ppc64)   
	SLES 10 SP2
		Gold (2.6.16.60-0.21)	(debug, default, iseries64, ppc64)   



Red Hat:

i686
	RHEL5
		Gold (2.6.18-8)				(el5, el5PAE, el5xen)	
		Update 1 (2.6.18-53)			(el5, el5PAE, el5xen, el5debug)	
		Update 1 (2.6.18-92)			(el5, el5PAE, el5xen, el5debug)	

x86_64	

	RHEL5
		Gold (2.6.18-8)				(el5, el5xen) 			
		Update 1 (2.6.18-53)			(el5, el5xen, el5debug)
		Update 2 (2.6.18-92)			(el5, el5xen, el5debug) 			

ia64
	RHEL5
		Gold (2.6.18-8)				(el5, el5xen)   
		Update 1 (2.6.18-53)			(el5, el5xen, el5debug)
		Update 2 (2.6.18-92)			(el5, el5xen, el5debug)   

ppc
	RHEL5
		Gold (2.6.18-8)				(el5, el5kdump)   
		Update 1  (2.6.18-53)			(el5, el5kdump, el5debug)   
		Update 2  (2.6.18-92)			(el5, el5kdump, el5debug)



Major Changes For Version 04.00.43.00-1
Release Date:  07/10/2008

Defect fixes

Issue: SCGCQ000020548: Firmware Fault 1902 is seen when host reset is issued while running I/O stress
Reported by: SCG Internal Test
To Reproduce: In Linux, run IOmonkey stress test against 126 devices.  Use sg_tools to issue a host reset to the HBA under test.
Description of Change:  The driver clears the message frame before issuing Message Unit Reset and when firmware tries to access the message frame before MUR is processed by it, sees the message frame as invalid and resulted in Fault. This is fixed by moving the clearing of message frames before issuing MUR to immediately after issuing MUR.  

Issue: SCGCQ00022023: Device Driver is not adding a new device after it received an MPI_EVENT_DEV_STAT_RC_ADDED firmware event
Reported by: IBM
Description of Change: In mptscsih_do_cmd() function the return value for timed out command is changed from -ETIME to MPT_SCANDV_DID_RESET. This will allow the TUR command to be retried.


Major Changes For Version 04.00.42.00-1
Release Date:  06/19/2008

General Changes
SCGCQ00018072:New DKMS framework version 2.0.19.1 is used to build the mptlinux DKMS package.
SCGCQ00016472: The DKMS RPM is modified to include only SLES10 base (x86_64) and RHEL5 Gold (both x86 and x86_64) prebuilt binaries. The DUD files present in mptlinux-<version>.dkms.tar.gz files are removed.


Defect fixes
Issue:	 SCGCQ000017492: NULL pointer references
Reported by:  SCG Internal Test
To Reproduce:   While running IO to volumes in dual path solution, driver experiences null pointer dereferences when doing repetitive fail over fail back testing. 
Description of Change: Most all these problems are due to accessing stale remote phy objects that have been previously freed, so the following actions take care of races: 1) Moved freeing the port details object from the device deletion, to the target_destroy callback, 2) Cleaned up code in mptsas_del_end_device, 3)  Moved  freeing the port details object inside the SLES10 Base branch of mptsas_delete_expander.  

SCGCQ00017643: The mkinitrd failure in PPC systems in SLES10 is fixed

SCGCQ00014226: Failure in installing the driver through DUD in SLES10 base is fixed. The driver is modified to disable the default enabling of MSI only for SLES10 base kernel

SCGCQ00013137, SCGCQ00013979: The spelling errors in fusion.mptctl script are corrected.




Major Changes For Version 04.00.41.00-1
Release Date:  05/26/2008

General Changes

Enhancement request SCGCQ00016817: Modify driver to compile with RHEL5.2 kernels. The support for RHEL5 Update 2 and SLES10 Service Pack 2 are added in this version of driver. The driver is modified and instead of defining shost_priv it defines shost_private and uses that, to avoid conflict between the shost_priv definition in the RHEL5 U2 kernel and the driver.
Enhancement request SCGCQ00014752: Added debug event display for MPI_EVENT_SAS_DEV_STAT_RC_CMPL_INTERNAL_DEV_RESET
SCGCQ00015226: Add support for QUEUE_FULL event.   When driver receives this event, it will reduce the device queue depth by calling scsi_track_queue_full() API.  For hidden raid components, it will adjust the volume queue depth instead of the actual physical device.
SCGCQ00015224: The flag which "quiesce io during discovery" will be turned off when the sas_iounit_pg0 says the PortFlags MPI_SAS_IOUNIT0PORT_FLAGS_DISCOVERY_IN_PROGRESS bit is turned off for the first PHY.   This will be done from the 1 second polling function called mpt_fault_reset_work. This configuration page is retrieved only when the IO quiesce flag is set.

Defect fixes

Issue: SCGCQ00009818:  Occasional kernel panic on cable pull.
Reported by:  SCG Internal Test
Description of Change: Kernel occasionally panics when all links between one of the initiators and the first expander are brought down simultaneously using a test script for multiple times. The panic has happened, because the Linux SAS transport layer deletes the entries associated with an expander when the MPT driver reports the deletion of expander to the TPL and the MPT driver still assumes the entries are valid. The driver is modified to delete the device entries associated with an expander from the transport layer, when the expander delete event for that particular expander is processed.

Issue: SCGCQ00014897:  When hot plugging SAS/SATA drives in SLES10 no drives are added after the first drive.
Reported by:  SCG Internal Test
Description of Change: When the devices are not connected, the firmware configures all the four phys as wide port (when auto port configuration is set) and the driver assigns the first PHYs SAS address to all four phys. And when the devices are hot inserted the driver reconfigures the port and sends the PHY Link status change with individual PHYs SAS address and the driver couldn’t handle them. The change is to check whether the SAS address reported in the link status change event falls within the range of Base Address + Number of phys.

Issue: SCGCQ00015581:  When the device are hot inserted. Sometimes the driver are not detected due to TUR failure
Reported by:  SCG Internal Test
Description of Change: When the device returns the particular sense data (sense key=0x02, ASC=0x04, ASCQ=0x11) the driver is modified to retry the TUR instead of failing it.

Issue: SCGCQ00015228:  When IR volume is removed and reconnected while heavy I/O is running, the volume is not getting detected.
Reported by: SCG Internal Test
Description of Change: When doing heavy IO to mounted device, then do device pull, the scsi mid layer doesn't call the slave_destroy callbacks, thus leaving the vtarget->deleted flag still set. When the device is added back, the slave_configure callback is called, and the same vtarget->deleted flag still set(as the original sdev object is reused).  With the flag still set, the driver will return DID_NO_CONNECT for every IO. Hence the device can not be accessed.   To fix this issue, the driver always clears the vtarget->deleted flag from slave_configure

Issue: SCGCQ00015220: In Some Platforms, Enabling MSI for SAS controller results in driver loading problem and the driver didn’t detect any attached devices. Also the driver didn’t handle the module parameter passed by the user to override the enabling of MSI by default.
Reported by: Customer
Description of Change: The driver is modified to provide option for users to specify whether they want to enable or disable MSI at driver load time. This is achieved by providing three module parameters mpt_msi_enable_sas, mpt_msi_enable_fc and mpt_msi_enable_spi for mptbase module.  
The MSI is enabled for SAS and disabled for SPI and FC by default.

Issue: SCGCQ00015229: Targets not being found when the Linux driver is first loaded.
Reported by:  Customer
Description of Change: Investigation of the Linux SCSI mid-layer has shown that for a command that is failed with DID_RESET, retries come from the target driver (sd or sr); they do NOT come from the mid-layer.  For DID_ERROR, retries come from the mid-layer.
But, the initial bus scan does not come from sd or sr, so if an Inquiry fails because it happened to get issued and be outstanding when a bus reset occurs (on FC, this is a LIP), our driver will return DID_RESET, and the target whose Inquiry failed will not be discovered and added to the list of known targets.
For SCSI EXT TERMINATED return value from firmware for FC, The driver is modified to return DID_ERROR instead of DID_RESET for SAS and SPI the DID_RESET is kept intact.




Major Changes For Version 04.00.40.00-1
Release Date:  04/23/2008

General Changes

Enhancement request SCGCQ00011075:  Use separate work queue for handling events and prevent handling them during FW reset
Firmware event handling was moved to a single CPU threaded work queue, to address many issues surrounding multithread work tasks that were either stalled or not called, resulting in devices not being added or removed, and IO queue from being frozen during broadcast AEN handling.
Add support to properly tear down the firmware event queue when a host_reset occurred, or when the driver is unloaded.
Added new function called mptsas_refresh_topology.  This is called after port_enable from the function mptsas_ioc_reset.  Here is a highlight of the features of this function:
(1) Delete devices present before reset but not after
(2) Add devices that were not there before reset, but now are present
(3) Handle the case where someone swaps out a device during reset; meaning the target_id has not changed however we find the sas_address has changed. This is handled by delete the old then add the new device.
SCGCQ00013054: The csmisas.c is changed to be common across all Linux drivers. This driver is modified to be compatible with the new csmisas.c
SCGCQ00013056: The DMA mask used in the driver was based on the size of the dma_mask_t. If it is 8 bytes the driver used DMA_64BIT_MASK and if it is 4 byte the driver used DMA_32BIT_MASK.  With 64 bit architecture systems containing less than or equal to 4GB of memory the driver uses 64BIT DMA mask and 64bit SGL even though the address of the SGE can be accommodated in a 32BIT SGL. The driver is modified to use the kernel API dma_get_required_mask to decide whether the 64BIT SGL is required at runtime and it will use 64BIT SGL only when it is absolutely required.


Major Changes For Version 04.00.37.00-1
Release Date:  04/16/2008

Defect fixes

Issue: SCGCQ00011874: The OS did not boot if the system is shutdown non-gracefully with IR Volume in a multi path environment.
Reported by: SCG Internal Test
Description of Change: The driver didn't check the validity of a path when it retrieves the available paths to a physical disk using the RAID Physical disk page 1 read. The driver is modified not to consider the path if the flag is set to MPI_RAID_PHYSDISK1_FLAG_INVALID or BROKEN.




Major Changes For Version 04.00.36.00-1
Release Date:  04/10/2008

Defect fixes
Issue: SCGCQ00010995: Incorrect BIOS Version Reported in /sys/class/scsi_host/host1/bios_version
Reported by: IBM
To Reproduce: Run command "cat /sys/class/scsi_host/hostX/version_bios" to view the BIOS version, where X is the host number of a MPT controller for which the BIOS version needs to be displayed. The BIOS version is displayed in Hex format. For example for the BIOS version of 06.21.05.00 the display is 06.15.05.00. The expected format for BIOS version is decimal.
Description of Change: The printing format for the BIOS version is changed from hex to decimal in the driver.




Major Changes For Version 04.00.35.00-1
Release Date:  03/28/2008

Defect fixes

Issue: SCGCQ00009668: Rhel5U1 - Driver stopping support causes system to reboot
Reported by: SCG Internal Test
To Reproduce: echo 1>/sys/modules/mptbase/parameters/mpt_fwdault_debug.Use lsiutil option 55 to write C0FFEE to doorbell
Description of Change: With Xen kernels when calling panic, the system reboots instead of halting which makes it difficult for test to capture the firmware dumps. Provided additional method of keeping the driver in busy loop instead of calling panic, this version of driver calls panic when mpt_fwfault_debug = 1  and calls busy loop when mpt_fwfault_debug = 2.

Issue: SCGCQ00009729: RHEL5U1 - Non-zero LUNs in TUR logic support cause failure
Reported by: SCG Internal Test
To Reproduce: Configure a Carrie raid box with multiple LUNs without LUN zero.Observe none of the LUNs got detected.
Description of Change: The newly added REPORT_LUNS command is not properly handled by the driver and the required changes are made to properly handle the REPORT_LUNS command.



Major Changes For Version 04.00.34.00-1
Release Date:  03/04/2008

Defect fixes

Issue: SCGCQ00008892: Kernel panic on cable pull with device missing delay enabled
Reported by: SCG Internal Test
To Reproduce: Set the device missing delay to a non zero value, remove and reconnect the cable between expander and HBA multiple times.
Description of Change: The panic had happened because of scheduling work on the some work structure multiple times when the cable is unplugged and connected multiple times. To avoid this, a check is made before scheduling the work to see whether there is a work already scheduled, if it is scheduled then that work is cancelled before scheduling the new work.








Major Changes For Version 04.00.33.00-1
Release Date:  02/04/2008

General Changes

The function scsilun_to_int is defined in the driver with the assumption that it will be available from kernel versions 2.6.23 and above. But SLES10 update 2 kernel has this definition, to avoid the conflict, the local function is renamed.
SCGCQ00000587: KMOD based DUD disks are created for RHEL5 U1 to handle copying the mptctl driver and load them automatically during system startup
RedHat KMOD RPM support is added, the RPMS can be found at kmods-${release_version} folder.
DKMS framework used for building DKMS RPMS is upgraded from 2.0.13-1 to 2.0.17.5-1. 



Major Changes For Version 04.00.32.00-1
Release Date:  01/18/2008

General Changes

SCGCQ6885: Support for stopping driver when firmware encounters fault. This enhancement is added to support collecting more debug information when firmware encounters fault condition or I/O timeouts occurred due to malfunctioning firmware. 
A new module parameter mpt_fwfault_debug has been added to the mptbase driver to enable and disable this feature. This can be passed to the mptbase module during module time as below 
#insmod mptbase.ko mpt_fwfault_debug=1 
Or this feature can be enabled or disabled, when the driver is running through sysfs as below
To enable:  #echo 1 >/sys/module/mptbase/parameters/mpt_fwfault_debug
To disable: #echo 0 >/sys/module/mptbase/parameters/mpt_fwfault_debug



Major Changes For Version 04.00.31.00-1
Release Date:  01/15/2008

General Changes

SCGCQ6530: Fix oops in mptctl_getiocinfo when traversing the sdevice list while trying to obtain the number of devices.  The oops was a result of accessing a NULL pointer for the sdevice hostdata during a small race condition when device was being created.   As a result, sanity checks have been added through out the driver when traversing the sdevice list.  

Major Changes For Version 04.00.30.00-1
Release Date:  01/07/2008

General Changes
Enable MSI interrupt routing for all SAS parts.
Power Management Ã¢â‚¬â€œ enable/disable resources from pm entry points, and block IO.
SAS Transport topology reporting improvements surrounding the processing of events.   For firmware newer than 1.05.12, the driver will be processing expander and link status change events, instead of discovery start/stop events.
Device Add event changes: the test_unit_ready logic will be handling a sense key of ILLEGAL_REQUEST, in that a REPORT_LUNS will be sent for checking for non-zero luns.  If the results indicate there are non-zero luns, the test_unit_ready is retried with a different lun number.
For kernels newer than 2.6.20, a new method implemented for requesting resources at driver load time avoiding IORESOURCES_IO unless the part requires firmware download.  The new method uses pci_request_selected_regions API.  This request came from a customer that witnessed resource problem with multiple host adapters, in that they didn't have adequate IORESOURCES_IO for handling multiple hbas.


Major Changes For Version 04.00.22.00-1
Release Date:  12/12/2007

General Changes

SCGCQ4660: Customer request to place the Ã¢â‚¬Å“ioc not foundÃ¢â‚¬Â debug message under mpt_debug_level set to MPT_DEBUG_IOCTL.
SCGCQ4660: Fix issue where hidden raid components were not being reported to /dev/sg when onlined after being offlined from application.
The scsi-mid layer can_queue depth changed to handle case when HBA reports it supports less than the hard coded queue depth value of 128.  
Made some adjustments in driver to handle low resources, which result in config page request timing out. The fix's include issuing one retry when config page times out, increased the config page timeout from 15 to 30 seconds, and inhibit IO when discovery is in progress. 
When firmware returns MPI_IOCSTATUS_INSUFFICIENT_RESOURCES for normal IO, the return status was changed from DID_SOFT_ERROR to SAM_STAT_BUSY, to better handle this test case. 
Logging info for IR2 events, added Ã¢â‚¬Å“id, channel, and phys_numÃ¢â‚¬Â.
Logging of Ã¢â‚¬Å“completing cmdsÃ¢â‚¬Â is moved from always being displayed to MPT_DEBUG_TM level.


Defect fixes

Issue:  SCGCQ3610, SCGCQ3608, SCGCQ3161 Ã¢â‚¬â€œ system lockup during bus resets.
Reported by: Test
To Reproduce: Issue bus resets with customer agents running.
Description of Change:  The message context was not getting set in the message frame for mptctl_hp_hostinfo.  This was a side effect of adding continuation reply support in mptctl. 

Issue:  SCGCQ4057 Ã¢â‚¬â€œ HBA experiences fault while running stress
Reported by: Test
To Reproduce: Run iomonkey while issing target resets.
Description of Change:   For commands that timeout, free the message frame after host_reset.  The current driver was doing it before.  It appears there was a race condition where firmware was processing a message frame after timeout, and before the host_reset. 

Issue:  SCGCQ1261 Ã¢â‚¬â€œ Hotplug of non-volume drive in hot slot issue.
Reported by: Test
To Reproduce: Create IS volume.  Replace one of the drives when a bare drive, then place the bare drive in some other slot.  The bare drive is not getting assinged a /dev/sd node.
Description of Change:   The bare drive was not getting reported as a normal drive because a it was being placed in the inactive_list.  The reason it was in the inactive list was due to bug in phys_disk_page_0 saying the drive was online, when it should have been INCOMPATIBLE.  The workaround is to look at the flags in phys_disk_page_1.



Major Changes For Version 04.00.21.00-1
Release Date:  11/02/2007

General Changes

Adding rpm/dud binaries for RHEL5.1 GA.
Remove Ã¢â‚¬Å“LSI LogicÃ¢â‚¬Â strings from the driver update disks disk-info and dud.config files.   This was a customer request.

Defect fixes

Issue:  Controller fails to resume coming out of hibernation.
Reported by: Customer
To Reproduce: From the console, do 'echo standby > /sys/power/state', then press power button to bring system out of standby.
Description of Change:  The solution is to issue a diagnostic reset from the mptbase_resume entry point. This is only required for 1064E, 1068E.  The contents of the errata is as follows: The Doorbell register contents do not get cleared when the controller is put into the D3 PCIe  power management state. Upon returning to the D0 PM state, the contents of the register  will be stale data.  This is problematic when the controller firmware is in IOC State Ready when it is moved to  the D3 power state. After being brought back to the D0 power state, the doorbell will incorrectly signal the host driver that firmware is ready to begin processing MPT commands. 

Defect fixes

Issue:  Panic loading mptctl and mptsas(or mptfc) at the same time.
Reported by: Customer
To Reproduce: From the console, do 'insmod mptsas.ko &; insmod mptctl.ko'
Description of Change:  Adding sanity check in mpt_device_driver_register, to insure ioc object has been created prior to calling the probe entry point.  Also delete the calling of mptctl_remove from the mpt_probe entry point.








Major Changes For Version 04.00.20.00-1
Release Date:  10/10/2007

General Changes

Adding rpm/dud binaries for RHEL5.1 pre-release.
Upstream linux kernel merges.
Dual Port Feature testing fixes: DUAL_PORT events respond to device added/deleted, bug fixs in mpt_raid_phys_disk_pg1, add new function mpt_raid_phys_disk_get_num_paths, and the rewrite of mptsas_find_phyinfo_by_phys_disk_num
Continuation Reply support in mptctl: add msg_context member in MPT_MGMT struct keeping track of current request, from mpt_reply added sanity check on new mst_context member ignoring processing reply if that reply was not expected, from mpt_reply check CONTINUATION_REPLY bit by not reposting the the message frame back to FIFO, from mptctl_release_diag_buffer change expected ioc-status from DIAGNOSTIC_RELEASE to SUCCESS, and add macro SET_MGMT_MSG_CONTEXT. 
The device queue_depth was being set to 1 from mptscsih_slave_configure entry point when the target_id is larger than sh->max_id.  For SAS, the transport layer assigns the target_id which is a 32 bit integer value, so the checks on sh->max_id need to be ignored.  This sanity check was intended  for SPI bus which is limited to 16 devices per bus.  The fix in the release is  to not allow SAS bus type to enter this sanity check.
Some debug logging modifications for SPI protocol in mptspi.c and mptscsih.c,  for instance functions mptspi_print_write_nego and mptspi_print_read_nego were modified to use starget_printk.
Fix for SAS, handle discrepancy between phy_page_0 and sas_iounit_page_0 when using Y-cable( 4 phy wide port split into two sets of 2 phy). The handle in phy_page_0 was the same for both sets of 2 phy which is incorrect.   The sas_iounit_page_0 was correct in providing unique sas addresses for both ports of the Y-cable.  So to fix this, the function mptsas_probe_hba_phys will pick up the correct handle sas_iounit_page_0  in setting the identify.handle.


Defect fixes

Issue:  Driver hang when loading CSMI agents in RHEL5 
Reported by: customer
To Reproduce: csmitest using SMP_PASSTHRU  
Description of Change:  Fix stack overflow due to over 2K byte buffer using function stack memory.  Change involves allocation of memory on the fly which uses free slab memory. 

Issue:  CSMI agents are not returning any data for SMP_PASSTHRU 
Reported by: customer
To Reproduce: csmitest using SMP_PASSTHRU  
Description of Change:  The macros CLEAR_MGMT_STATUS added in previous release was clearing out a bit in the status flags that indicating  there was data available from firmware.   This macro was removed.  In addition, the MsgContext was being cleared prior to sending the request, and when the reply arrived in mptctl_reply, it failed the sanity check.  Fix this by not clearing out the MsgContext.


Major Changes For Version 04.00.19.00-1
Release Date:  09/28/2007

Defect fixes

Issue:  Driver panic 
Reported by: customer
To Reproduce: Load mptspi driver when the controller has IR firmware.  
Description of Change:  When there is IR firmware, we create a virtual channel for the hidden raid component.  In mptspi_slave_alloc, we return -ENXIO when there are no devices in the mptscsih_is_phys_disk_sanity check. Due to the early exit, sdev->hostdata has not been set.  The mptspi_slave_destroy is still called, even though the slave_alloc return failure. From mptscsih_slave_destroy, we expect sdev->hostdata to be a valid pointer. There is a sanity check in the built-in driver sources for non-zero sdev->hostdata, however it was removed some time ago in the internal LSI driver sources. 




Major Changes For Version 04.00.18.00-1
Release Date:  09/25/2007

General Changes

Enhancements in the error handling of SAS hotplug device_add events.  From from mptsas_test_unit_ready, added support for return codes : MPT_SCANDV_DID_RESET, MPT_SCANDV_SELECTION_TIMEOUT, and MPT_SCANDV_SOME_ERROR.   The new support would recognize these code and take appropriate action.  Also added were some printks that are useful in determining the failures that could occur during this function.
Fix compilation error in newer kernels over scsilun_to_int.  The fix converted using a different kernel API called int_to_scsilun, which performed the same functionality in obtaining the lun number.  This fix is from the function mptscsih_search_running_cmds.



Major Changes For Version 04.00.17.00-1
Release Date:  09/24/2007

General Changes

Merged code from mainstream drivers
Add dual port support for Raid Volumes having two paths to a single device.   Support added include: (1) new asyn firmware events { MPI_EVENT_IR2_RC_DUAL_PORT_REMOVED and MPI_EVENT_IR2_RC_DUAL_PORT_ADDED}, (2) mptscsih_is_phys_disk and mptscsih_raid_id_to_num functions added support for recognizing dual ports,  (3) new API function mpt_raid_phys_disk_pg1 to read this config page, and (4) csmisas_get_raid_config ioctls to return a Drive Type of  CSMI_SAS_DRIVE_TYPE_DUAL_PORT_SAS flag. 



Major Changes For Version 04.00.16.00-1
Release Date:  09/04/2007

General Changes

For peripheral devices requiring media, such as tapes and cdroms, the devices were not being reported to upper layers when no medium was present.   This issue also occurs for devices that report Ã¢â‚¬Å“LU self configuringÃ¢â‚¬Â when devices are hot added after driver load time.  The fix was to add the appropriate sense code handling for both cases in function mptsas_test_unit_ready.

Major Changes For Version 04.00.15.00-1
Release Date:  08/31/2007

General Changes

Created three versions of mpt_add_sge {32 bit, 64 bit, and 1078 64bit errata fix}, and setting the appropriate handler in the ioc->add_sge function.   This should help with performance, by reducing extra if/then/else checks based on the three different paths.
Broadcast AEN fixÃ¢â‚¬â„¢s:  incorrect LUN was passed for task_management request, clear_task_set was being sent, when it should have been abort_task_set, added ioc->broadcast_aen_busy flag so we disregard any aen events that occur when a current aen event is being processed, and requeue aen event if there is already task mangement request in progress.
Beautify task management debug prints.
mptscsih_change_queue_depth Ã¢â‚¬â€œ set the queue depth to 1 when sdev->tagged_supported flag is cleared.   This insures that devices queues are set to 1 when the device reports they donÃ¢â‚¬â„¢t support tags.
Fix issue where extra device nodes were created mapped to the same device. This problem occurs when the HBA has target_mode enabled.
Fix compile errors when compiling in driver in Linux kernels greater than 2.6.20 (tip is 2.6.23).
Put controller in READY_STATE when driver unloads.



Major Changes For Version 04.00.14.00-1
Release Date:  08/17/2007

General Changes

1078 DMA HW Issue fix Ã¢â‚¬â€œ 

1)	Ensure that the message frames are NOT located in the trouble region.  There is no remapping available for message frames, they must be allocated outside the problem region.
2)	Ensure that Sense buffers are NOT in the trouble region.  There is no remapping available
3)	Walk through the SGE entries and if any are inside the trouble region then they need to be remapped to use POM2 addressing mode as discussed below.


Trouble Region:
Ã¢â‚¬â€œ	0x0000_0009_0000_0000 through 0x0000_0009_1000_FFFF
Ã¢â‚¬â€œ	0x0000_0009_1800_0000 through 0x0000_0009_1800_0FFF
Ã¢â‚¬â€œ	0x0000_0009_1C00_0000 through 0x0000_0009_1C00_0FFF

If an SGE entry points to something in the troubled region then the following needs to be changed for the SGE entry.

1)Set the Local Address bit in the SGE Flags field.  MPI_SGE_FLAGS_LOCAL_ADDRESS
2)Ensure are using 64-bit SGEs
3)Set MSb (Bit 63) of the 64-bit address, this will indicate buffer location is Host Memory.

Broadcast AEN support for multi-initiator devices.
DIAG BUFFER Ã¢â‚¬â€œ IOCTL support
Sparse fixes
Phase 12 mpi headers v1.5.17
Command line option mpt_sdev_queue_depth, and tunable /sys/class/mptsas/parameters/mpt_sdev_queue_depth, for globally adjusting the device queue depth
cb_idx fixes found during code review
domain validation fixes Ã¢â‚¬â€œ set default period to 0xF, instead of 0xA


Major Changes For Version 04.00.13.00-1
Release Date:  07/20/2007

General Changes

Merged CSMI IOCTL code; all three driver streams using same common code. 


Major Changes For Version 04.00.12.00-1
Release Date:  07/18/2007

General Changes

ATTO 4LD support:  rebranded 53C1030, required a different PCI vendor id, and spi_port_page_2 is in a different format than specified in the mpi spec, so we add code to reformat the bits into our format.
Merged in the sysfs patch changes requested by the linux community:  driver_version removed, removed usage of buf_out, and hba_properites obtains driver_version from /sys/module/mptbase/version.
Removed setting the NB bits for task management request that is sent via high-priority-request-q.
cb_idx changes: mpt_get_cb_idx function changed to scans the ids in descending order, and MPT_MAX_PROTOCAL_DRIVERS changed back to 0xF.
Brocade support for loading mptctl at boot time in the RPMs.  This involved updating the init script fusion.mptctl.


Major Changes For Version 04.00.11.00-1
Release Date:  06/26/2007

General Changes

SLES10 Duds were not working.  The problem was the directory path to the drivers on the duds was incorrect.
The CSMI IOCTL routine csmisas_get_raid_config has been changed to report the correct drive count when either DRIVES or DEVICE_ID is requested.
The CSMI IOCTL routine csmisas_get_raid_config will return a place holder for missing drives (actually implemented in the 4.00.08.00 version)
Ã¢â‚¬Å“LSI Logic CorporationÃ¢â‚¬Â copyright changed to Ã¢â‚¬Å“LSI CorporationÃ¢â‚¬Â through out the sources.  And all other references to Logic have been removed.
Mpt_linux_developer@lsi.com mailto changed to DL_MPTFusionLinux@lsi.com
SendEventNotification changed to send request via doorbell using handshaking protocol.   Interrupts are enabled after this call completes.
The watchdog FAULT handler was changed to run in user context.  
The MPT_IOC_POST_RESET callbacks after soft and hard reset are invoked even though the controller didnÃ¢â‚¬â„¢t recover.  If the controller didnÃ¢â‚¬â„¢t recover, the ioc->active flag is set to zero. When ioc->active is zero, the callback handlers will prevent sending commands that require interrupts.
The callback index called cb_idx found through out the code was changed from integer to u8.    mpt_stm_index and mpt_lan_index were deleted, and cb_idx is obtained thru new function mpt_get_cb_idx. All the associated callback indexÃ¢â‚¬â„¢s and functions that return those values are all changed to u8.
Cleanup mptctl prints and debug messages so they are using the MYIOC_s_XXX_FMT format.
Fix bug for MPT_COMMAND ioctls that sends mpi_functions equal to Ã¢â‚¬Å“task managementÃ¢â‚¬Â request.  For SAS the callback index was not set properly, thus having its completion routine routed to the wrong function. From mpt_put_msg_frame_hi_pri, the input parameter was changed from ioc->TaskCtx was to mptctl_id.
Big Endian fixes in mptsas_send_discovery_event and mptsas_send_raid_event.  Under power pc, when a volume was activated via lsiutil (for an inactive volume), the device driver was not reporting the volume to upper layers, hence the volume wasnÃ¢â‚¬â„¢t seen.
mpt_fc_log_info Ã¢â‚¬â€œ rewrite, so it includes lsi/mpi_log_fc.h
Cleanup error handling entry points print and debug info.
Delete lsi/mpi_inb.h Ã¢â‚¬â€œ unused.
mpt_diag_reset Ã¢â‚¬â€œ code has been added to break early from the Ã¢â‚¬Å“wait-for-readyÃ¢â‚¬Â loop after diag_reset. The early break occurs when  when the card is found to be in FAULT state after one iteration.
Mpt_do_ioc_recovery Ã¢â‚¬â€œ force reset of alternate controller when the reason is MPT_HOSTEVENT_IOC_RECOVER.


Major Changes For Version 04.00.10.00-1
Release Date:  06/13/2007

General Changes

Driver was striping the first three characters of product name.  For instance, Ã¢â‚¬Å“BRE040Ã¢â‚¬Â is being displayed as Ã¢â‚¬Å“040Ã¢â‚¬Â.   The fix implemented in MptDisplayIocCapabilities, is to delete the code which strips of the first three characters of Ã¢â‚¬Å“ioc->prod_nameÃ¢â‚¬Â.

Major Changes For Version 04.00.09.00-1
Release Date:  06/11/2007

General Changes

Added support in mptfc.c for pci vendor id (0x1657) Ã¢â‚¬â€œ FC949E, and displaying  the string Ã¢â‚¬Å“BRE040Ã¢â‚¬Â when the driver loads
Add support for displaying revision strings for 1064E B3, 1068E B3, 1078 C2, and 1030T A3 when the driver loads.
Removed the Ã¢â‚¬Å“ioc->activeÃ¢â‚¬Â check in mptctl_ioctl.



Major Changes For Version 04.00.08.00-1
Release Date:  06/1/2007

General Changes

MPI v1.5.16 Headers
SLES10 SP1 support
Watchdog timer for monitoring controller ioc state for FAULTs
Several Task management Updates, issue Message Unit Reset as first level recovery from timeouts, task_abort always returns SUCCESS when it determines the outstanding command was completed.
1030 errata fix - on a slower PCI bus (75 MHz or less) on a non-paced (below U320 speed) 1030 data transfer the DMA engine can be prematurely shut off, resulting in a data underrun condition (even though the target device transferred all of the data).  This happens on a Read or Verify only (not on a Write).
Increase SAS task mangement timeouts to 30 seconds
Increase mpt_config timeout to 15 seconds
Fix panic when creating IME volumes using cfggen
Add command line option Ã¢â‚¬Å“mpt_disable_hotplug_remove: to disable hotplug remove in mptsas.  Also sysfs attribute to toggle this flag while driver is running.
Add hi-priority request queue support for SAS task management requests.
Firmware download boot updates


Major Changes For Version 04.00.07.00-1
Release Date:  05/10/2007

General Changes
Fix driver compilation errors with SLES10 SP1.   This was fixed by enabling the MPT_WIDE_PORT_API defines at the top of  mptsas.c
CSMI_GET_CNTRL_CONFIG Ã¢â‚¬â€œ set the uHighPart variable when BaseMemoryAddress is found to be above the 32bit limit.
The functions mptscsih_do_cmd and mpt_config, which send internal commands, were cleaned up.  The handling of internal command timeouts using watchdog timers were deleted, replaced with the wait_for_completion_timeout API and entry/exit mutexÃ¢â‚¬â„¢s.
The flag hd->resetPending was renamed to hd->quiesce_io. This flag used to queisce io during host reset. The use of this flag was expanded to queisce io for any task management request as well as SAS discovery.   For hard reset, IO will be queisced for the alternate controller when the controller is for dual pci function, such as the 1030.   Use the spin lock diagLock, instead of FreeQlock when setting or clearing the quiesce_io flag.
From mptbase.h, deleted several unused structure variables in MPT_ADAPTER, CONFIGPARAMS, and MPT_SCSI_HOST.   Deleted MPT_LOCAL_REPLY structures, and moved sas_mapping and sas_device_info structures over to mptsas.h.
SAS hotplug enhancements Ã¢â‚¬â€œ for hot add case, re-queue the event on 5 second intervals for 1 minute until the device is found in the topology.  Added unique exit codes for mptsas_add_end_device to help with debugging hot add events.
Add support to report a deleted RAID volume to upper layers when a firmware event is received saying the volume has been disabled. 
Added support in mptfc for displaying port link speed.
Fix setting SMART event data in mptscsih_copy_sense_data, so the addition of channel, target, and lun are using Ã¢â‚¬Å“|Ã¢â‚¬Â instead of Ã¢â‚¬Å“||Ã¢â‚¬Â.


Major Changes For Version 04.00.06.00-3
Release Date:  04/26/2007

General Changes
Adding KMP support, and new subfolder kmp-${release_version}

Major Changes For Version 04.00.06.00-2
Release Date:  04/25/2007

General Changes
RHEL5, adding support for installing RPM after a DUD install.

Major Changes For Version 04.00.06.00-1
Release Date:  04/10/2007

General Changes
Documentation headers were added through out mptsas.c
The function mpt_HardResetHandler input parameter is changed from NO_SLEEP to CAN_SLEEP, called from mpt_timer_expired, mptscsih_taskmgmt_complete, and mptscsih_timer_expired.
Added MPI_EVENT_SAS_DEV_STAT_RC_ASYN_NOTIFICATION from mpt_display_event_info.
In mptctl.c, changed the severity of the prink following mpt_verify_adapter, from KERN_ERR to KERN_DEBUG.
Hotplug handling improvements which decrease the impact of keyboard freeze when many drives are added and removed.   The calling of mptsas_discovery_work from mptsas_hotplug_work was removed, and devices can be added from the discovery thread.  The handling of raid events for hidden raid components was broken out into MPTSAS_XXX_PHYSDISK and MPTSAS_XXX_PHYSDISK_REPROBE events. Some improvements in mptsas_send_raid_event reduce the number times raid events are scheduled.   The ssleep() in mptsas_test_unit_ready was moved so its only called when the device is known to be busy, also support for sending test_unit_ready to hidden raid component was added.   Fix bug in mptsas_probe_expander_phys where the Ã¢â‚¬Âstruct deviceÃ¢â‚¬Â parent pointer was set to NULL, resulting in device not being reported to transport layer after hot delete/add events.   Hot delete/add functions were broken out into new functions mptsas_add_end_device and mptsas_del_end_device.






Major Changes For Version 04.00.05.00-1
Release Date:  03/26/2007

General Changes
mptfc_SetFcPortPage1_defaults into mptfc_rescan_devices which executes in a work queue thread to allow board hard reset processing to complete.  mptfc_SetFcPortPage1_defaults was being called by POST_RESET processing with diagPending set.  Hangs were observed due to mpt_config() not completing due to the config message timing out.  The hard reset handler couldn't execute due to diagPending being set.  This change allows another hard reset which will clean up the outstanding config message.
Fix oops in mptsas_ioc_reset. This would occur if a timeout occurs at driver load time, prior to scsi host registration.  For example, at driver load time, config pages are read to obtain defaults, and a  timeout could occur if the request didnÃ¢â‚¬â„¢t complete. Added are  sanity checks in mptsas_ioc_reset  checking for NULL pointers. 
Added verbose messages to track when devices and expanders are hot added or deleted.
Added support to handle hidden raid component removal when the MPI_PD_STATE_FAILED is received.
Changes surrounding hidden raid components, such as preventing task management request and sync cache when the device is known to be a hidden raid component
Add support to prevent sync cache for deleted devices when they 
known to be physically removed; fix in mptsas and mptfc.

Defect fixes

Issue:  Source RPMs failed while building the binaries.   
Reported by: test
To Reproduce: install the SRPM, then go to /usr/src/package, and try `rpmbuild Ã¢â‚¬â€œbb mptlinux.spec`
Description of Change:  Added fusion.mptctl in Sources section of spec file.

Issue:  Pulling a drive from a RAID1 volume will result in volume being remounted as Ã¢â‚¬Å“read-onlyÃ¢â‚¬Â.
Reported by: Customer
To Reproduce: Install SLES10 onto RAID1 volume with a driver supplied from LSI (not the built-in SLES10 driver), then send some IO to the volume, pull one of the drives, then monitor errors sent to  /var/log/messages
Description of Change:  The reason the volume was being re-mounted as Ã¢â‚¬Ëœread-onlyÃ¢â‚¬Â was when the drive was pulled, IO to volume was accidentally being terminated with DID_NO_CONNECT, which means there is no device.  The end result is the filesystem thinking the device was removed, thus takes less risk by remounting it with write access disabled.   This problem manifested due to hidden raid components being exposed. The per device object retains the target id as the physdisk id in the object and it so happens that the physdisk id is matching the volume id.   The fix was to add sanity check insuring that when the hidden raid component is torn down, it will only terminate IO to that device, and not the volume



Major Changes For Version 04.00.04.00-1
Release Date:  03/06/2007

General Changes
MPI header update version 1.5.15
New Ã¢â‚¬Å“on the flyÃ¢â‚¬Â enabling of debug logging.   This can be modified in SysFS, located in /sys/class/scsi_host/host#/debug_level.   In addition, there is a new command line option in mptbase.c that will enable debug logging at driver load time.  The command line option is called mpt_debug_level.   Example:

insmod mptbase.ko mpt_debug_level 0x408

This enables SCSI reply info and events logging.

Change a majority of the debug logging to KERN_DEBUG priority.
Display board rev level and chip type when driver loads in kernel log.
Several new SySFS host attributes added in /sys/class/scsi_host/host#.   There is new script in source that will dump these new attributes.  ItÃ¢â‚¬â„¢s found in subfolder scripts, the file called hba_properties.  These new attributes will display various versions of bios/driver/firmware/mpi/nvdata, as well as the board assembly/name/tracer, in addition to io_delay and device_delay.
CSMI IOCTL get_controller_config Ã¢â‚¬â€œ return base_io and base_memory address from the values setup when driver loads.  It was found with 1078 that IO address range was not being returned. This was due to the expected IO range not being found in the first resource bar, which is what the code was expecting.
CSMI IOCTL get_controller_config Ã¢â‚¬â€œ removed function csmisas_get_manufacture_pg0, then instead obtaining the board serial number saved off when driver initialized.
Added support for upto 256 SGELÃ¢â‚¬â„¢s for mptfc.
Added support for displaying SAS_EXPANDER_STATUS_CHANGE event in the kernel logging.
Mptlan Ã¢â‚¬â€œ fix for setting RequestNB to zero.
Fix memory leak in mptsas and mptspi, which would occur at driver load time if pci_register_driver failed.
Increased mpt_cmd_retry_count from 60 to 144 seconds.
In mptscsih_io_done, removed the SAM_STAT_BUSY if/then check that would return DID_BUS_BUSY, instead return the sam status as is.   The scsi mid layer no longer does infinite retries when busy is returned.
Cleanup scsiio reply logging; renaming the function from mpiscshi_iocstatus_info_scsiio to mptscsih_info_scsiio.
Picked up some upstream janitorial driver cleanup, most changes in documentation.

Major Changes For Version 04.00.03.00-3
Release Date:  03/06/2007

General Changes
Re-spin dkms rpm with a modification in spec file of adding xen support.

Major Changes For Version 04.00.03.00-2
Release Date:  03/1/2007

General Changes
Removed application source code from package.
RHEL5 support




Major Changes For Version 04.00.03.00-1
Release Date:  02/28/2007

General Changes
Changed memory allocation method in csmi ioctl stp pasthru to use the get_free_page API, due to some request failing.

Defect fixes

Issue:  Panic when csmi ioctl GET_PHY_INFO is called.
Reported by: Customer
To Reproduce: This is seen on RHEL5 32bit, using csmitool, option #7.
Description of Change:  Root problem was stack overflow.  Change code to allocate memory for input/output buffer from kernel slab rather than the stack.  The requested buffer was 2kb, which is too large for the stack.



Major Changes For Version 04.00.02.00-1
Release Date:  02/16/2007

General Changes
Sorting volumes in ascending order before they are reported to upper scsi layers.


Major Changes For Version 04.00.01.00-1
Release Date:  01/08/2007

General Changes
Merge in upstream kernel changes from 2.06.20 kernel; including kernel-doc changes, and INIT_WORK(work task) API change.
Memory allocation in csmisas.c was changed from kmalloc to get_free_pages where more that 128 KB of memory may be requested.  This allows the IOCTL to proceed normally rather than failing due to a memory allocation failure.  This was noticed in the ssp_passthru routine that was being used by an application to flash disk drive FW that was about 750 KB.
Sorting volumes so they are reported in ascending order.  The driver is reporting volumes based in ioc page 2, and firmware can fill in this config page with volumes listed in descending order.

Defect fixes

Issue:  Panic when ioctl passed thru mptctl.ko times out.
Reported by: Test.
To Reproduce: This was replicated in creating an IME volume.
Description of Change:  Change mpt_HardResetHandler in passing CAN_SLEEP, instead of NO_SLEEP.

Issue:  Target reset occurs during creation of an IME volume.
Reported by: Test.
To Reproduce: This was replicated in creating an IME volume.
Description of Change:  The MPI_EVENT_RAID_RC_VOLUME_CREATED firmware event was issued by firmware too soon, and the target would timeout the first inquiry command, which lead to target reset.   The fix was to add a delay via mptsas_test_unit_ready, which by the time the inquiry was passed, it was accepting commands.


Major Changes For Version 04.00.00.00-1
Release Date:  01/08/2007

General Changes
Bump Version


Major Changes For Version 03.03.20.00-1
Release Date:  01/08/2007

General Changes

Functionality
SAS Loginfo updates
lsiutil updates Ã¢â‚¬â€œ version 1.48.11
endian bug fix's for ppc
renamed mpt_sp_ioc_info to mpt_iocstatus_info, and added some updated printks
CSMI = GET_RAID_CONFIG (Device ID and Additional Data) were not working, and it involved bug fix's in both driver and application.
CSMI = GET_LOCATION - two hot spares was not being displayed, only one
MPT_DEBUG_REPLY Ã¢â‚¬â€œ cosmetic clean up for this debug level

Defect fixes

Issue:  Upgrading from an older to newer RPM doesnÃ¢â‚¬â„¢t upgrade properly when using Ã¢â‚¬â€œUvh options.   You will see several Ã¢â‚¬ËœmvÃ¢â‚¬â„¢ errors.
Reported by: Test.
To Reproduce: Install an rpm using Ã¢â‚¬Ëœrpm Ã¢â‚¬â€œivhÃ¢â‚¬â„¢, then try upgrading to a newer version using Ã¢â‚¬Ëœrpm Ã¢â‚¬â€œUvhÃ¢â‚¬â„¢.
Description of Change:  Corrected several bugs in the rpm spec file.

Issue:  Hidden raid component exposed to block layer after resysnc
Reported by: Development.
To Reproduce: Create an IM volume, and resycn one of the drives. After the drive completed, see drive assigned block dev node, such as /dev/sda.
Description of Change:  Added flag ev->hidden_raid_component to track whether a drive needs exposing during hot plug handling.



Issue:  panic in mptspi_is_raid
Reported by: Development.
To Reproduce: Load mptspi (53c1030) driver when there is IT firmware.
Description of Change:  Added sanity NULL pointer check for ioc_page_2.  In previous version of driver, the volume pages are not cached when IR firmware is not detected.




Major Changes For Version 03.03.19.00-1
Release Date:  12/20/2006

General Changes

Functionality
CSMI IOCTL Ã¢â‚¬â€œ set_phy_info , changed return code from CSMI_SAS_STATUS_FAILED to CSMI_SAS_STATUS_BAD_CNTL_CODE to comply to the csmi spec for returning proper code when ioctls are not implemented. 
CSMI IOCTL - get_raid_element and set_raid_operation, added framework for these ioctls, but they are not implemented
CSMI IOCTL - csmisas_raid_id_to_num Ã¢â‚¬â€œ changed return value to signed because failure case is a negative number, and with it being unsigned, it could be interpreted incorrectly.
CSMI IOCTL - csmisas_get_number_hotspares Ã¢â‚¬â€œ changed to return zero for failure case.  Before it was returning negative number when mpt_config failed.
CSMI IOCTL - csmisas_get_ioc_pg5 Ã¢â‚¬â€œ added data size as input parameter for the return buffer.  In the testing of two global hotspares, it was found the data size was not calculated properly, which resulted in the 2nd hotspare info was not returned.
CSMI IOCTL - csmisas_get_raid_config  and mptspi_is_raidÃ¢â‚¬â€œ added check to validating if ioc page2 was non-zero.  In previous release, a change prevents reading associated RAID pages when its determined that the firmware is IT.
mpt_send_handshake_request Ã¢â‚¬â€œ was reverted back to previous implementation so the data size was passed as input param.
MPTSAS_MAX_LUN = changed the max_lun from 511 to 16895.  According to SAM3 section 4.9, for luns greater than 255, you must use the flat space address model, which means bit 6 of the 1st byte needs to be set.  16895 is the equivalent to 511.
FixÃ¢â‚¬â„¢ed the reporting of the proper sas_address for the hba phys that form a wide port.  This is reported in the SySFS under /sys/class/sas_phy/phy-x:y/sas_address
Added sanity checks in mptsas_ioc_reset to prevent possible opps when the list hd->target_reset_list is checked.  This could occur if host reset occurs before this list is initialized.   Also moved the spin locks down in mptsas_probe to after the list is initialized.
mptscsih_io_done Ã¢â‚¬â€œ If MPI_IOCSTATUS_SUCCESS and MPI_SCSI_STATUS_BUSY is returned, avoid returning DID_BUSY_BUSY for SPI.  This requested by vmware.
mptscsih_io_done Ã¢â‚¬â€œ If MPI_IOCSTATUS_SCSI_IOC_TERMINATED returned for FC, avoid infinite retries by returning DID_ERROR instead of DID_RESET.
mptscsih_IssueTaskMgmt Ã¢â‚¬â€œ If handshake failÃ¢â‚¬â„¢s or request times out, clear the tmPending and tmState flags.  Since these flags were not cleared, the next task management request would not get issued since sanity checks of these flags would fail.   These flags were not being clear because FAILED was being returned, and the from the eh entry points, we were only clearing them if the return was not the Ã¢â‚¬Å“FAILEDÃ¢â‚¬Â return value.
mptscsih_taskmgmt_complete -  for task aborts, check the termination_count in the reply mf to verify whether the task was completed.   Without this fix, its possible that the driver could return a FAILED status to scsi-mid layer, when actually the command was aborted.  This could occur during port down retry, as the firmware returned MPI_IOCSTATUS_SCSI_TASK_MGMT_FAILED even though it completed the task.  The firmware would do that because the tasks are in the internal pending Q, instead of the request Q, so the task abort never issued across the wire.
mptscsih_get_scsi_lookup and mptscsih_set_scsi_lookup Ã¢â‚¬â€œ change the spin looks to having irqsave/irqrestore API. During some target mode testing, was seeing periodic opps when this API is called.



Major Changes For Version 03.03.18
Release Date:  11/27/2006

General Changes

Functionality
Merged CSMI IOCTLS that can be shared between 2.6, 3.2, and 3.3 path drivers
Merged RHEL5 and SLES10 functionality
Change ioc->DevicesPerBus max value based on port_facts->PortSCSIID, instead of ioc->MaxDevices.    This is to insure proper device scan at driver load time.  The MaxDevice fields means max number of targets the firmare will enumerate, but with persistant ids, its does not reflect the maxium number of target_ids that firmare could assign.   The firmware reserves some target_ids for persistent_ids, but it will not exceed PortSCSIID, thus this required change.



Major Changes For Version 03.03.17.05
Release Date:  11/17/2006

General Changes


Defect fixes

Issue: system hang at bootup after installing csmi agents.
Reported by: Test.
To Reproduce: Install csmi agents and reboot.
Description of Change:  Fixed a panic in csmisas_fill_location_data_raid() due to NULL pointer.





Major Changes For Version 03.03.17.04
Release Date:  10/25/2006

General Changes

Defect fixes

Issue: cmsitest tool GET_LOCATION ioctl doesnÃ¢â‚¬â„¢t work
Reported by: Customer.
To Reproduce: Use the csmitest tool to issue GET_LOCATION ioctl
Description of Change:  Add helper routines that will convert OS to FW mapping.   This ioctl input is OS mapping.   This fix was also applied to GET_DEVICE_ADDR, GET_SCSI_ADDR, and ISSUE_TM_PASSTHRU, which also have mapping pass as the input.

Major Changes For Version 03.03.17.03
Release Date:  10/20/2006

General Changes

Defect fixes

Issue: task aborts resulting from cable pull during heavy I/O
Reported by: Customer.
To Reproduce: Setup several targets with IO sent simultaneously to each device, then cable pull.  Both IO Missing delay and device missing delay need to be enabled.
Description of Change:  The worker threads were not invoked fast enough following device_not_responding event, thus scsi mid layer was timing I/O out.   The change is to issue target reset immediately when the event arrives from the interrupt handler.  A link list is used to queue up the commands.    

Issue: csmitest_tool : sas_address for failed drives is not retained in various configurations, most notably RAID0.
Reported by: Customer.
To Reproduce: Create a RAID0 volume, and pull a drive.  The sas_address should be non-zero for the pulled drive.
Description of Change:  Added device link list to retain sas_addressÃ¢â‚¬â„¢s when devices are added.  Devices are not removed from the list after they have been deleted, however when a device is added, there are sanity checks to insure there are unique target id and/or sas address populated in the list.     





Major Changes For Version 03.03.17.01
Release Date:  10/13/2006

General Changes

Functionality
All Debugging printkÃ¢â‚¬â„¢s in csmisas.c module are moved under MPT_DEBUG_CSMISAS.  Also added more enhanced debugging for ssp_passthru.

Defect fixes

Issue: csmitool Ã¢â‚¬â€œ GET_RAID_CONFIG doesnÃ¢â‚¬â„¢t show fault tolerant volume with rebuilding status when itÃ¢â‚¬â„¢s rebuilding.
Reported by: Customer.
To Reproduce: Create a IM volume, and pull a drive, and reinsert. Use csmitool to display raid_config, and notice the RaidStatus.  
Description of Change:  The driver wasnÃ¢â‚¬â„¢t looking at the correct member in the volume_page0 structure to determine if the array was rebuilding, or if the array was inactive.

Issue: csmitool Ã¢â‚¬â€œ GET_RAID_CONFIG doesnÃ¢â‚¬â„¢t show FAILED logical volumes. 
Reported by: Customer.
To Reproduce: Create a IS volume, and pull a drive. The volume becomes FAILED. Use csmitool to display raid_config.
Description of Change:  Add support in driver for FAILED logical volumes. 

Issue: csmitool Ã¢â‚¬â€œ SSP_PASSTHRU was sending passthru to incorrect target after a logical volume is created. 
Reported by: Development.
To Reproduce: Create a volume, and send INQUIRY via SSP_PASSTHRU. Notice that one of the sas_addressÃ¢â‚¬â„¢s will return data to the logical volume instead of the hidden physical disk.
Description of Change:  The change is to look at the phy_info->attached.phys_disk_num to determine if the device is a hidden raid component, and for RAID_PASSTHRU, send the correct target phys disk number for the target_id. 


Major Changes For Version 03.03.17
Release Date:  10/09/2006

General Changes

Functionality
LSIUTIL update Ã¢â‚¬â€œ version 1.47
Add command line option max_lun for mptsas and mptfc.  The default is 511.   The scsi_mid layer parameter is max_report_luns, for changing the max supported luns.  Both parameters will need to modify if greater than 512 is required.  
CSMI GET_LOCATION Ã¢â‚¬â€œ add hot spare support when the target id is for a logical volume.
CSMI SSP_PASSTHRU Ã¢â‚¬â€œ move code to read in payload buffer for a WRITE to the top of function, where the entire buffer could be properly read in from user to kernel space.
CSMI GET_RAID_CONFIG Ã¢â‚¬â€œ fix volume size for greater than 2TB, but in raid component calculation and hot spare sanity checks
CSMI GET_RAID_CONFIG Ã¢â‚¬â€œ add support for displaying offline logical volumes, as well as adding support in in csmitest tool.  Including a bug fix in csmitool which had caused an infinite loop when an ioctl returned unsuccessful return codes.
CSMI Ã¢â‚¬â€œ some little endian fixÃ¢â‚¬â„¢s (some 32bit fields were using 16bit le conversion).
Ioctl status flags cleanup, in both mptctl and csmi.
Fix driver panic when uloading mptfc.  This was created with previous driver when support for inactive raid volumes was added. The problem was due to the inactive_list link list not being initialized for FC.
In handshaking routines, changing mdelay to udelay, as it failÃ¢â‚¬â„¢s when handshaking during interrupt time.
Mptfc updates, support for new fibre channel attributes, merged in from upstream kernels.
Mptfc updates, support for blocking error handling when devices are being removed, thus preventing panic situation. This code merged in from upstream kernels.
Adding spin_locks when accessing ScsiLookup[] array, protecting this array as its touched during request, completion, and error handling time.
Mptspi Ã¢â‚¬â€œ domain validation fixÃ¢â‚¬â„¢s to insure the inquiry max speed test is negotiating at correct speed.  This fix involves reading the inquiry data, and setup the proper min sync.  This fix was corrected in 2.6.19 kernels in spi transport layer.  Also added debug messages to properly debug, enabling MPT_DEBUG_DV.
Mptspi Ã¢â‚¬â€œ fix infinite domain validation when a command times out, resulting in host reset.  The fix is to program last known parameters w/o having start domain validation all over again.
Mptspi Ã¢â‚¬â€œ sanity checks added to prevent panic which could occur if the reading of config pages within mpt_attach timeout when driver loads, thus resulting in a host reset.  The host reset callback handler in mptspi was assuming hd pointer was non-zero.
Adding channel support in mptscshi_search_running_cmnds , supporting greater than 255 targets. This would effect a host reset, when there were devices populated on more than one bus.
Task aborts were returning FAILED to scsi mid-layer, even though the task management request succeeded.  Thus was fixed in the hd->tm_iocstatus check in mptscsih_IssueTaskMgmt function, adding TASK_TERMINATED and IOC_TERMINATED.


 




Major Changes For Version 03.03.16
Release Date:  09/07/2006

General Changes

Functionality
Greater than 256 target and lun support, upto 32bit value, restricted by firmware max supported devices.
Inactive RAID volume support; reporting its hidden raid components at driver load time, and when foreign configurations are added.  When inactive volume is deleted, the hidden raid components idÃ¢â‚¬â„¢s are reported to block layer. When inactive volume is activated, then the volume id is reported to block layer. 
Csmisas.c - get_raidconfig Ã¢â‚¬â€œ adding support to report DriveType for hotspares.
Mptspi.c - Cleanup of mptspi target_alloc and slave_alloc routines; adding mptspi_qcmd.
Mptfc.c Ã¢â‚¬â€œ when initiator protocol is disabled, return 0, instead ENODEV.  Returning EDNODEV, prevented additional controllers to be probed.
Mptbase.h - Delete hd->Targets[] memory array.  Changes in VirtTarget, using id instead of target_id, and channel instead of bus_id, and delete luns[8].
Mptbase.c - Cleanup mpt_findImVolumes; changed malloc calls to use GPF_KERNEL, instead of GFP_ATOMIC, added proper allocation, deallocation of pIocPg2





Major Changes For Version 03.03.15
Release Date:  09/01/2006

General Changes

Defect fixes

Issue: csmitool Ã¢â‚¬â€œ ioctl get_raid_config, doesnÃ¢â‚¬â„¢t display a sas address when drive is pulled.
Reported by: Customer.
To Reproduce: Create a IM volume, and pull a drive.  Use csmitool to display raid_config, and notice the sas_address.  
Description of Change:  Add a link list inside the volume vtarget instance that maintains the sas address, target id, and channel for all the hidden raid components. When a drive is pulled, the old data is retained.  When a new target is added to existing volume, the new raid component info is added into the link list.  If there is an target id/channel that matchÃ¢â‚¬â„¢s the new device, the old data is replaced with the new data.



Major Changes For Version 03.03.14
Release Date:  08/25/2006

General Changes

Functionality
Add support to display driver version when using the modinfo utility.
vdev sanity check in mptfc_qcmd. 
Added lsiutil version 1.46.06
Added updated csmitest_oem v90 support

Defect fixes

Issue: csmitool displays hotspare in IS volumes.
Reported by: Customer.
To Reproduce: Create two volumes that are IM and IS, and a hostpare. Then using csmitool to display select GET_RAID_CONFIG, verify that hotspare is only listed for the IM volume.  
Description of Change:  Added check for volume type.



Major Changes For Version 03.03.13-2
Release Date:  08/16/2006

General Changes

Functionality
Removed xenpae configuration from the i686 build. 
Added Power PC `ppc64` driver update disks and rpms.

Defect fixes

Issue: Unresolved symbols using driver update disks.
Reported by: Software test.
To Reproduce: Installing SLES10, with DUD, selecting F5 option. 
Cntrl^Alt^F3 will display unresolved symbols when the driver are 
loaded from DUD.
Description of Change: The Yast installer was unloading media 
drivers in incorrect order when attempting to load the DUD drivers. 
The unresolved symbols came because the media drivers were 
never unloaded. The fix was adding a file on the dud called 
module.order, so the installer knows what order drivers need to be 
unloaded and loaded.



Major Changes For Version 03.03.13
Release Date:  08/08/2006

General Changes

Functionality
Added debug printks for new events
	MPI_EVENT_SAS_BROADCAST_PRIMATIVE
	MPI_EVENT_SAS_INIT_DEVICE_STATUS_CHANGE
	MPI_EVENT_SAS_INIT_TABLE_OVERFLOW
	MPI_EVENT_SAS_SMP_ERROR
removed obsolete flag ioc->reload_fw

Defect fixes

Issue: Path is not being added in a Controller Offline/Online, No REPORT_LUNS command was sent in the Ctlr Plug-back
Reported by: Customer.
To Reproduce: By adding/removing/adding cables, offline/online target mode controllers using serial console commands `rdacMgrAltCtlResetHold` and `rdacMgrAltCtlResetRelease`
Description of Change:  Fix's surrounding issuing TUR during device add. The driver needed to send the TUR's on one sec intervals, and only retry on sam_status_busy, unit_attention, and
device becoming ready.

Issue: The LSI HBA driver gives a Panic after a Cable Pull
Reported by: Customer.
To Reproduce: 
1. It's a 1x1 setup with one host connected to one array (ksystone)
2. Install HBA driver & MPP
3. Map 32 LUNs to the host
4. Reboot the host
5. After the host boots up, start I/O's to all the 32 LUNs
6. Pull the Cable on CtlrB
7. After the FW timer of 144secs expires, the HBA driver started removing the devices and that's when the HBA driver gave a Panic and the Panic stack is as follows with the EIP at "mptsas_qcmd+0x8/0x28 [mptsas]"
Description of Change:  Added a pointer sanity check in mptsas_qcmd.

Issue: Deletion/Creation of volumes after reboots results in doubled volume entries in SG
Reported by: Software Test
To Reproduce: 
cfggen 0 create im 2000 0 1 qsync noprompt
cfggen 0 create ime 2000 2 3 4 5 noprompt
cfggen 0 hotspare 6

Reboot, and then run:
cfggen 0 delete noprompt

Then run the volume creation commands again.

View the SG device listing using "sg_map -i -x". Where the primary drives should be listed will be listings for the volumes, in additon to the normal entries for the volumes later down in the list.
Description of Change:  Additional handling of MPI_EVENT_RAID_RC_PHYSDISK events.

Issue: After deleting an inactive volume, the driver does not re-add the disks	
Reported by: Software Test
To Reproduce: Delete an inactive volume, the drives that were in that volume are not added by the driver. 
According to 'dmesg', we receive the events for it, but they are just not added.
/proc/scsi/scsi and 'sg_map -i -x' do not show any of the disks that were in the inactive volume. 
Description of Change:  Additional handling of MPI_EVENT_RAID_RC_PHYSDISK events.

Issue: Taking way too long to recover from FAULT STATE	
Reported by: Software Test
To Reproduce: Make filesystems on both volumes and start copies/compares between the two.
Pull the primary on the IM volume, wait 30 seconds after the volume has started resyncing with the hotspare and then pull the first drive of the IME volume. Wait for the IM volume to finish resyncing and then pull the third drive of the IME volume.
30 seconds later, pull the old hotspare.   After pulling the old hotspare, the card blinks a 801f fault. Linux takes anywhere from 10-20 minutes to recover from the fault (entered as separate Linux issue #392). IO does not fail, and resumes after recovery from the fault.
Description of Change:  In error handling threads, issue hard reset when this is not operational.
Issue: CSMI: SAS Address of hot spare drive is all zeroÃ¢â‚¬â„¢s in the data returned from CSMI GET_RAID_CONFIG Ioctl call	
Reported by: Customer
To Reproduce: Create an IM volume with a hot spare drive and using csmitest tool issue CC_CSMI_SAS_GET_RAID_CONFIG call to display Drives information and note the SAS Address field for the hot spare drive
Description of Change:  Moved memset of buffer before filling in SAS Address for a hot spare drive

Issue: CSMI Some of the fields returned by GET_RAID_CONFIG CSMI Ioctl call are not filled-in or returns default values for hot spare drives	
Reported by: Customer
To Reproduce: Create an IM volume with a hot spare drive and using csmitest tool issue CC_CSMI_SAS_GET_RAID_CONFIG call to display Drives information and note that usBlockSize, uDriveIndex are returned zero and bDriveType is returned UNKNOWN
Description of Change:  Filled in usBlockSize, uDriveIndex, and bDriveType fields for hot spare drives in GET_RAID_CONFIG Ioctl


Major Changes For Version 03.03.12
Release Date:  07/28/2006

General Changes

Functionality
Added CSMI IOCTL Support, v90
CSMI_SAS_GET_CNTLR_CONFIG Ã¢â‚¬â€œ updated uControllerFlags
CSMI_SAS_GET_RAID_INFO Ã¢â‚¬â€œ updated uMaxDriverPerSet and implemented new fields
CSMI_SAS_GET_RAID_CONFIG Ã¢â‚¬â€œ updated bDriveCount, bStatus, bInformation, union.Drives and implemented new fields
CSMI_SAS_GET_RAID_FEATURES Ã¢â‚¬â€œ new IOCTL
CSMI_SAS_GET_RAID_CONTROL Ã¢â‚¬â€œ new IOCTL
Updated CSMI_SAS_GET_CONNECTOR_INFO Ioctl by filling in data from Manufacturing Page 7

Major Changes For Version 03.03.11
Release Date:  07/14/2006

General Changes

Functionality

Adding v1.5.13 MPI Headers Updates.
Adding 1078 Support.
Transport Layer Retries support added - OEM specified cdb only for tape devices.
Adding sas nexus loss support, also known as port down retry support.
Adding support for sas enclosures with smart drives.
Adding mpt_cmd_retry_count - during hotadding device, the driver will issue test_unit_ready for waiting for end device to get into state to accept commands. The retry count is to specify how many retries. 
Adding mpt_qas command line option - for disabling Quick Arbitration Select feature for entire host (only mptspi).
Adding new debug prints for new sas loginfo : internal device reset, abort task set internal, clear task set internal, query task internal. Also adding new strings in iop_code_str[] and pl_code_str[].
Initializing aen_event_read_flag to zero after host reset.
SAS hot plug remove handling: the target reset is moved from slave destroy to hotplug threads.  The vtarget->deleted flag is used to prevent further IO to device.
Removing 1066/1066E support pci device recoginization.
Removing mpt_pq_filter command line option.
Converting pci device id's using the MPI_MANUFACTURE_DEVICEID_XXX and MPI_MANUFACTURE_DEVID_XXX defined in lsi/mpi_cnfh.h.
Remove MPI_TARGET_FLAGS_VALID_INQUIRY flag.
Converting define SASDEBUG to MPT_DEBUG_SAS.
Removing oem references.
Returing IRQ_NONE from interrupt handler to let upper layers know when driver didn't process the interrupt.
SendEventAck, called when firmware sends an asyn event to driver. This rountine was cleaned up.
Fix's to insure download boot could occur when either channel of 1030 is reset. Necessary in order for onboard controller in flashless environment to become operational.

Defect fixes

Issue: Lack of Wide Port Support	
Reported by: Developer
To Reproduce: Add wide target.  The end device reported for each phy.
Description of Change:  Wide Port Support (detection of wide/narrow ports, reporting end device once for every phy), adding debug level MPT_DEBUG_SAS_WIDE, adding target alloc and destroy entry points.

Issue: panic when loading mptctl at the same time as one of the fusion llds (mptsas/mptfc/mptspi)	
Reported by: Customer
To Reproduce: Add wide target.  The end device reported for each phy.
Description of Change:  Fix in mpt_device_driver_register, check for NULL pointer pcidev->driver.

Issue: abort_task reported success, when it actually failed.	
Reported by: Developer
To Reproduce: Added hd->tm_iocstatus flag in interrupt routine, and returns proper status
Description of Change:  Additional sanity checks added to prevent scsi cmd from being double completed during error recovery.

Major Changes For Version 03.03.11
Release Date:  07/14/2006

General Changes

Functionality
SAS Transport Support
SPI Transport Support (using generic domain validation)
FC Transport Support
	
(This driver base stream created from 3.02.63)
