static ssize_t long_sequential_write_test_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) { int ret = 0; int i = 0; int number = -1; unsigned long mtime, byte_count; test_pr_info("%s: -- UFS Long Sequential Write TEST --", __func__); sscanf(buf, "%d", &number); if (number <= 0) number = 1; memset(&utd->test_info, 0, sizeof(struct test_info)); utd->test_info.data = utd; utd->test_info.get_rq_disk_fn = ufs_test_get_rq_disk; utd->test_info.get_test_case_str_fn = ufs_test_get_test_case_str; utd->test_info.run_test_fn = run_long_seq_test; utd->test_info.testcase = TEST_LONG_SEQUENTIAL_WRITE; for (i = 0 ; i < number ; ++i) { test_pr_info("%s: Cycle # %d / %d", __func__, i+1, number); test_pr_info("%s: ====================", __func__); utd->test_info.test_byte_count = 0; ret = test_iosched_start_test(&utd->test_info); if (ret) break; mtime = ktime_to_ms(utd->test_info.test_duration); byte_count = utd->test_info.test_byte_count; long_seq_test_calc_throughput(mtime, byte_count); /* Allow FS requests to be dispatched */ msleep(1000); } return count; }
static ssize_t ufs_test_write_read_test_write_cb(struct file *file, const char __user *buf, size_t count, loff_t *ppos) { int ret = 0; int i; int number; sscanf(buf, "%d", &number); if (number <= 0) number = 1; test_pr_info("%s:the test will run for %d iterations.", __func__, number); memset(&utd->test_info, 0, sizeof(struct test_info)); /* Initializing test */ utd->test_info.data = utd; utd->test_info.get_test_case_str_fn = ufs_test_get_test_case_str; utd->test_info.testcase = UFS_TEST_WRITE_READ_TEST; utd->test_info.get_rq_disk_fn = ufs_test_get_rq_disk; utd->test_info.run_test_fn = ufs_test_run_write_read_test; /* Running the test multiple times */ for (i = 0; i < number; ++i) { ret = test_iosched_start_test(&utd->test_info); if (ret) { test_pr_err("%s: Test failed.", __func__); return ret; } } test_pr_info("%s: Completed all the ufs test iterations.", __func__); return count; }
static ssize_t ufs_test_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos, int test_case) { int ret = 0; int i; int number; ret = kstrtoint_from_user(buf, count, 0, &number); if (ret < 0) { pr_err("%s: Error while reading test parameter value %d", __func__, ret); return ret; } if (number <= 0) number = 1; pr_info("%s:the test will run for %d iterations.", __func__, number); memset(&utd->test_info, 0, sizeof(struct test_info)); /* Initializing test */ utd->test_info.data = utd; utd->test_info.get_test_case_str_fn = ufs_test_get_test_case_str; utd->test_info.testcase = test_case; utd->test_info.get_rq_disk_fn = ufs_test_get_rq_disk; utd->test_info.check_test_result_fn = ufs_test_check_result; utd->test_stage = DEFAULT; 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_MULTI_QUERY: utd->test_info.run_test_fn = ufs_test_run_multi_query_test; utd->test_info.check_test_result_fn = ufs_test_check_result; break; case UFS_TEST_LONG_SEQUENTIAL_READ: case UFS_TEST_LONG_SEQUENTIAL_WRITE: utd->test_info.run_test_fn = run_long_seq_test; utd->test_info.post_test_fn = long_seq_test_calc_throughput; utd->test_info.check_test_result_fn = ufs_test_check_result; utd->test_info.check_test_completion_fn = long_seq_test_check_completion; break; case UFS_TEST_LONG_SEQUENTIAL_MIXED: utd->test_info.timeout_msec = LONG_SEQUENTIAL_MIXED_TIMOUT_MS; utd->test_info.run_test_fn = run_mixed_long_seq_test; utd->test_info.post_test_fn = long_seq_test_calc_throughput; utd->test_info.check_test_result_fn = ufs_test_check_result; break; case UFS_TEST_PARALLEL_READ_AND_WRITE: utd->test_info.run_test_fn = ufs_test_run_parallel_read_and_write_test; utd->test_info.check_test_completion_fn = ufs_test_multi_thread_completion; break; case UFS_TEST_LUN_DEPTH: utd->test_info.run_test_fn = ufs_test_run_lun_depth_test; break; default: pr_err("%s: Unknown test-case: %d", __func__, test_case); WARN_ON(true); } /* Running the test multiple times */ for (i = 0; i < number; ++i) { pr_info("%s: Cycle # %d / %d", __func__, i+1, number); pr_info("%s: ====================", __func__); utd->test_info.test_byte_count = 0; ret = test_iosched_start_test(&utd->test_info); if (ret) { pr_err("%s: Test failed, err=%d.", __func__, ret); return ret; } /* Allow FS requests to be dispatched */ msleep(1000); } pr_info("%s: Completed all the ufs test iterations.", __func__); return count; }