kernel - Fix another AHCI bug
authorMatthew Dillon <dillon@apollo.backplane.com>
Fri, 23 Mar 2012 08:47:48 +0000 (01:47 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Fri, 23 Mar 2012 08:47:48 +0000 (01:47 -0700)
commitd16d3400e7cd9e7c897c37abab0b8f2668fcc5c0
treef234dcd47f69ee9e57508dd2ac09d4955b08e12a
parentbf55dc6db8093ec3a60c976931b7f623666ec752
kernel - Fix another AHCI bug

* Remove the unlock/lock sequences around the xpt_done() calls.  These
  temporary unlocks create a gap which can allow another interrupt to
  squeeze in and interfere with the interrupt thread that is already
  running, resulting in corruption.

  This bug occurs under very heavy loads, and typically required multiple
  concurrent ops to a SSD to trigger.

* Add additional assertions to catch issues and reorder one of the
  chiploads.

* This is a bit non-optimal, be on the lookout for deadlocks in case it
  turns out that holding the lock is a bad idea.
sys/dev/disk/ahci/ahci.c
sys/dev/disk/ahci/ahci_cam.c
sys/dev/disk/ahci/ahci_dragonfly.c