diff options
author | Vinod Koul <vkoul@kernel.org> | 2020-09-22 16:48:32 +0200 |
---|---|---|
committer | Vinod Koul <vkoul@kernel.org> | 2020-09-22 16:48:32 +0200 |
commit | d2dc9ab7476412e30a9ebffdd9fd01a6dc551870 (patch) | |
tree | b218e2b7323bfc67f6c47bafb43b356ecbe54238 /drivers/dma/dmatest.c | |
parent | dmaengine: ti: k3-udma-glue: fix channel enable functions (diff) | |
parent | dmaengine: dmatest: Prevent to run on misconfigured channel (diff) | |
download | linux-d2dc9ab7476412e30a9ebffdd9fd01a6dc551870.tar.xz linux-d2dc9ab7476412e30a9ebffdd9fd01a6dc551870.zip |
Merge branch 'fixes' into next
Diffstat (limited to 'drivers/dma/dmatest.c')
-rw-r--r-- | drivers/dma/dmatest.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c index 8bd1a25ad3e3..5dc3db216602 100644 --- a/drivers/dma/dmatest.c +++ b/drivers/dma/dmatest.c @@ -130,6 +130,7 @@ struct dmatest_params { * @nr_channels: number of channels under test * @lock: access protection to the fields of this structure * @did_init: module has been initialized completely + * @last_error: test has faced configuration issues */ static struct dmatest_info { /* Test parameters */ @@ -138,6 +139,7 @@ static struct dmatest_info { /* Internal state */ struct list_head channels; unsigned int nr_channels; + int last_error; struct mutex lock; bool did_init; } test_info = { @@ -1190,10 +1192,22 @@ static int dmatest_run_set(const char *val, const struct kernel_param *kp) return ret; } else if (dmatest_run) { if (!is_threaded_test_pending(info)) { - pr_info("No channels configured, continue with any\n"); - if (!is_threaded_test_run(info)) - stop_threaded_test(info); - add_threaded_test(info); + /* + * We have nothing to run. This can be due to: + */ + ret = info->last_error; + if (ret) { + /* 1) Misconfiguration */ + pr_err("Channel misconfigured, can't continue\n"); + mutex_unlock(&info->lock); + return ret; + } else { + /* 2) We rely on defaults */ + pr_info("No channels configured, continue with any\n"); + if (!is_threaded_test_run(info)) + stop_threaded_test(info); + add_threaded_test(info); + } } start_threaded_tests(info); } else { @@ -1210,7 +1224,7 @@ static int dmatest_chan_set(const char *val, const struct kernel_param *kp) struct dmatest_info *info = &test_info; struct dmatest_chan *dtc; char chan_reset_val[20]; - int ret = 0; + int ret; mutex_lock(&info->lock); ret = param_set_copystring(val, kp); @@ -1265,12 +1279,14 @@ static int dmatest_chan_set(const char *val, const struct kernel_param *kp) goto add_chan_err; } + info->last_error = ret; mutex_unlock(&info->lock); return ret; add_chan_err: param_set_copystring(chan_reset_val, kp); + info->last_error = ret; mutex_unlock(&info->lock); return ret; |