aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/dma/dmatest.c32
1 files changed, 17 insertions, 15 deletions
diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c
index ea1f885e70f4..3b148c2647f8 100644
--- a/drivers/dma/dmatest.c
+++ b/drivers/dma/dmatest.c
@@ -516,6 +516,7 @@ static int dmatest_func(void *data)
516 enum dma_ctrl_flags flags; 516 enum dma_ctrl_flags flags;
517 u8 *pq_coefs = NULL; 517 u8 *pq_coefs = NULL;
518 int ret; 518 int ret;
519 unsigned int buf_size;
519 struct dmatest_data *src; 520 struct dmatest_data *src;
520 struct dmatest_data *dst; 521 struct dmatest_data *dst;
521 int i; 522 int i;
@@ -580,9 +581,10 @@ static int dmatest_func(void *data)
580 goto err_free_coefs; 581 goto err_free_coefs;
581 } 582 }
582 583
583 if (1 << align > params->buf_size) { 584 buf_size = params->buf_size;
585 if (1 << align > buf_size) {
584 pr_err("%u-byte buffer too small for %d-byte alignment\n", 586 pr_err("%u-byte buffer too small for %d-byte alignment\n",
585 params->buf_size, 1 << align); 587 buf_size, 1 << align);
586 goto err_free_coefs; 588 goto err_free_coefs;
587 } 589 }
588 590
@@ -595,7 +597,7 @@ static int dmatest_func(void *data)
595 goto err_usrcs; 597 goto err_usrcs;
596 598
597 for (i = 0; i < src->cnt; i++) { 599 for (i = 0; i < src->cnt; i++) {
598 src->raw[i] = kmalloc(params->buf_size + align, 600 src->raw[i] = kmalloc(buf_size + align,
599 GFP_KERNEL); 601 GFP_KERNEL);
600 if (!src->raw[i]) 602 if (!src->raw[i])
601 goto err_srcbuf; 603 goto err_srcbuf;
@@ -617,7 +619,7 @@ static int dmatest_func(void *data)
617 goto err_udsts; 619 goto err_udsts;
618 620
619 for (i = 0; i < dst->cnt; i++) { 621 for (i = 0; i < dst->cnt; i++) {
620 dst->raw[i] = kmalloc(params->buf_size + align, 622 dst->raw[i] = kmalloc(buf_size + align,
621 GFP_KERNEL); 623 GFP_KERNEL);
622 if (!dst->raw[i]) 624 if (!dst->raw[i])
623 goto err_dstbuf; 625 goto err_dstbuf;
@@ -656,16 +658,16 @@ static int dmatest_func(void *data)
656 total_tests++; 658 total_tests++;
657 659
658 if (params->transfer_size) { 660 if (params->transfer_size) {
659 if (params->transfer_size >= params->buf_size) { 661 if (params->transfer_size >= buf_size) {
660 pr_err("%u-byte transfer size must be lower than %u-buffer size\n", 662 pr_err("%u-byte transfer size must be lower than %u-buffer size\n",
661 params->transfer_size, params->buf_size); 663 params->transfer_size, buf_size);
662 break; 664 break;
663 } 665 }
664 len = params->transfer_size; 666 len = params->transfer_size;
665 } else if (params->norandom) { 667 } else if (params->norandom) {
666 len = params->buf_size; 668 len = buf_size;
667 } else { 669 } else {
668 len = dmatest_random() % params->buf_size + 1; 670 len = dmatest_random() % buf_size + 1;
669 } 671 }
670 672
671 /* Do not alter transfer size explicitly defined by user */ 673 /* Do not alter transfer size explicitly defined by user */
@@ -680,8 +682,8 @@ static int dmatest_func(void *data)
680 src->off = 0; 682 src->off = 0;
681 dst->off = 0; 683 dst->off = 0;
682 } else { 684 } else {
683 src->off = dmatest_random() % (params->buf_size - len + 1); 685 src->off = dmatest_random() % (buf_size - len + 1);
684 dst->off = dmatest_random() % (params->buf_size - len + 1); 686 dst->off = dmatest_random() % (buf_size - len + 1);
685 687
686 src->off = (src->off >> align) << align; 688 src->off = (src->off >> align) << align;
687 dst->off = (dst->off >> align) << align; 689 dst->off = (dst->off >> align) << align;
@@ -690,9 +692,9 @@ static int dmatest_func(void *data)
690 if (!params->noverify) { 692 if (!params->noverify) {
691 start = ktime_get(); 693 start = ktime_get();
692 dmatest_init_srcs(src->aligned, src->off, len, 694 dmatest_init_srcs(src->aligned, src->off, len,
693 params->buf_size, is_memset); 695 buf_size, is_memset);
694 dmatest_init_dsts(dst->aligned, dst->off, len, 696 dmatest_init_dsts(dst->aligned, dst->off, len,
695 params->buf_size, is_memset); 697 buf_size, is_memset);
696 698
697 diff = ktime_sub(ktime_get(), start); 699 diff = ktime_sub(ktime_get(), start);
698 filltime = ktime_add(filltime, diff); 700 filltime = ktime_add(filltime, diff);
@@ -707,7 +709,7 @@ static int dmatest_func(void *data)
707 continue; 709 continue;
708 } 710 }
709 711
710 um->len = params->buf_size; 712 um->len = buf_size;
711 for (i = 0; i < src->cnt; i++) { 713 for (i = 0; i < src->cnt; i++) {
712 void *buf = src->aligned[i]; 714 void *buf = src->aligned[i];
713 struct page *pg = virt_to_page(buf); 715 struct page *pg = virt_to_page(buf);
@@ -827,7 +829,7 @@ static int dmatest_func(void *data)
827 src->off + len, src->off, 829 src->off + len, src->off,
828 PATTERN_SRC | PATTERN_COPY, true, is_memset); 830 PATTERN_SRC | PATTERN_COPY, true, is_memset);
829 error_count += dmatest_verify(src->aligned, src->off + len, 831 error_count += dmatest_verify(src->aligned, src->off + len,
830 params->buf_size, src->off + len, 832 buf_size, src->off + len,
831 PATTERN_SRC, true, is_memset); 833 PATTERN_SRC, true, is_memset);
832 834
833 pr_debug("%s: verifying dest buffer...\n", current->comm); 835 pr_debug("%s: verifying dest buffer...\n", current->comm);
@@ -839,7 +841,7 @@ static int dmatest_func(void *data)
839 PATTERN_SRC | PATTERN_COPY, false, is_memset); 841 PATTERN_SRC | PATTERN_COPY, false, is_memset);
840 842
841 error_count += dmatest_verify(dst->aligned, dst->off + len, 843 error_count += dmatest_verify(dst->aligned, dst->off + len,
842 params->buf_size, dst->off + len, 844 buf_size, dst->off + len,
843 PATTERN_DST, false, is_memset); 845 PATTERN_DST, false, is_memset);
844 846
845 diff = ktime_sub(ktime_get(), start); 847 diff = ktime_sub(ktime_get(), start);