crc32: use ktime_get_ns() for measurement
authorArnd Bergmann <arnd@arndb.de>
Tue, 2 Aug 2016 21:04:16 +0000 (14:04 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 2 Aug 2016 23:35:08 +0000 (19:35 -0400)
The crc32 test function measures the elapsed time in nanoseconds, but
uses 'struct timespec' for that.  We want to remove timespec from the
kernel for y2038 compatibility, and ktime_get_ns() also helps make the
code simpler here.

It is also slightly better to use monontonic time, as we are only
interested in the time difference.

Link: http://lkml.kernel.org/r/20160617143932.3289626-1-arnd@arndb.de
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: "David S . Miller" <davem@davemloft.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
lib/crc32.c

index 9a907d489d9517e7cb86e5e33f19f47285c4cac1..7fbd1a112b9d2474c9fb02c7a959d546448935c2 100644 (file)
@@ -979,7 +979,6 @@ static int __init crc32c_test(void)
        int i;
        int errors = 0;
        int bytes = 0;
-       struct timespec start, stop;
        u64 nsec;
        unsigned long flags;
 
@@ -999,20 +998,17 @@ static int __init crc32c_test(void)
        local_irq_save(flags);
        local_irq_disable();
 
-       getnstimeofday(&start);
+       nsec = ktime_get_ns();
        for (i = 0; i < 100; i++) {
                if (test[i].crc32c_le != __crc32c_le(test[i].crc, test_buf +
                    test[i].start, test[i].length))
                        errors++;
        }
-       getnstimeofday(&stop);
+       nsec = ktime_get_ns() - nsec;
 
        local_irq_restore(flags);
        local_irq_enable();
 
-       nsec = stop.tv_nsec - start.tv_nsec +
-               1000000000 * (stop.tv_sec - start.tv_sec);
-
        pr_info("crc32c: CRC_LE_BITS = %d\n", CRC_LE_BITS);
 
        if (errors)
@@ -1065,7 +1061,6 @@ static int __init crc32_test(void)
        int i;
        int errors = 0;
        int bytes = 0;
-       struct timespec start, stop;
        u64 nsec;
        unsigned long flags;
 
@@ -1088,7 +1083,7 @@ static int __init crc32_test(void)
        local_irq_save(flags);
        local_irq_disable();
 
-       getnstimeofday(&start);
+       nsec = ktime_get_ns();
        for (i = 0; i < 100; i++) {
                if (test[i].crc_le != crc32_le(test[i].crc, test_buf +
                    test[i].start, test[i].length))
@@ -1098,14 +1093,11 @@ static int __init crc32_test(void)
                    test[i].start, test[i].length))
                        errors++;
        }
-       getnstimeofday(&stop);
+       nsec = ktime_get_ns() - nsec;
 
        local_irq_restore(flags);
        local_irq_enable();
 
-       nsec = stop.tv_nsec - start.tv_nsec +
-               1000000000 * (stop.tv_sec - start.tv_sec);
-
        pr_info("crc32: CRC_LE_BITS = %d, CRC_BE BITS = %d\n",
                 CRC_LE_BITS, CRC_BE_BITS);