lkml.org 
[lkml]   [2019]   [Mar]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 107/135] dmaengine: dmatest: Abort test in case of mapping error
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    [ Upstream commit 6454368a804c4955ccd116236037536f81e5b1f1 ]

    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: 4076e755dbec ("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>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/dma/dmatest.c | 28 ++++++++++++----------------
    1 file changed, 12 insertions(+), 16 deletions(-)

    diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c
    index 80cc2be6483c..e39336127741 100644
    --- a/drivers/dma/dmatest.c
    +++ b/drivers/dma/dmatest.c
    @@ -626,11 +626,9 @@ static int dmatest_func(void *data)
    srcs[i] = um->addr[i] + src_off;
    ret = dma_mapping_error(dev->dev, um->addr[i]);
    if (ret) {
    - dmaengine_unmap_put(um);
    result("src mapping error", total_tests,
    src_off, dst_off, len, ret);
    - failed_tests++;
    - continue;
    + goto error_unmap_continue;
    }
    um->to_cnt++;
    }
    @@ -645,11 +643,9 @@ static int dmatest_func(void *data)
    DMA_BIDIRECTIONAL);
    ret = dma_mapping_error(dev->dev, dsts[i]);
    if (ret) {
    - dmaengine_unmap_put(um);
    result("dst mapping error", total_tests,
    src_off, dst_off, len, ret);
    - failed_tests++;
    - continue;
    + goto error_unmap_continue;
    }
    um->bidi_cnt++;
    }
    @@ -679,12 +675,10 @@ static int dmatest_func(void *data)
    }

    if (!tx) {
    - dmaengine_unmap_put(um);
    result("prep error", total_tests, src_off,
    dst_off, len, ret);
    msleep(100);
    - failed_tests++;
    - continue;
    + goto error_unmap_continue;
    }

    done->done = false;
    @@ -693,12 +687,10 @@ static int dmatest_func(void *data)
    cookie = tx->tx_submit(tx);

    if (dma_submit_error(cookie)) {
    - dmaengine_unmap_put(um);
    result("submit error", total_tests, src_off,
    dst_off, len, ret);
    msleep(100);
    - failed_tests++;
    - continue;
    + goto error_unmap_continue;
    }
    dma_async_issue_pending(chan);

    @@ -711,16 +703,14 @@ static int dmatest_func(void *data)
    dmaengine_unmap_put(um);
    result("test timed out", total_tests, src_off, dst_off,
    len, 0);
    - failed_tests++;
    - continue;
    + goto error_unmap_continue;
    } else if (status != DMA_COMPLETE) {
    dmaengine_unmap_put(um);
    result(status == DMA_ERROR ?
    "completion error status" :
    "completion busy status", total_tests, src_off,
    dst_off, len, ret);
    - failed_tests++;
    - continue;
    + goto error_unmap_continue;
    }

    dmaengine_unmap_put(um);
    @@ -765,6 +755,12 @@ static int dmatest_func(void *data)
    verbose_result("test passed", total_tests, src_off,
    dst_off, len, 0);
    }
    +
    + continue;
    +
    +error_unmap_continue:
    + dmaengine_unmap_put(um);
    + failed_tests++;
    }
    ktime = ktime_sub(ktime_get(), ktime);
    ktime = ktime_sub(ktime, comparetime);
    --
    2.19.1


    \
     
     \ /
      Last update: 2019-03-12 18:36    [W:4.116 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site