ioat_test: Handled forced hardware resets gracefully

Sponsored by:	EMC / Isilon Storage Division
This commit is contained in:
Conrad Meyer 2015-10-29 04:16:52 +00:00
parent 5f77bd3e24
commit 1ffae6e80a
1 changed files with 14 additions and 3 deletions

View File

@ -284,12 +284,23 @@ ioat_test_submit_1_tx(struct ioat_test *test, bus_dmaengine_t dma)
desc = ioat_blockfill(dma, dest, fillpattern,
tx->length, cb, tx, flags);
}
if (desc == NULL)
panic("Failed to allocate a ring slot "
"-- this shouldn't happen!");
break;
}
ioat_release(dma);
/*
* We couldn't issue an IO -- either the device is being detached or
* the HW reset. Essentially spin until the device comes back up or
* our timer expires.
*/
if (desc == NULL && tx->depth > 0) {
atomic_add_32(&test->status[IOAT_TEST_NO_DMA_ENGINE], tx->depth);
IT_LOCK();
TAILQ_REMOVE(&test->pend_q, tx, entry);
TAILQ_INSERT_HEAD(&test->free_q, tx, entry);
IT_UNLOCK();
}
}
static void