ioat(4): Read CHANSTS register for suspended/halted checks

The device doesn't accurately update the CHANCMP address with the device state
when the device is suspended or halted.  So, read the CHANSTS register to check
for those states.

We still need to read the CHANCMP address for the last completed descriptor.

Sponsored by:	Dell EMC Isilon
This commit is contained in:
Conrad Meyer 2016-11-02 23:18:16 +00:00
parent 3c47cee5c8
commit ea9e23edf3
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=308230

View file

@ -747,6 +747,12 @@ ioat_process_events(struct ioat_softc *ioat)
wakeup(&ioat->tail);
}
/*
* The device doesn't seem to reliably push suspend/halt statuses to
* the channel completion memory address, so poll the device register
* here.
*/
comp_update = ioat_get_chansts(ioat) & IOAT_CHANSTS_STATUS;
if (!is_ioat_halted(comp_update) && !is_ioat_suspended(comp_update))
return;