Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 376809
b: refs/heads/master
c: bcc567e
h: refs/heads/master
i:
  376807: e9c9f5c
v: v3
  • Loading branch information
Andy Shevchenko authored and Vinod Koul committed Jun 7, 2013
1 parent 456a97a commit b4cc14c
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 26 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9ecb41bd8cf002fd8f3e063db4df81647ddd623c
refs/heads/master: bcc567e3115055a9cc256183d72864f01286be22
6 changes: 3 additions & 3 deletions trunk/Documentation/dmatest.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ command:
After a while you will start to get messages about current status or error like
in the original code.

Note that running a new test will stop any in progress test.
Note that running a new test will not stop any in progress test.

The following command should return actual state of the test.
% cat /sys/kernel/debug/dmatest/run
Expand All @@ -52,8 +52,8 @@ To wait for test done the user may perform a busy loop that checks the state.

The module parameters that is supplied to the kernel command line will be used
for the first performed test. After user gets a control, the test could be
interrupted or re-run with same or different parameters. For the details see
the above section "Part 2 - When dmatest is built as a module..."
re-run with the same or different parameters. For the details see the above
section "Part 2 - When dmatest is built as a module..."

In both cases the module parameters are used as initial values for the test case.
You always could check them at run-time by running
Expand Down
45 changes: 23 additions & 22 deletions trunk/drivers/dma/dmatest.c
Original file line number Diff line number Diff line change
Expand Up @@ -716,8 +716,7 @@ static int dmatest_func(void *data)
}
dma_async_issue_pending(chan);

wait_event_freezable_timeout(done_wait,
done.done || kthread_should_stop(),
wait_event_freezable_timeout(done_wait, done.done,
msecs_to_jiffies(params->timeout));

status = dma_async_is_tx_complete(chan, cookie, NULL, NULL);
Expand Down Expand Up @@ -997,7 +996,6 @@ static void stop_threaded_test(struct dmatest_info *info)
static int __restart_threaded_test(struct dmatest_info *info, bool run)
{
struct dmatest_params *params = &info->params;
int ret;

/* Stop any running test first */
__stop_threaded_test(info);
Expand All @@ -1012,13 +1010,23 @@ static int __restart_threaded_test(struct dmatest_info *info, bool run)
memcpy(params, &info->dbgfs_params, sizeof(*params));

/* Run test with new parameters */
ret = __run_threaded_test(info);
if (ret) {
__stop_threaded_test(info);
pr_err("dmatest: Can't run test\n");
return __run_threaded_test(info);
}

static bool __is_threaded_test_run(struct dmatest_info *info)
{
struct dmatest_chan *dtc;

list_for_each_entry(dtc, &info->channels, node) {
struct dmatest_thread *thread;

list_for_each_entry(thread, &dtc->threads, node) {
if (!thread->done)
return true;
}
}

return ret;
return false;
}

static ssize_t dtf_write_string(void *to, size_t available, loff_t *ppos,
Expand Down Expand Up @@ -1091,22 +1099,10 @@ static ssize_t dtf_read_run(struct file *file, char __user *user_buf,
{
struct dmatest_info *info = file->private_data;
char buf[3];
struct dmatest_chan *dtc;
bool alive = false;

mutex_lock(&info->lock);
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) {
if (__is_threaded_test_run(info)) {
buf[0] = 'Y';
} else {
__stop_threaded_test(info);
Expand All @@ -1132,7 +1128,12 @@ static ssize_t dtf_write_run(struct file *file, const char __user *user_buf,

if (strtobool(buf, &bv) == 0) {
mutex_lock(&info->lock);
ret = __restart_threaded_test(info, bv);

if (__is_threaded_test_run(info))
ret = -EBUSY;
else
ret = __restart_threaded_test(info, bv);

mutex_unlock(&info->lock);
}

Expand Down

0 comments on commit b4cc14c

Please sign in to comment.