aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma/dmatest.c
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2013-11-06 19:30:05 -0500
committerDan Williams <dan.j.williams@intel.com>2013-11-14 14:04:40 -0500
commite3b9c347316fe243bea6abd08681050c43ca22ee (patch)
treecabf9cb2c835663a5241dd323da1d3919aa1e944 /drivers/dma/dmatest.c
parentbe9fa5a43641103bf13cd1bb8101a1453da03616 (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.c44
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);
66MODULE_PARM_DESC(timeout, "Transfer Timeout in msec (default: 3000), " 66MODULE_PARM_DESC(timeout, "Transfer Timeout in msec (default: 3000), "
67 "Pass -1 for infinite timeout"); 67 "Pass -1 for infinite timeout");
68 68
69static bool noverify;
70module_param(noverify, bool, S_IRUGO | S_IWUSR);
71MODULE_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);