Skip to content

Commit 6454368

Browse files
andy-shevvinodkoul
authored andcommitted
dmaengine: dmatest: Abort test in case of mapping error
In case of mapping error the DMA addresses are invalid and continuing will screw system memory or potentially something else. [ 222.480310] dmatest: dma0chan7-copy0: summary 1 tests, 3 failures 6 iops 349 KB/s (0) ... [ 240.912725] check: Corrupted low memory at 00000000c7c75ac9 (2940 phys) = 5656000000000000 [ 240.921998] check: Corrupted low memory at 000000005715a1cd (2948 phys) = 279f2aca5595ab2b [ 240.931280] check: Corrupted low memory at 000000002f4024c0 (2950 phys) = 5e5624f349e793cf ... Abort any test if mapping failed. Fixes: 4076e75 ("dmatest: convert to dmaengine_unmap_data") Cc: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Vinod Koul <vkoul@kernel.org>
1 parent 6d66c8d commit 6454368

File tree

1 file changed

+14
-18
lines changed

1 file changed

+14
-18
lines changed

drivers/dma/dmatest.c

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -711,11 +711,9 @@ static int dmatest_func(void *data)
711711
srcs[i] = um->addr[i] + src_off;
712712
ret = dma_mapping_error(dev->dev, um->addr[i]);
713713
if (ret) {
714-
dmaengine_unmap_put(um);
715714
result("src mapping error", total_tests,
716715
src_off, dst_off, len, ret);
717-
failed_tests++;
718-
continue;
716+
goto error_unmap_continue;
719717
}
720718
um->to_cnt++;
721719
}
@@ -730,11 +728,9 @@ static int dmatest_func(void *data)
730728
DMA_BIDIRECTIONAL);
731729
ret = dma_mapping_error(dev->dev, dsts[i]);
732730
if (ret) {
733-
dmaengine_unmap_put(um);
734731
result("dst mapping error", total_tests,
735732
src_off, dst_off, len, ret);
736-
failed_tests++;
737-
continue;
733+
goto error_unmap_continue;
738734
}
739735
um->bidi_cnt++;
740736
}
@@ -762,12 +758,10 @@ static int dmatest_func(void *data)
762758
}
763759

764760
if (!tx) {
765-
dmaengine_unmap_put(um);
766761
result("prep error", total_tests, src_off,
767762
dst_off, len, ret);
768763
msleep(100);
769-
failed_tests++;
770-
continue;
764+
goto error_unmap_continue;
771765
}
772766

773767
done->done = false;
@@ -776,12 +770,10 @@ static int dmatest_func(void *data)
776770
cookie = tx->tx_submit(tx);
777771

778772
if (dma_submit_error(cookie)) {
779-
dmaengine_unmap_put(um);
780773
result("submit error", total_tests, src_off,
781774
dst_off, len, ret);
782775
msleep(100);
783-
failed_tests++;
784-
continue;
776+
goto error_unmap_continue;
785777
}
786778
dma_async_issue_pending(chan);
787779

@@ -790,22 +782,20 @@ static int dmatest_func(void *data)
790782

791783
status = dma_async_is_tx_complete(chan, cookie, NULL, NULL);
792784

793-
dmaengine_unmap_put(um);
794-
795785
if (!done->done) {
796786
result("test timed out", total_tests, src_off, dst_off,
797787
len, 0);
798-
failed_tests++;
799-
continue;
788+
goto error_unmap_continue;
800789
} else if (status != DMA_COMPLETE) {
801790
result(status == DMA_ERROR ?
802791
"completion error status" :
803792
"completion busy status", total_tests, src_off,
804793
dst_off, len, ret);
805-
failed_tests++;
806-
continue;
794+
goto error_unmap_continue;
807795
}
808796

797+
dmaengine_unmap_put(um);
798+
809799
if (params->noverify) {
810800
verbose_result("test passed", total_tests, src_off,
811801
dst_off, len, 0);
@@ -846,6 +836,12 @@ static int dmatest_func(void *data)
846836
verbose_result("test passed", total_tests, src_off,
847837
dst_off, len, 0);
848838
}
839+
840+
continue;
841+
842+
error_unmap_continue:
843+
dmaengine_unmap_put(um);
844+
failed_tests++;
849845
}
850846
ktime = ktime_sub(ktime_get(), ktime);
851847
ktime = ktime_sub(ktime, comparetime);

0 commit comments

Comments
 (0)