CVSROOT: /cvs
Module name: src
Changes by: [email protected] 2017/02/06 00:04:31
Modified files:
sys/dev/pci : mfii.c
Log message:
implement scsi command timeouts.
there's a struct timeout in scsi_xfer for this purpose, which is
used to schedule a timeout of the command in the future. the timeout
adds the xs to a list in mfii_softc of outstanding commands that
are to be aborted. this list is processed in a task so we can sleep
for an mfii_ccb. the new ccb is used to issue an abort against the
specific command that timed out.
to avoid having a timeout complete at the same time as a command
on the chip, a refcnt is added to ccbs. the chip and the timeout
get a ref each. the mfii completion path will attempt to timeout_del,
and if that's succesful it will subtract the timeouts ref as well
as its own. if it fails, the abort path owns the ccb and becomes
responsible for calling scsi_done on behalf of the mfii completion
path.