Commit d2dc9ab7 authored by Vinod Koul's avatar Vinod Koul
Browse files

Merge branch 'fixes' into next

parents 52c74d3d ce65d55f
Loading
Loading
Loading
Loading
+21 −5
Original line number Diff line number Diff line
@@ -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,11 +1192,23 @@ 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)) {
			/*
			 * 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 {
		stop_threaded_test(info);
@@ -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;