Merge tag 'dmaengine-fix-5.9' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine
Pull dmaengine fix from Vinod Koul: "Fix dmatest for misconfigured channel" * tag 'dmaengine-fix-5.9' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine: dmaengine: dmatest: Prevent to run on misconfigured channel
This commit is contained in:
@@ -129,6 +129,7 @@ struct dmatest_params {
|
|||||||
* @nr_channels: number of channels under test
|
* @nr_channels: number of channels under test
|
||||||
* @lock: access protection to the fields of this structure
|
* @lock: access protection to the fields of this structure
|
||||||
* @did_init: module has been initialized completely
|
* @did_init: module has been initialized completely
|
||||||
|
* @last_error: test has faced configuration issues
|
||||||
*/
|
*/
|
||||||
static struct dmatest_info {
|
static struct dmatest_info {
|
||||||
/* Test parameters */
|
/* Test parameters */
|
||||||
@@ -137,6 +138,7 @@ static struct dmatest_info {
|
|||||||
/* Internal state */
|
/* Internal state */
|
||||||
struct list_head channels;
|
struct list_head channels;
|
||||||
unsigned int nr_channels;
|
unsigned int nr_channels;
|
||||||
|
int last_error;
|
||||||
struct mutex lock;
|
struct mutex lock;
|
||||||
bool did_init;
|
bool did_init;
|
||||||
} test_info = {
|
} test_info = {
|
||||||
@@ -1184,10 +1186,22 @@ static int dmatest_run_set(const char *val, const struct kernel_param *kp)
|
|||||||
return ret;
|
return ret;
|
||||||
} else if (dmatest_run) {
|
} else if (dmatest_run) {
|
||||||
if (!is_threaded_test_pending(info)) {
|
if (!is_threaded_test_pending(info)) {
|
||||||
pr_info("No channels configured, continue with any\n");
|
/*
|
||||||
if (!is_threaded_test_run(info))
|
* We have nothing to run. This can be due to:
|
||||||
stop_threaded_test(info);
|
*/
|
||||||
add_threaded_test(info);
|
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);
|
start_threaded_tests(info);
|
||||||
} else {
|
} else {
|
||||||
@@ -1204,7 +1218,7 @@ static int dmatest_chan_set(const char *val, const struct kernel_param *kp)
|
|||||||
struct dmatest_info *info = &test_info;
|
struct dmatest_info *info = &test_info;
|
||||||
struct dmatest_chan *dtc;
|
struct dmatest_chan *dtc;
|
||||||
char chan_reset_val[20];
|
char chan_reset_val[20];
|
||||||
int ret = 0;
|
int ret;
|
||||||
|
|
||||||
mutex_lock(&info->lock);
|
mutex_lock(&info->lock);
|
||||||
ret = param_set_copystring(val, kp);
|
ret = param_set_copystring(val, kp);
|
||||||
@@ -1259,12 +1273,14 @@ static int dmatest_chan_set(const char *val, const struct kernel_param *kp)
|
|||||||
goto add_chan_err;
|
goto add_chan_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
info->last_error = ret;
|
||||||
mutex_unlock(&info->lock);
|
mutex_unlock(&info->lock);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
add_chan_err:
|
add_chan_err:
|
||||||
param_set_copystring(chan_reset_val, kp);
|
param_set_copystring(chan_reset_val, kp);
|
||||||
|
info->last_error = ret;
|
||||||
mutex_unlock(&info->lock);
|
mutex_unlock(&info->lock);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
Reference in New Issue
Block a user