| From 532d3b1f86f41834a25373e3ded981d68e4ce17f Mon Sep 17 00:00:00 2001 |
| From: Dan Williams <dan.j.williams@intel.com> |
| Date: Wed, 3 Dec 2008 17:16:55 -0700 |
| Subject: ioat: wait for self-test completion |
| |
| From: Dan Williams <dan.j.williams@intel.com> |
| |
| commit 532d3b1f86f41834a25373e3ded981d68e4ce17f upstream. |
| |
| As part of the ioat_dma self-test it performs a printk from a completion |
| callback. Depending on the system console configuration this output can |
| take longer than a millisecond causing the self-test to fail. Introduce a |
| completion with a generous timeout to mitigate this failure. |
| |
| Acked-by: Maciej Sosnowski <maciej.sosnowski@intel.com> |
| Signed-off-by: Dan Williams <dan.j.williams@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/dma/ioat_dma.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/dma/ioat_dma.c |
| +++ b/drivers/dma/ioat_dma.c |
| @@ -1337,10 +1337,12 @@ static void ioat_dma_start_null_desc(str |
| */ |
| #define IOAT_TEST_SIZE 2000 |
| |
| +DECLARE_COMPLETION(test_completion); |
| static void ioat_dma_test_callback(void *dma_async_param) |
| { |
| printk(KERN_ERR "ioatdma: ioat_dma_test_callback(%p)\n", |
| dma_async_param); |
| + complete(&test_completion); |
| } |
| |
| /** |
| @@ -1406,7 +1408,8 @@ static int ioat_dma_self_test(struct ioa |
| goto free_resources; |
| } |
| device->common.device_issue_pending(dma_chan); |
| - msleep(1); |
| + |
| + wait_for_completion_timeout(&test_completion, msecs_to_jiffies(3000)); |
| |
| if (device->common.device_is_tx_complete(dma_chan, cookie, NULL, NULL) |
| != DMA_SUCCESS) { |