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:
parent
851b7e16a0
commit
3e5ccd866f
@ -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 {
|
|||||||
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;
|
||||||
|
Loading…
Reference in New Issue
Block a user