Skip to content

Commit e3b9c34

Browse files
committed
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>
1 parent be9fa5a commit e3b9c34

File tree

1 file changed

+33
-11
lines changed

1 file changed

+33
-11
lines changed

drivers/dma/dmatest.c

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ module_param(timeout, uint, S_IRUGO | S_IWUSR);
6666
MODULE_PARM_DESC(timeout, "Transfer Timeout in msec (default: 3000), "
6767
"Pass -1 for infinite timeout");
6868

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+
6973
/**
7074
* struct dmatest_params - test parameters.
7175
* @buf_size: size of the memcpy test buffer
@@ -88,6 +92,7 @@ struct dmatest_params {
8892
unsigned int xor_sources;
8993
unsigned int pq_sources;
9094
int timeout;
95+
bool noverify;
9196
};
9297

9398
/**
@@ -435,18 +440,30 @@ static int dmatest_func(void *data)
435440
break;
436441
}
437442

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+
439464
len = (len >> align) << align;
440465
if (!len)
441466
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);
450467

451468
for (i = 0; i < src_cnt; i++) {
452469
u8 *buf = thread->srcs[i] + src_off;
@@ -555,10 +572,14 @@ static int dmatest_func(void *data)
555572
unmap_src(dev->dev, dma_srcs, len, src_cnt);
556573
unmap_dst(dev->dev, dma_dsts, params->buf_size, dst_cnt);
557574

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+
}
559580

560581
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,
562583
0, PATTERN_SRC, true);
563584
error_count += dmatest_verify(thread->srcs, src_off,
564585
src_off + len, src_off,
@@ -773,6 +794,7 @@ static void run_threaded_test(struct dmatest_info *info)
773794
params->xor_sources = xor_sources;
774795
params->pq_sources = pq_sources;
775796
params->timeout = timeout;
797+
params->noverify = noverify;
776798

777799
request_channels(info, DMA_MEMCPY);
778800
request_channels(info, DMA_XOR);

0 commit comments

Comments
 (0)