#
259065 |
|
07-Dec-2013 |
gjb |
- Copy stable/10 (r259064) to releng/10.0 as part of the 10.0-RELEASE cycle. - Update __FreeBSD_version [1] - Set branch name to -RC1
[1] 10.0-CURRENT __FreeBSD_version value ended at '55', so start releng/10.0 at '100' so the branch is started with a value ending in zero.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation |
#
256281 |
|
10-Oct-2013 |
gjb |
Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation
|
#
251187 |
|
31-May-2013 |
delphij |
Explicitly use a pair of parentheses to ensure correct evaluation ordering for bitwise operation.
Submitted by: swildner (DragonFly) MFC after: 2 weeks
|
#
249468 |
|
14-Apr-2013 |
mav |
MFprojects/camlock r248982: Stop abusing xpt_periph in random plases that really have no periph related to CCB, for example, bus scanning. NULL value is fine in such cases and it is correctly logged in debug messages as "noperiph". If at some point we need some real XPT periphs (alike to pmpX now), quite likely they will be per-bus, and not a single global instance as xpt_periph now.
|
#
241875 |
|
22-Oct-2012 |
marius |
Remove support for using Giant for locking within mpt(4). Finer grained locking has been working fine for ~5.5 years by now.
MFC after: 1 week
|
#
241874 |
|
22-Oct-2012 |
marius |
After r241858, remove the remainder of FreeBSD ~4 support from mpt(4).
MFC after: 1 week
|
#
224494 |
|
29-Jul-2011 |
marius |
- Send the RELSIM_ADJUST_OPENINGS in response to a MPI_EVENT_QUEUE_FULL using the right SIM in case the HBA is RAID-capable but the target in question is not a hot spare or member of a RAID volume. - Report the loss and addition of SAS and SATA targets detected via PHY link status changes and signalled by MPI_EVENT_SAS_DEVICE_STATUS_CHANGE to cam(4) as lost devices and trigger rescans as appropriate. Without this it can take quite some time until a lost device actually is no longer tried to be used, if it ever stops. [1] - Handle MPI_EVENT_IR2, MPI_EVENT_LOG_ENTRY_ADDED, MPI_EVENT_SAS_DISCOVERY and MPI_EVENT_SAS_PHY_LINK_STATUS silently as these serve no additional purpose beyond adding cryptic entries to logs.
Thanks to Hans-Joerg Sirtl for providing one of the HBAs these changes were developed with and RIP to the mainboard that didn't survive testing them.
PR: 157534 [1] Approved by: re (kib) MFC after: 2 weeks
|
#
224493 |
|
29-Jul-2011 |
marius |
- Staticize functions as appropriate and comment out unused ones. - Sprinkle some const where appropriate. - Consistently use target_id_t for the target parameter of mpt_map_physdisk() and mpt_is_raid_volume(). - Fix some whitespace bugs.
Approved by: re (kib)
|
#
217323 |
|
12-Jan-2011 |
mdf |
sysctl(9) cleanup checkpoint: amd64 GENERIC builds cleanly.
Commit the rest of the devices.
|
#
209599 |
|
29-Jun-2010 |
ken |
Change the mpt driver to allow larger I/O sizes.
The mpt driver previously didn't report a 'maxio' size to CAM, and so the da(4) driver limited I/O sizes to DFLTPHYS (64K) by default. The number of scatter gather segments allowed, as reported to busdma, was (128K / PAGE_SIZE) + 1, or 33 on architectures with 4K pages.
Change things around so that we wait until we've determined how many segments the adapter can support before creating the busdma tag used for buffers, so we can potentially support more S/G segments and therefore larger I/O sizes.
Also, fix some things that were broken about the module unload path. It still gets hung up inside CAM, though.
mpt.c: Move some busdma initialization calls in here, and call them just after we've gotten the IOCFacts, and know how many S/G segments this adapter can support.
mpt.h: Get rid of MPT_MAXPHYS, it is no longer used.
Add max_cam_seg_cnt, which is used to report our maximum I/O size up to CAM.
mpt_cam.c: Use max_cam_seg_cnt to report our maximum I/O size to CAM.
Fix the locking in mpt_cam_detach().
mpt_pci.c: Pull some busdma initialization and teardown out and put it in mpt.c. We now delay it until we know many scatter gather segments the adapter can support, and therefore how to setup our busdma tags.
mpt_raid.c: Make sure we wake up the right wait channel to get the raid thread to wake up when we're trying to shut it down.
Reviewed by: gibbs, mjacob MFC after: 2 weeks
|
#
204356 |
|
26-Feb-2010 |
mav |
Store path for rescan to the right place. This should fix panic on boot, introduced by r203108.
|
#
203484 |
|
04-Feb-2010 |
mav |
Do not release device, when changing number of openings.
|
#
203108 |
|
28-Jan-2010 |
mav |
MFp4: Large set of CAM inprovements.
- Unify bus reset/probe sequence. Whenever bus attached at boot or later, CAM will automatically reset and scan it. It allows to remove duplicate code from many drivers. - Any bus, attached before CAM completed it's boot-time initialization, will equally join to the process, delaying boot if needed. - New kern.cam.boot_delay loader tunable should help controllers that are still unable to register their buses in time (such as slow USB/ PCCard/ CardBus devices), by adding one more event to wait on boot. - To allow synchronization between different CAM levels, concept of requests priorities was extended. Priorities now split between several "run levels". Device can be freezed at specified level, allowing higher priority requests to pass. For example, no payload requests allowed, until PMP driver enable port. ATA XPT negotiate transfer parameters, periph driver configure caching and so on. - Frozen requests are no more counted by request allocation scheduler. It fixes deadlocks, when frozen low priority payload requests occupying slots, required by higher levels to manage theit execution. - Two last changes were holding proper ATA reinitialization and error recovery implementation. Now it is done: SATA controllers and Port Multipliers now implement automatic hot-plug and should correctly recover from timeouts and bus resets. - Improve SCSI error recovery for devices on buses without automatic sense reporting, such as ATAPI or USB. For example, it allows CAM to wait, while CD drive loads disk, instead of immediately return error status. - Decapitalize diagnostic messages and make them more readable and sensible. - Teach PMP driver to limit maximum speed on fan-out ports. - Make boot wait for PMP scan completes, and make rescan more reliable. - Fix pass driver, to return CCB to user level in case of error. - Increase number of retries in cd driver, as device may return several UAs.
|
#
198262 |
|
20-Oct-2009 |
kan |
Use callout_init_mtx on FreeBSD versions recent enough. This closes the race where interrupt thread can complete the request for which timeout has fired and while mpt_timeout has blocked on mpt_lock.
Do a best effort to keep 4.x ang Giant-locked configurartions compiling still.
Reported by: ups Reviewed by: scottl
|
#
196970 |
|
08-Sep-2009 |
phk |
Revert previous commit and add myself to the list of people who should know better than to commit with a cat in the area.
|
#
196969 |
|
08-Sep-2009 |
phk |
Add necessary include.
|
#
192534 |
|
21-May-2009 |
jhb |
Largely revert the earlier change to use a single CCB for the RAID recovery thread. Multiple RAID events in quick succession can cause an additional bus rescan to be scheduled before an earlier scan has completed. In this case the driver was attempting to use the same CCB storage for two requests.
PR: kern/130330 Reviewed by: Riccardo Torrini riccardo.torrini | esaote com MFC after: 1 week
|
#
186878 |
|
07-Jan-2009 |
marius |
Make the whole initiator mode part of mpt(4) endian-clean, specifically SPI controllers now also work in big-endian machines and some conversions relevant for FC and SAS controllers as well as support for ILP32 machines which all were omitted in previous attempts are now also implemented. The IOCTL-interface is intentionally left (and where needed actually changed) to be completely little-endian as otherwise we would have to add conversion code for every possible configuration page to mpt(4), which didn't seem the right thing to do, neither did converting only half of the user- interface to the native byte order. This change was tested on amd64 (SAS+SPI), i386 (SAS) and sparc64 (SAS+SPI). Due to lack of the necessary hardware the target mode code is still left to be made endian-clean.
Reviewed by: scottl MFC after: 1 month
|
#
180668 |
|
21-Jul-2008 |
jhb |
Allocate a single CCB at the start of the main loop of the RAID monitoring kthread of the mpt(4) driver that hangs around for the entire lifetime of the thread. Previously the driver would allocate a new CCB using M_WAITOK with a lock held each time it updated its state. While here, use the CAM API for allocating a CCB rather than raw malloc(9).
Reviewed by: scottl MFC after: 1 week
|
#
178725 |
|
02-May-2008 |
jkim |
Restore multi-release tradition of the driver.
Reviewed by: mjacob
|
#
172836 |
|
20-Oct-2007 |
julian |
Rename the kthread_xxx (e.g. kthread_create()) calls to kproc_xxx as they actually make whole processes. Thos makes way for us to add REAL kthread_create() and friends that actually make theads. it turns out that most of these calls actually end up being moved back to the thread version when it's added. but we need to make this cosmetic change first.
I'd LOVE to do this rename in 7.0 so that we can eventually MFC the new kthread_xxx() calls.
|
#
169293 |
|
05-May-2007 |
mjacob |
Make this driver MP safe and still be a multi-release driver.
Obtained from: 99% of the work done by Scott Long. MFC after: 3 days
|
#
164990 |
|
07-Dec-2006 |
mjacob |
MFP4: principally to reapply tagged command support to FC and SAS cards.
|
#
164837 |
|
02-Dec-2006 |
mjacob |
Fix a debug message which didn't quite get it right about data direction.
Fix things to use the LSI-Logic Fusion Library mask and shift names for offset and sync, no matter how awkward they are, in preference to just plain numbers.
|
#
163924 |
|
02-Nov-2006 |
mjacob |
add some missing MPT<>CAM and CAM<>MPT bogolocks
|
#
160395 |
|
16-Jul-2006 |
mjacob |
Define out unused and incomplete raid quiesce functions. The code never could be called, so we might as well not compile it for now.
|
#
159052 |
|
29-May-2006 |
mjacob |
Add acknowledgements to LSI-Logic for support
|
#
159050 |
|
29-May-2006 |
mjacob |
Add a mpt_is_raid_volume function which will tell you whether the passed target id is one of the RAID VolumeID. This result is used to decide whether to try and do actual SPI negotiations on the real side of the raid/passthru bus pair. The reason we check this is that we can have both RAID volumes and real devices on the same bus.
|
#
158982 |
|
27-May-2006 |
mjacob |
Work in progress toward fixing IM checked in after having lost one set to a peninsula power failure last night. After this, I can see both submembers and the raid volumes again, but speed negotiation is still broken.
Add a mpt_raid_free_mem function to centralize the resource reclaim and fixed a small memory leak.
Remove restriction on number of targets for systems with IM enabled- you can have setups that have both IM volumes as well as other devices.
Fix target id selection for passthru and nonpastrhu cases.
Move complete command dumpt to MPT_PRT_DEBUG1 level so that just setting debug level gets mostly informative albeit less verbose dumping.
|
#
158935 |
|
26-May-2006 |
mjacob |
Get most of the way back to having Integrated Mirroring work again- the addition of target mode support broke it massively.
|
#
157662 |
|
11-Apr-2006 |
mjacob |
A large set of changes:
+ Add boatloads of KASSERTs and *really* check out more locking issues (to catch recursions when we actually go to real locking in CAM soon). The KASSERTs also caught lots of other issues like using commands that were put back on free lists, etc.
+ Target mode: role setting is derived directly from port capabilities. There is no need to set a role any more. Some target mode resources are allocated early on (ELS), but target command buffer allocation is deferred until the first lun enable.
+ Fix some breakages I introduced with target mode in that some commands are *repeating* commands. That is, the reply shows up but the command isn't really done (we don't free it). We still need to take it off the pending list because when we resubmit it, bad things then happen.
+ Fix more of the way that timed out commands and bus reset is done. The actual TMF response code was being ignored.
+ For SPI, honor BIOS settings. This doesn't quite fix the problems we've seen where we can't seem to (re)negotiate U320 on all drives but avoids it instead by letting us honor the BIOS settings. I'm sure this is not quite right and will have to change again soon.
|
#
157117 |
|
25-Mar-2006 |
mjacob |
Some fairly major changes to this driver.
A) Fibre Channel Target Mode support mostly works (SAS/SPI won't be too far behind). I'd say that this probably works just about as well as isp(4) does right now. Still, it and isp(4) and the whole target mode stack need a bit of tightening.
B) The startup sequence has been changed so that after all attaches are done, a set of enable functions are called. The idea here is that the attaches do whatever needs to be done *prior* to a port being enabled and the enables do what need to be done for enabling stuff for a port after it's been enabled.
This means that we also have events handled by their proper handlers as we start up.
C) Conditional code that means that this driver goes back all the way to RELENG_4 in terms of support.
D) Quite a lot of little nitty bug fixes- some discovered by doing RELENG_4 support. We've been living under Giant *waaaayyyyy* too long and it's made some of us (me) sloppy.
E) Some shutdown hook stuff that makes sure we don't blow up during a reboot (like by the arrival of a new command from an initiator).
There's been some testing and LINT checking, but not as complete as would be liked. Regression testing with Fusion RAID instances has not been possible. Caveat Emptor.
Sponsored by: LSI-Logic.
|
#
153072 |
|
04-Dec-2005 |
ru |
Fix -Wundef.
|
#
152444 |
|
15-Nov-2005 |
kan |
Keep track of volumes in non-optimal state and expose a simple count of volumes that might need administrator attention through device specific sysctl to simplify device monitoring.
Submitted by: Deomid Ryabkov <myself at rojer dot pp dot ru>
|
#
148679 |
|
03-Aug-2005 |
gibbs |
Correct attribution in clause three to address the correct copyright holders. The license that was approved for my changes to this driver originally came from LSI, but the changes to the driver core are not owned by LSI.
MFC: 1 day
|
#
147883 |
|
10-Jul-2005 |
scottl |
Massive overhaul of MPT Fusion driver:
o Add timeout error recovery (from a thread context to avoid the deferral of other critical interrupts). o Properly recover commands across controller reset events. o Update the driver to handle events and status codes that have been added to the MPI spec since the driver was originally written. o Make the driver more modular to improve maintainability and support dynamic "personality" registration (e.g. SCSI Initiator, RAID, SAS, FC, etc). o Shorten and simplify the common I/O path to improve driver performance. o Add RAID volume and RAID member state/settings reporting. o Add periodic volume resynchronization status reporting. o Add support for sysctl tunable resync rate, member write cache enable, and volume transaction queue depth.
Sponsored by ---------------- Avid Technologies Inc: SCSI error recovery, driver re-organization, update of MPI library headers, portions of dynamic personality registration, and misc bug fixes.
Wheel Open Technologies: RAID event notification, RAID member pass-thru support, firmware upload/download support, enhanced RAID resync speed, portions of dynamic personality registration, and misc bug fixes.
Detailed Changes ================ mpt.c mpt_cam.c mpt_raid.c mpt_pci.c: o Add support for personality modules. Each module exports load, and unload module scope methods as well as probe, attach, event, reset, shutdown, and detach per-device instance methods
mpt.c mpt.h mpt_pci.c: o The driver now associates a callback function (via an index) with every transaction submitted to the controller. This allows the main interrupt handler to absolve itself of any knowledge of individual transaction/response types by simply calling the callback function "registered" for the transaction. We use a callback index instead of a callback function pointer in each requests so we can properly handle responses (e.g. event notifications) that are not associated with a transaction. Personality modules dynamically register their callbacks with the driver core to receive the callback index to use for their handlers.
o Move the interrupt handler into mpt.c. The ISR algorithm is bus transport and OS independent and thus had no reason to be in mpt_pci.c.
o Simplify configuration message reply handling by copying reply frame data for the requester and storing completion status in the original request structure.
o Add the mpt_complete_request_chain() helper method and use it to implement reset handlers that must abort transactions.
o Keep track of all pending requests on the new requests_pending_list in the softc.
o Add default handlers to mpt.c to handle generic event notifications and controller reset activities. The event handler code is largely the same as in the original driver. The reset handler is new and terminates any pending transactions with a status code indicating the controller needs to be re-initialized.
o Add some endian support to the driver. A complete audit is still required for this driver to have any hope of operating in a big-endian environment.
o Use inttypes.h and __inline. Come closer to being style(9) compliant.
o Remove extraneous use of typedefs.
o Convert request state from a strict enumeration to a series of flags. This allows us to, for example, tag transactions that have timed-out while retaining the state that the transaction is still in-flight on the controller.
o Add mpt_wait_req() which allows a caller to poll or sleep for the completion of a request. Use this to simplify and factor code out from many initialization routines. We also use this to sleep for task management request completions in our CAM timeout handler.
mpt.c: o Correct a bug in the event handler where request structures were freed even if the request reply was marked as a continuation reply. Continuation replies indicate that the controller still owns the request and freeing these replies prematurely corrupted controller state.
o Implement firmware upload and download. On controllers that do not have dedicated NVRAM (as in the Sun v20/v40z), the firmware image is downloaded to the controller by the system BIOS. This image occupies precious controller RAM space until the host driver fetches the image, reducing the number of concurrent I/Os the controller can processes. The uploaded image is used to re-program the controller during hard reset events since the controller cannot fetch the firmware on its own. Implementing this feature allows much higher queue depths when RAID volumes are configured.
o Changed configuration page accessors to allow threads to sleep rather than busy wait for completion.
o Removed hard coded data transfer sizes from configuration page routines so that RAID configuration page processing is possible.
mpt_reg.h: o Move controller register definitions into a separate file.
mpt.h: o Re-arrange includes to allow inlined functions to be defined in mpt.h.
o Add reply, event, and reset handler definitions.
o Add softc fields for handling timeout and controller reset recovery.
mpt_cam.c: o Move mpt_freebsd.c to mpt_cam.c. Move all core functionality, such as event handling, into mpt.c leaving only CAM SCSI support here.
o Revamp completion handler to provide correct CAM status for all currently defined SCSI MPI message result codes.
o Register event and reset handlers with the MPT core. Modify the event handler to notify CAM of bus reset events. The controller reset handler will abort any transactions that have timed out. All other pending CAM transactions are correctly aborted by the core driver's reset handler.
o Allocate a single request up front to perform task management operations. This guarantees that we can always perform a TMF operation even when the controller is saturated with other operations. The single request also serves as a perfect mechanism of guaranteeing that only a single TMF is in flight at a time - something that is required according to the MPT Fusion documentation.
o Add a helper function for issuing task management requests to the controller. This is used to abort individual requests or perform a bus reset.
o Modify the CAM XPT_BUS_RESET ccb handler to wait for and properly handle the status of the bus reset task management frame used to reset the bus. The previous code assumed that the reset request would always succeed.
o Add timeout recovery support. When a timeout occurs, the timed-out request is added to a queue to be processed by our recovery thread and the thread is woken up. The recovery thread processes timed-out command serially, attempting first to abort them and then falling back to a bus reset if an abort fails.
o Add calls to mpt_reset() to reset the controller if any handshake command, bus reset attempt or abort attempt fails due to a timeout.
o Export a secondary "bus" to CAM that exposes all volume drive members as pass-thru devices, allowing CAM to perform proper speed negotiation to hidden devices.
o Add a CAM async event handler tracking the AC_FOUND_DEVICE event. Use this to trigger calls to set the per-volume queue depth once the volume is fully registered with CAM. This is required to avoid hitting firmware limits on volume queue depth. Exceeding the limit causes the firmware to hang.
mpt_cam.h: o Add several helper functions for interfacing to CAM and performing timeout recovery.
mpt_pci.c: o Disable interrupts on the controller before registering and enabling interrupt delivery to the OS. Otherwise we risk receiving interrupts before the driver is ready to receive them.
o Make use of compatibility macros that allow the driver to be compiled under 4.x and 5.x.
mpt_raid.c: o Add a per-controller instance RAID thread to perform settings changes and query status (minimizes CPU busy wait loops).
o Use a shutdown handler to disable "Member Write Cache Enable" (MWCE) setting for RAID arrays set to enable MWCE During Rebuild.
o Change reply handler function signature to allow handlers to defer the deletion of reply frames. Use this to allow the event reply handler to queue up events that need to be acked if no resources are available to immediately ack an event. Queued events are processed in mpt_free_request() where resources are freed. This avoids a panic on resource shortage.
o Parse and print out RAID controller capabilities during driver probe.
o Define, allocate, and maintain RAID data structures for volumes, hidden member physical disks and spare disks.
o Add dynamic sysctls for per-instance setting of the log level, array resync rate, array member cache enable, and volume queue depth.
mpt_debug.c: o Add mpt_lprt and mpt_lprtc for printing diagnostics conditioned on a particular log level to aid in tracking down driver issues.
o Add mpt_decode_value() which parses the bits in an integer value based on a parsing table (mask, value, name string, tuples).
mpilib/*: o Update mpi library header files to latest distribution from LSI.
Submitted by: gibbs Approved by: re
|