git: kernel - Sync numerous commits from FreeBSD
dillon at crater.dragonflybsd.org
Wed Jun 26 22:56:18 PDT 2013
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Wed Jun 26 22:42:56 2013 -0700
kernel - Sync numerous commits from FreeBSD
Synchronize a bunch of commits from the FreeBSD tree. Commit
ids shown below are from the github FreeBSD repo.
Several commits were not synchronized, the main one being 3c7b39f7b5a4...
(Bring in LSI's latest mps(4) 6Gb SAS and WarpDrive driver, version).
This one needs to be brought in.
One other note, not yet fixed is an issue where the driver configures
many more tags than the disk drive can actually support. In my test
case, 255 tags for a Seagate SAS disk that really only seems to support
63. When large numbers of commands are queued, and even sometimes when
not, the drive becomes severely inefficient for reads and writes. Write
bandwidth that is usually in the ~30-50 MB/s range drops to ~5 MB/s.
Doing a camcontrol to reduce tags to ~16 or so seems to fix the issue.
(camcontrol tags da0 -N 16), but we need a permanent solution for this
Bring in a number of mps(4) driver fixes from LSI:
1. Fixed timeout specification for the msleep in mps_wait_command().
Added 30 second timeout for mps_wait_command() calls in mps_user.c.
2. Make sure we call mps_detach_user() from the kldunload path.
3. Raid Hotplug behavior change.
The driver now removes a volume when it goes to a failed state,
so we also need to add volume back to the OS when it goes to
opitimal/degraded/online from failed/missing.
Handle raid volume add and remove from the IR_Volume event.
4. Added some more debugging information.
5. Replace xpt_async(AC_LOST_DEVICE, path, NULL) with
This is to work around a panic in CAM that shows up when adding a
drive with a rescan and removing another device from the driver thread
with an AC_LOST_DEVICE async notification.
This problem was encountered in testing with the LSI sas2ircu utility,
which was used to create a RAID volume from physical disks. The driver
has to create the RAID volume target and remove the physical disk
targets, and triggered a panic in the process.
The CAM issue needs to be fully diagnosed and fixed, but this works
around the issue for now.
6. Fix some memory initialization issues in mps_free_command().
7. Resolve the "devq freeze forever" issue. This was caused by the
internal read capacity command issued in the non-head version of the
driver. When the command completed with an error, the driver wasn't
unfreezing thd device queue.
The version in head uses the CAM infrastructure for getting the read
capacity information, and therefore doesn't have the same issue.
8. Bump the version to 13.00.00.00-fbsd. (this is very close to LSI's
internal stable driver 13.00.00.00)
Return BUS_PROBE_DEFAULT instead of BUS_PROBE_VENDOR from the mps driver
This will allow LSI to ship drivers that return BUS_PROBE_VENDOR to
override the in-tree version of the driver.
Set the max_lun field of the path inquiry CCB to 8.
This allows LUNs greater than 0 to be probed. It can be increased later if
This brings back SVN rev 224973, which was inadvertently removed with the
import of the LSI driver.
* 4b86692e31efa1f09f72ff85635a3fdfe28368c5 (not synchronized)
(Make the mps(4) module depend on the cam module)
* 8473fac9559e9e3560fcd37c558101cd1718ba01 (originated from DragonFly)
(Correct sizeof usage)
* 3c7b39f7b5a4dac525c1cf3896051741096de47a (not synchronized - TODO!)
(Bring in LSI's latest mps(4) 6Gb SAS and WarpDrive driver, version)
* 0069682926e482627d3f64225ad0ad6018023ce6 (not synchronized)
Change the mps(4) driver to only scan a target if that is what is
needed instead of scanning the full bus every time.
Fix a small memory leak in mpssas_get_sata_identify(). The change has been
submitted upstream as well.
Fix kernel panic on `camcontrol reset` for specific target, caused by
uninitialized cm_targ in mpssas_action_resetdev().
Several fixes to allow firmware/BIOS flash access from user-level:
Set max DMA segment size to 24bit, as MPI SGE supports it.
Use mps_add_dmaseg() to add empty SGE instead of custom code.
Tune endianness safety.
Correct double "the the"
* 5277f913de0e34474af844aed711a14c28c20d2b (not synchronized)
(Add casts to unbreak the i386 PAE build for the mps(4) driver.)
Don't lose the 255'th disk behind the initiator.
* 3f7a414911a892c8c84206394eb643cbde706d20 (already synchronized)
remove duplicate semicolons where possible.
* bd7f0fa0bb4b7b0f87227e0c4d49a4bd9b113cf0 (not synchronized)
(Reform the busdma API so that new types may be added without modifying...)
* 8857575b13cf118cc89efb1b462dd314df09c180 (not applicable)
(Replace the TDP_NOSLEEPING flag with a counter so that the)
* 674a0b97f5232c5275bfd0394620e7809315c694 (not applicable)
(Except one case mps(4) driver does not touch the data and works well...)
Stop abusing xpt_periph in random plases that really have no periph related
Fix uninitialized warning in mps
Fix NULL-dereference kernel panic in case of mps_attach() failure.
Fix uninitialized memory reference in mps_read_config_page. It was
Summary of changes:
sys/dev/raid/mps/mps.c | 50 ++++++------
sys/dev/raid/mps/mps_mapping.c | 2 +
sys/dev/raid/mps/mps_pci.c | 3 +-
sys/dev/raid/mps/mps_sas.c | 180 +++++++++++++++++++++++++++++++++++------
sys/dev/raid/mps/mps_sas.h | 2 +
sys/dev/raid/mps/mps_sas_lsi.c | 97 ++++++++++++++++++----
sys/dev/raid/mps/mps_table.c | 13 +--
sys/dev/raid/mps/mps_user.c | 44 +++++-----
sys/dev/raid/mps/mpsvar.h | 19 +++--
9 files changed, 314 insertions(+), 96 deletions(-)
DragonFly BSD source repository
More information about the Commits