2
0
mirror of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-09-04 20:19:47 +08:00

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: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
This commit is contained in:
Andy Shevchenko 2013-03-04 11:09:31 +02:00 committed by Vinod Koul
parent 851b7e16a0
commit 3e5ccd866f
2 changed files with 33 additions and 2 deletions

View File

@ -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

View File

@ -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 @@ err_thread_type:
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,
{ {
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;