diff options
author | Dolev Raviv <draviv@codeaurora.org> | 2013-10-10 10:00:45 +0300 |
---|---|---|
committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-22 10:59:10 -0700 |
commit | 6bb220161476899e3c099241767c43be6821e903 (patch) | |
tree | 2a46a1ccc29d6344d438b8f0ed58ce1455cc852a /drivers/scsi/ufs | |
parent | e6628ef0a2c7b518511f2f1d3008d44c7e11194c (diff) |
scsi: ufs: add support for test specific completion check
Introduce a new callback 'check_test_completion_fn' to test-iosched
framework. This callback is necessary to determine if a test has
completed or not in situation where the request queue is empty, but the
test was not completed.
Change-Id: I60bd8cccffacab11a5a7cba78caccf53fea3e1d8
Signed-off-by: Dolev Raviv <draviv@codeaurora.org>
[venkatg@codeaurora.org: dropped block/test-iosched changes]
Signed-off-by: Venkat Gopalakrishnan <venkatg@codeaurora.org>
Diffstat (limited to 'drivers/scsi/ufs')
-rw-r--r-- | drivers/scsi/ufs/ufs_test.c | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/drivers/scsi/ufs/ufs_test.c b/drivers/scsi/ufs/ufs_test.c index e726fbb2d2ef..113e6e624801 100644 --- a/drivers/scsi/ufs/ufs_test.c +++ b/drivers/scsi/ufs/ufs_test.c @@ -181,20 +181,6 @@ static void ufs_test_pseudo_rnd_size(unsigned int *seed, *num_of_bios = DEFAULT_NUM_OF_BIOS; } -static void ufs_test_write_read_test_end_io_fn(struct request *rq, int err) -{ - struct test_request *test_rq = (struct test_request *)rq->elv.priv[0]; - BUG_ON(!test_rq); - - test_pr_info("%s: request %d completed, err=%d", - __func__, test_rq->req_id, err); - test_rq->req_completed = 1; - test_rq->req_result = err; - - utd->write_completed = true; - wake_up(&utd->wait_q); -} - static int ufs_test_show(struct seq_file *file, int test_case) { char *test_description; @@ -262,6 +248,16 @@ exit: return gd; } +static bool ufs_write_read_completion(void) +{ + if (!utd->write_completed) { + utd->write_completed = true; + wake_up(&utd->wait_q); + return false; + } + return true; +} + static int ufs_test_run_write_read_test(struct test_data *td) { int ret = 0; @@ -284,8 +280,7 @@ static int ufs_test_run_write_read_test(struct test_data *td) utd->write_completed = false; ret = test_iosched_add_wr_rd_test_req(0, WRITE, start_sec, num_bios, - TEST_PATTERN_5A, - ufs_test_write_read_test_end_io_fn); + TEST_PATTERN_5A, NULL); if (ret) { test_pr_err("%s: failed to add a write request", __func__); @@ -456,6 +451,8 @@ static ssize_t ufs_test_write(struct file *file, const char __user *buf, switch (test_case) { case UFS_TEST_WRITE_READ_TEST: utd->test_info.run_test_fn = ufs_test_run_write_read_test; + utd->test_info.check_test_completion_fn = + ufs_write_read_completion; break; case UFS_TEST_LONG_SEQUENTIAL_READ: case UFS_TEST_LONG_SEQUENTIAL_WRITE: |