* Limit the test area size to the maximum MMC HC erase group size. Note that
* the maximum SD allocation unit size is just 4MiB.
*/
-#define TEST_AREA_MAX_SIZE (128 * 1024 * 1024)
+#define TEST_AREA_MAX_SIZE SZ_128M
/**
* struct mmc_test_pages - pages allocated by 'alloc_pages()'.
enum mmc_test_prep_media prepare;
};
+static unsigned int bs[] = {1 << 12, 1 << 13, 1 << 14, 1 << 15, 1 << 16,
+ 1 << 17, 1 << 18, 1 << 19, 1 << 20, 1 << 22};
+
+static unsigned int sg_len[] = {1, 1 << 3, 1 << 4, 1 << 5, 1 << 6,
+ 1 << 7, 1 << 8, 1 << 9};
/*******************************************************************/
/* General helper functions */
/*******************************************************************/
uint64_t ns;
ns = timespec64_to_ns(ts);
- bytes *= 1000000000;
+ bytes *= NSEC_PER_SEC;
while (ns > UINT_MAX) {
bytes >>= 1;
static void mmc_test_print_rate(struct mmc_test_card *test, uint64_t bytes,
struct timespec64 *ts1, struct timespec64 *ts2)
{
- unsigned int rate, iops, sectors = bytes >> 9;
+ unsigned int rate, iops, sectors = bytes >> SECTOR_SHIFT;
struct timespec64 ts;
ts = timespec64_sub(*ts2, *ts1);
unsigned int count, struct timespec64 *ts1,
struct timespec64 *ts2)
{
- unsigned int rate, iops, sectors = bytes >> 9;
+ unsigned int rate, iops, sectors = bytes >> SECTOR_SHIFT;
uint64_t tot = bytes * count;
struct timespec64 ts;
int err;
unsigned int sg_len = 0;
- t->blocks = sz >> 9;
+ t->blocks = sz >> SECTOR_SHIFT;
if (max_scatter) {
err = mmc_test_map_sg_max_scatter(t->mem, sz, t->sg,
else
for (i = 0; i < count && ret == 0; i++) {
ret = mmc_test_area_transfer(test, dev_addr, write);
- dev_addr += sz >> 9;
+ dev_addr += sz >> SECTOR_SHIFT;
}
if (ret)
if (!mmc_card_can_erase(test->card))
return 0;
- return mmc_erase(test->card, t->dev_addr, t->max_sz >> 9,
+ return mmc_erase(test->card, t->dev_addr, t->max_sz >> SECTOR_SHIFT,
MMC_ERASE_ARG);
}
static int mmc_test_area_init(struct mmc_test_card *test, int erase, int fill)
{
struct mmc_test_area *t = &test->area;
- unsigned long min_sz = 64 * 1024, sz;
+ unsigned long min_sz = SZ_64K, sz;
int ret;
ret = mmc_test_set_blksize(test, 512);
return ret;
/* Make the test area size about 4MiB */
- sz = (unsigned long)test->card->pref_erase << 9;
+ sz = (unsigned long)test->card->pref_erase << SECTOR_SHIFT;
t->max_sz = sz;
- while (t->max_sz < 4 * 1024 * 1024)
+ while (t->max_sz < SZ_4M)
t->max_sz += sz;
while (t->max_sz > TEST_AREA_MAX_SIZE && t->max_sz > sz)
t->max_sz -= sz;
t->max_seg_sz -= t->max_seg_sz % 512;
t->max_tfr = t->max_sz;
- if (t->max_tfr >> 9 > test->card->host->max_blk_count)
- t->max_tfr = test->card->host->max_blk_count << 9;
+ if (t->max_tfr >> SECTOR_SHIFT > test->card->host->max_blk_count)
+ t->max_tfr = test->card->host->max_blk_count << SECTOR_SHIFT;
if (t->max_tfr > test->card->host->max_req_size)
t->max_tfr = test->card->host->max_req_size;
if (t->max_tfr / t->max_seg_sz > t->max_segs)
}
t->dev_addr = mmc_test_capacity(test->card) / 2;
- t->dev_addr -= t->dev_addr % (t->max_sz >> 9);
+ t->dev_addr -= t->dev_addr % (t->max_sz >> SECTOR_SHIFT);
if (erase) {
ret = mmc_test_area_erase(test);
int ret;
for (sz = 512; sz < t->max_tfr; sz <<= 1) {
- dev_addr = t->dev_addr + (sz >> 9);
+ dev_addr = t->dev_addr + (sz >> SECTOR_SHIFT);
ret = mmc_test_area_io(test, sz, dev_addr, 0, 0, 1);
if (ret)
return ret;
if (ret)
return ret;
for (sz = 512; sz < t->max_tfr; sz <<= 1) {
- dev_addr = t->dev_addr + (sz >> 9);
+ dev_addr = t->dev_addr + (sz >> SECTOR_SHIFT);
ret = mmc_test_area_io(test, sz, dev_addr, 1, 0, 1);
if (ret)
return ret;
return RESULT_UNSUP_HOST;
for (sz = 512; sz < t->max_sz; sz <<= 1) {
- dev_addr = t->dev_addr + (sz >> 9);
+ dev_addr = t->dev_addr + (sz >> SECTOR_SHIFT);
ktime_get_ts64(&ts1);
- ret = mmc_erase(test->card, dev_addr, sz >> 9, MMC_TRIM_ARG);
+ ret = mmc_erase(test->card, dev_addr, sz >> SECTOR_SHIFT, MMC_TRIM_ARG);
if (ret)
return ret;
ktime_get_ts64(&ts2);
}
dev_addr = t->dev_addr;
ktime_get_ts64(&ts1);
- ret = mmc_erase(test->card, dev_addr, sz >> 9, MMC_TRIM_ARG);
+ ret = mmc_erase(test->card, dev_addr, sz >> SECTOR_SHIFT, MMC_TRIM_ARG);
if (ret)
return ret;
ktime_get_ts64(&ts2);
ret = mmc_test_area_io(test, sz, dev_addr, 0, 0, 0);
if (ret)
return ret;
- dev_addr += (sz >> 9);
+ dev_addr += (sz >> SECTOR_SHIFT);
}
ktime_get_ts64(&ts2);
mmc_test_print_avg_rate(test, sz, cnt, &ts1, &ts2);
ret = mmc_test_area_io(test, sz, dev_addr, 1, 0, 0);
if (ret)
return ret;
- dev_addr += (sz >> 9);
+ dev_addr += (sz >> SECTOR_SHIFT);
}
ktime_get_ts64(&ts2);
mmc_test_print_avg_rate(test, sz, cnt, &ts1, &ts2);
dev_addr = t->dev_addr;
ktime_get_ts64(&ts1);
for (i = 0; i < cnt; i++) {
- ret = mmc_erase(test->card, dev_addr, sz >> 9,
+ ret = mmc_erase(test->card, dev_addr, sz >> SECTOR_SHIFT,
MMC_TRIM_ARG);
if (ret)
return ret;
- dev_addr += (sz >> 9);
+ dev_addr += (sz >> SECTOR_SHIFT);
}
ktime_get_ts64(&ts2);
mmc_test_print_avg_rate(test, sz, cnt, &ts1, &ts2);
struct timespec64 ts1, ts2, ts;
int ret;
- ssz = sz >> 9;
+ ssz = sz >> SECTOR_SHIFT;
rnd_addr = mmc_test_capacity(test->card) / 4;
range1 = rnd_addr / test->card->pref_erase;
sz = max_tfr;
}
- ssz = sz >> 9;
+ ssz = sz >> SECTOR_SHIFT;
dev_addr = mmc_test_capacity(test->card) / 4;
- if (tot_sz > dev_addr << 9)
- tot_sz = dev_addr << 9;
+ if (tot_sz > dev_addr << SECTOR_SHIFT)
+ tot_sz = dev_addr << SECTOR_SHIFT;
cnt = tot_sz / sz;
dev_addr &= 0xffff0000; /* Round to 64MiB boundary */
int ret, i;
for (i = 0; i < 10; i++) {
- ret = mmc_test_seq_perf(test, write, 10 * 1024 * 1024, 1);
+ ret = mmc_test_seq_perf(test, write, 10 * SZ_1M, 1);
if (ret)
return ret;
}
for (i = 0; i < 5; i++) {
- ret = mmc_test_seq_perf(test, write, 100 * 1024 * 1024, 1);
+ ret = mmc_test_seq_perf(test, write, 100 * SZ_1M, 1);
if (ret)
return ret;
}
for (i = 0; i < 3; i++) {
- ret = mmc_test_seq_perf(test, write, 1000 * 1024 * 1024, 1);
+ ret = mmc_test_seq_perf(test, write, 1000 * SZ_1M, 1);
if (ret)
return ret;
}
int i;
for (i = 0 ; i < rw->len && ret == 0; i++) {
- ret = mmc_test_rw_multiple(test, rw, 512 * 1024, rw->size,
+ ret = mmc_test_rw_multiple(test, rw, SZ_512K, rw->size,
rw->sg_len[i]);
if (ret)
break;
*/
static int mmc_test_profile_mult_write_blocking_perf(struct mmc_test_card *test)
{
- unsigned int bs[] = {1 << 12, 1 << 13, 1 << 14, 1 << 15, 1 << 16,
- 1 << 17, 1 << 18, 1 << 19, 1 << 20, 1 << 22};
struct mmc_test_multiple_rw test_data = {
.bs = bs,
.size = TEST_AREA_MAX_SIZE,
*/
static int mmc_test_profile_mult_write_nonblock_perf(struct mmc_test_card *test)
{
- unsigned int bs[] = {1 << 12, 1 << 13, 1 << 14, 1 << 15, 1 << 16,
- 1 << 17, 1 << 18, 1 << 19, 1 << 20, 1 << 22};
struct mmc_test_multiple_rw test_data = {
.bs = bs,
.size = TEST_AREA_MAX_SIZE,
*/
static int mmc_test_profile_mult_read_blocking_perf(struct mmc_test_card *test)
{
- unsigned int bs[] = {1 << 12, 1 << 13, 1 << 14, 1 << 15, 1 << 16,
- 1 << 17, 1 << 18, 1 << 19, 1 << 20, 1 << 22};
struct mmc_test_multiple_rw test_data = {
.bs = bs,
.size = TEST_AREA_MAX_SIZE,
*/
static int mmc_test_profile_mult_read_nonblock_perf(struct mmc_test_card *test)
{
- unsigned int bs[] = {1 << 12, 1 << 13, 1 << 14, 1 << 15, 1 << 16,
- 1 << 17, 1 << 18, 1 << 19, 1 << 20, 1 << 22};
struct mmc_test_multiple_rw test_data = {
.bs = bs,
.size = TEST_AREA_MAX_SIZE,
*/
static int mmc_test_profile_sglen_wr_blocking_perf(struct mmc_test_card *test)
{
- unsigned int sg_len[] = {1, 1 << 3, 1 << 4, 1 << 5, 1 << 6,
- 1 << 7, 1 << 8, 1 << 9};
struct mmc_test_multiple_rw test_data = {
.sg_len = sg_len,
.size = TEST_AREA_MAX_SIZE,
*/
static int mmc_test_profile_sglen_wr_nonblock_perf(struct mmc_test_card *test)
{
- unsigned int sg_len[] = {1, 1 << 3, 1 << 4, 1 << 5, 1 << 6,
- 1 << 7, 1 << 8, 1 << 9};
struct mmc_test_multiple_rw test_data = {
.sg_len = sg_len,
.size = TEST_AREA_MAX_SIZE,
*/
static int mmc_test_profile_sglen_r_blocking_perf(struct mmc_test_card *test)
{
- unsigned int sg_len[] = {1, 1 << 3, 1 << 4, 1 << 5, 1 << 6,
- 1 << 7, 1 << 8, 1 << 9};
struct mmc_test_multiple_rw test_data = {
.sg_len = sg_len,
.size = TEST_AREA_MAX_SIZE,
*/
static int mmc_test_profile_sglen_r_nonblock_perf(struct mmc_test_card *test)
{
- unsigned int sg_len[] = {1, 1 << 3, 1 << 4, 1 << 5, 1 << 6,
- 1 << 7, 1 << 8, 1 << 9};
struct mmc_test_multiple_rw test_data = {
.sg_len = sg_len,
.size = TEST_AREA_MAX_SIZE,
if (ret)
goto out_free;
- if (repeat_cmd && (t->blocks + 1) << 9 > t->max_tfr)
+ if (repeat_cmd && (t->blocks + 1) << SECTOR_SHIFT > t->max_tfr)
pr_info("%s: %d commands completed during transfer of %u blocks\n",
mmc_hostname(test->card->host), count, t->blocks);