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.

Reply via email to