Commit 3e5ccd86 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Vinod Koul

dmatest: return actual state in 'run' file

The following command should return actual state of the test.
	% cat /sys/kernel/debug/dmatest/run

To wait for test done the user may perform a busy loop that checks the state.
	% while [ $(cat /sys/kernel/debug/dmatest/run) = "Y" ]
	> do
	> 	echo -n "."
	> 	sleep 1
	> done
	> echo
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
parent 851b7e16
...@@ -36,6 +36,18 @@ in the original code. ...@@ -36,6 +36,18 @@ in the original code.
Note that running a new test will stop any in progress test. Note that running a new test will stop any in progress test.
The following command should return actual state of the test.
% cat /sys/kernel/debug/dmatest/run
To wait for test done the user may perform a busy loop that checks the state.
% while [ $(cat /sys/kernel/debug/dmatest/run) = "Y" ]
> do
> echo -n "."
> sleep 1
> done
> echo
Part 3 - When built-in in the kernel... Part 3 - When built-in in the kernel...
The module parameters that is supplied to the kernel command line will be used The module parameters that is supplied to the kernel command line will be used
......
...@@ -93,6 +93,7 @@ struct dmatest_thread { ...@@ -93,6 +93,7 @@ struct dmatest_thread {
u8 **srcs; u8 **srcs;
u8 **dsts; u8 **dsts;
enum dma_transaction_type type; enum dma_transaction_type type;
bool done;
}; };
struct dmatest_chan { struct dmatest_chan {
...@@ -603,6 +604,8 @@ static int dmatest_func(void *data) ...@@ -603,6 +604,8 @@ static int dmatest_func(void *data)
if (ret) if (ret)
dmaengine_terminate_all(chan); dmaengine_terminate_all(chan);
thread->done = true;
if (params->iterations > 0) if (params->iterations > 0)
while (!kthread_should_stop()) { while (!kthread_should_stop()) {
DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wait_dmatest_exit); DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wait_dmatest_exit);
...@@ -884,12 +887,28 @@ static ssize_t dtf_read_run(struct file *file, char __user *user_buf, ...@@ -884,12 +887,28 @@ static ssize_t dtf_read_run(struct file *file, char __user *user_buf,
{ {
struct dmatest_info *info = file->private_data; struct dmatest_info *info = file->private_data;
char buf[3]; char buf[3];
struct dmatest_chan *dtc;
bool alive = false;
mutex_lock(&info->lock); mutex_lock(&info->lock);
if (info->nr_channels) list_for_each_entry(dtc, &info->channels, node) {
struct dmatest_thread *thread;
list_for_each_entry(thread, &dtc->threads, node) {
if (!thread->done) {
alive = true;
break;
}
}
}
if (alive) {
buf[0] = 'Y'; buf[0] = 'Y';
else } else {
__stop_threaded_test(info);
buf[0] = 'N'; buf[0] = 'N';
}
mutex_unlock(&info->lock); mutex_unlock(&info->lock);
buf[1] = '\n'; buf[1] = '\n';
buf[2] = 0x00; buf[2] = 0x00;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment