diff options
author | Dan Williams <dan.j.williams@intel.com> | 2013-11-06 19:30:05 -0500 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2013-11-14 14:04:40 -0500 |
commit | e3b9c347316fe243bea6abd08681050c43ca22ee (patch) | |
tree | cabf9cb2c835663a5241dd323da1d3919aa1e944 /drivers/dma/dmatest.c | |
parent | be9fa5a43641103bf13cd1bb8101a1453da03616 (diff) |
dmatest: add support for skipping verification and random data setup
Towards enabling dmatest to checkout performance add a 'noverify' mode.
Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/dma/dmatest.c')
-rw-r--r-- | drivers/dma/dmatest.c | 44 |
1 files changed, 33 insertions, 11 deletions
diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c index 01ac7112b5fd..d07b73275d0f 100644 --- a/drivers/dma/dmatest.c +++ b/drivers/dma/dmatest.c | |||
@@ -66,6 +66,10 @@ module_param(timeout, uint, S_IRUGO | S_IWUSR); | |||
66 | MODULE_PARM_DESC(timeout, "Transfer Timeout in msec (default: 3000), " | 66 | MODULE_PARM_DESC(timeout, "Transfer Timeout in msec (default: 3000), " |
67 | "Pass -1 for infinite timeout"); | 67 | "Pass -1 for infinite timeout"); |
68 | 68 | ||
69 | static bool noverify; | ||
70 | module_param(noverify, bool, S_IRUGO | S_IWUSR); | ||
71 | MODULE_PARM_DESC(noverify, "Disable random data setup and verification"); | ||
72 | |||
69 | /** | 73 | /** |
70 | * struct dmatest_params - test parameters. | 74 | * struct dmatest_params - test parameters. |
71 | * @buf_size: size of the memcpy test buffer | 75 | * @buf_size: size of the memcpy test buffer |
@@ -88,6 +92,7 @@ struct dmatest_params { | |||
88 | unsigned int xor_sources; | 92 | unsigned int xor_sources; |
89 | unsigned int pq_sources; | 93 | unsigned int pq_sources; |
90 | int timeout; | 94 | int timeout; |
95 | bool noverify; | ||
91 | }; | 96 | }; |
92 | 97 | ||
93 | /** | 98 | /** |
@@ -435,18 +440,30 @@ static int dmatest_func(void *data) | |||
435 | break; | 440 | break; |
436 | } | 441 | } |
437 | 442 | ||
438 | len = dmatest_random() % params->buf_size + 1; | 443 | if (params->noverify) { |
444 | len = params->buf_size; | ||
445 | src_off = 0; | ||
446 | dst_off = 0; | ||
447 | } else { | ||
448 | len = dmatest_random() % params->buf_size + 1; | ||
449 | len = (len >> align) << align; | ||
450 | if (!len) | ||
451 | len = 1 << align; | ||
452 | src_off = dmatest_random() % (params->buf_size - len + 1); | ||
453 | dst_off = dmatest_random() % (params->buf_size - len + 1); | ||
454 | |||
455 | src_off = (src_off >> align) << align; | ||
456 | dst_off = (dst_off >> align) << align; | ||
457 | |||
458 | dmatest_init_srcs(thread->srcs, src_off, len, | ||
459 | params->buf_size); | ||
460 | dmatest_init_dsts(thread->dsts, dst_off, len, | ||
461 | params->buf_size); | ||
462 | } | ||
463 | |||
439 | len = (len >> align) << align; | 464 | len = (len >> align) << align; |
440 | if (!len) | 465 | if (!len) |
441 | len = 1 << align; | 466 | len = 1 << align; |
442 | src_off = dmatest_random() % (params->buf_size - len + 1); | ||
443 | dst_off = dmatest_random() % (params->buf_size - len + 1); | ||
444 | |||
445 | src_off = (src_off >> align) << align; | ||
446 | dst_off = (dst_off >> align) << align; | ||
447 | |||
448 | dmatest_init_srcs(thread->srcs, src_off, len, params->buf_size); | ||
449 | dmatest_init_dsts(thread->dsts, dst_off, len, params->buf_size); | ||
450 | 467 | ||
451 | for (i = 0; i < src_cnt; i++) { | 468 | for (i = 0; i < src_cnt; i++) { |
452 | u8 *buf = thread->srcs[i] + src_off; | 469 | u8 *buf = thread->srcs[i] + src_off; |
@@ -555,10 +572,14 @@ static int dmatest_func(void *data) | |||
555 | unmap_src(dev->dev, dma_srcs, len, src_cnt); | 572 | unmap_src(dev->dev, dma_srcs, len, src_cnt); |
556 | unmap_dst(dev->dev, dma_dsts, params->buf_size, dst_cnt); | 573 | unmap_dst(dev->dev, dma_dsts, params->buf_size, dst_cnt); |
557 | 574 | ||
558 | error_count = 0; | 575 | if (params->noverify) { |
576 | dbg_result("test passed", total_tests, src_off, dst_off, | ||
577 | len, 0); | ||
578 | continue; | ||
579 | } | ||
559 | 580 | ||
560 | pr_debug("%s: verifying source buffer...\n", current->comm); | 581 | pr_debug("%s: verifying source buffer...\n", current->comm); |
561 | error_count += dmatest_verify(thread->srcs, 0, src_off, | 582 | error_count = dmatest_verify(thread->srcs, 0, src_off, |
562 | 0, PATTERN_SRC, true); | 583 | 0, PATTERN_SRC, true); |
563 | error_count += dmatest_verify(thread->srcs, src_off, | 584 | error_count += dmatest_verify(thread->srcs, src_off, |
564 | src_off + len, src_off, | 585 | src_off + len, src_off, |
@@ -773,6 +794,7 @@ static void run_threaded_test(struct dmatest_info *info) | |||
773 | params->xor_sources = xor_sources; | 794 | params->xor_sources = xor_sources; |
774 | params->pq_sources = pq_sources; | 795 | params->pq_sources = pq_sources; |
775 | params->timeout = timeout; | 796 | params->timeout = timeout; |
797 | params->noverify = noverify; | ||
776 | 798 | ||
777 | request_channels(info, DMA_MEMCPY); | 799 | request_channels(info, DMA_MEMCPY); |
778 | request_channels(info, DMA_XOR); | 800 | request_channels(info, DMA_XOR); |