• Robert Hancock's avatar
    sata_nv: cleanup ADMA error handling · 5bd28a4b
    Robert Hancock authored
    This cleans up a few issues with the error handling in sata_nv in ADMA mode
    to make it more consistent with other NCQ-capable drivers like ahci and
    sata_sil24:
    
    - When a command failed, we would effectively set AC_ERR_DEV on the
      queued command always.  In the case of NCQ commands this prevents libata
      from doing a log page query to determine the details of the failed
      command, since it thinks we've already analyzed.  Just set flags in the
      port ehi->err_mask, then freeze or abort and let libata figure out what
      went wrong.
    
    - The code handled NV_ADMA_STAT_CPBERR as a "really bad error" which
      caused it to set error flags on every queued command.  I don't know
      exactly what this flag means (no docs, grr!) but from what I can guess
      from the standard ADMA spec, it just means that one or more of the CPBs
      had an error, so we just need to go through and do our normal checks in
      this case.
    
    - In the error_handler function the code would always dump the state of
      all the CPBs.  This output seems redundant at this point since libata
      already dumps the state of all active commands on errors (and it also
      triggers at times when it shouldn't, like when suspending).  Take this
      out.
    
    [akpm@osdl.org: many coding-style fixes]
    Signed-off-by: default avatarRobert Hancock <hancockr@shaw.ca>
    Cc: Jeff Garzik <jeff@garzik.org>
    Cc: Tejun Heo <htejun@gmail.com>
    Cc: Allen Martin <AMartin@nvidia.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
    5bd28a4b
sata_nv.c 44.8 KB