summaryrefslogtreecommitdiff
path: root/drivers/scsi/ufs
diff options
context:
space:
mode:
authorDolev Raviv <draviv@codeaurora.org>2013-10-10 10:00:45 +0300
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-22 10:59:10 -0700
commit6bb220161476899e3c099241767c43be6821e903 (patch)
tree2a46a1ccc29d6344d438b8f0ed58ce1455cc852a /drivers/scsi/ufs
parente6628ef0a2c7b518511f2f1d3008d44c7e11194c (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.c29
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: