[PATCH] libata-eh-fw: implement new EH scheduling from PIO
authorTejun Heo <htejun@gmail.com>
Mon, 15 May 2006 11:58:11 +0000 (20:58 +0900)
committerTejun Heo <htejun@gmail.com>
Mon, 15 May 2006 11:58:11 +0000 (20:58 +0900)
commitdafadcde8d4dc5ea8c742faa7ff4403336b542b8
tree0d24a079ece4b481fcd680c7056aa4e06974f41f
parente318049949b07152d851dbfebbd93e560af45ebe
[PATCH] libata-eh-fw: implement new EH scheduling from PIO

PIO executes without holding host_set lock, so it cannot be
synchronized using the same mechanism as interrupt driven execution.
port_task framework makes sure that EH is not entered until PIO task
is flushed, so PIO task can be sure the qc in progress won't go away
underneath it.  One thing it cannot be sure of is whether the qc has
already been scheduled for EH by another exception condition while
host_set lock was released.

This patch makes ata_poll_qc-complete() handle such conditions
properly and make it freeze the port if HSM violation is detected
during PIO execution.

Signed-off-by: Tejun Heo <htejun@gmail.com>
drivers/scsi/libata-core.c