• Tejun Heo's avatar
    libata: put some intelligence into EH speed down sequence · 7d47e8d4
    Tejun Heo authored
    The current EH speed down code is more of a proof that the EH
    framework is capable of adjusting transfer speed in response to error.
    This patch puts some intelligence into EH speed down sequence.  The
    rules are..
    
    * If there have been more than three timeout, HSM violation or
      unclassified DEV errors for known supported commands during last 10
      mins, NCQ is turned off.
    
    * If there have been more than three timeout or HSM violation for known
      supported command, transfer mode is slowed down.  If DMA is active,
      it is first slowered by one grade (e.g. UDMA133->100).  If that
      doesn't help, it's slowered to 40c limit (UDMA33).  If PIO is
      active, it's slowered by one grade first.  If that doesn't help,
      PIO0 is forced.  Note that this rule does not change transfer mode.
      DMA is never degraded into PIO by this rule.
    
    * If there have been more than ten ATA bus, timeout, HSM violation or
      unclassified device errors for known supported commands && speeding
      down DMA mode didn't help, the device is forced into PIO mode.  Note
      that this rule is considered only for PATA devices and is pretty
      difficult to trigger.
    
    One error can only trigger one rule at a time.  After a rule is
    triggered, error history is cleared such that the next speed down
    happens only after some number of errors are accumulated.  This makes
    sense because now speed down is done in bigger stride.
    Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
    Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
    7d47e8d4
libata-eh.c 56.8 KB