]> git.karo-electronics.de Git - linux-beck.git/commitdiff
mmc: mmc_test: make performance test area size about 4MiB
authorAdrian Hunter <adrian.hunter@nokia.com>
Tue, 8 Feb 2011 11:41:01 +0000 (13:41 +0200)
committerChris Ball <cjb@laptop.org>
Tue, 15 Mar 2011 17:48:40 +0000 (13:48 -0400)
The test area size was set to the preferred erase size but for comparison
purposes it is better if it is the same size for different devices.  Make
it a multiple of preferred erase size that is greater than or equal to 4MiB.

Signed-off-by: Adrian Hunter <adrian.hunter@nokia.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
drivers/mmc/card/mmc_test.c

index 0131c6c0d8f6f0e1851cef08a7266e1888444cff..ec6060c06ce89564c21f83d28bf61fb4ae18c9ca 100644 (file)
@@ -1426,28 +1426,29 @@ static int mmc_test_area_cleanup(struct mmc_test_card *test)
 }
 
 /*
- * Initialize an area for testing large transfers.  The size of the area is the
- * preferred erase size which is a good size for optimal transfer speed.  Note
- * that is typically 4MiB for modern cards.  The test area is set to the middle
- * of the card because cards may have different charateristics at the front
- * (for FAT file system optimization).  Optionally, the area is erased (if the
- * card supports it) which may improve write performance.  Optionally, the area
- * is filled with data for subsequent read tests.
+ * Initialize an area for testing large transfers.  The test area is set to the
+ * middle of the card because cards may have different charateristics at the
+ * front (for FAT file system optimization).  Optionally, the area is erased
+ * (if the card supports it) which may improve write performance.  Optionally,
+ * the area is filled with data for subsequent read tests.
  */
 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;
+       unsigned long min_sz = 64 * 1024, sz;
        int ret;
 
        ret = mmc_test_set_blksize(test, 512);
        if (ret)
                return ret;
 
-       if (test->card->pref_erase > TEST_AREA_MAX_SIZE >> 9)
-               t->max_sz = TEST_AREA_MAX_SIZE;
-       else
-               t->max_sz = (unsigned long)test->card->pref_erase << 9;
+       /* Make the test area size about 4MiB */
+       sz = (unsigned long)test->card->pref_erase << 9;
+       t->max_sz = sz;
+       while (t->max_sz < 4 * 1024 * 1024)
+               t->max_sz += sz;
+       while (t->max_sz > TEST_AREA_MAX_SIZE && t->max_sz > sz)
+               t->max_sz -= sz;
 
        t->max_segs = test->card->host->max_segs;
        t->max_seg_sz = test->card->host->max_seg_size;