crypto: xor - skip speed test if the xor function is selected automatically
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 19 Aug 2016 12:19:30 +0000 (14:19 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 24 Aug 2016 13:04:48 +0000 (21:04 +0800)
If the architecture selected the xor function with XOR_SELECT_TEMPLATE
the speed result of the do_xor_speed benchmark is of limited value.
The speed measurement increases the bootup time a little, which can
makes a difference for kernels used in container like virtual machines.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/xor.c

index 35d6b3a..b8975d9 100644 (file)
@@ -109,6 +109,18 @@ calibrate_xor_blocks(void)
        void *b1, *b2;
        struct xor_block_template *f, *fastest;
 
+       fastest = NULL;
+
+#ifdef XOR_SELECT_TEMPLATE
+       fastest = XOR_SELECT_TEMPLATE(fastest);
+       if (fastest) {
+               printk(KERN_INFO "xor: automatically using best "
+                                "checksumming function   %-10s\n",
+                      fastest->name);
+               goto out;
+       }
+#endif
+
        /*
         * Note: Since the memory is not actually used for _anything_ but to
         * test the XOR speed, we don't really want kmemcheck to warn about
@@ -126,36 +138,22 @@ calibrate_xor_blocks(void)
         * all the possible functions, just test the best one
         */
 
-       fastest = NULL;
-
-#ifdef XOR_SELECT_TEMPLATE
-               fastest = XOR_SELECT_TEMPLATE(fastest);
-#endif
-
 #define xor_speed(templ)       do_xor_speed((templ), b1, b2)
 
-       if (fastest) {
-               printk(KERN_INFO "xor: automatically using best "
-                                "checksumming function:\n");
-               xor_speed(fastest);
-               goto out;
-       } else {
-               printk(KERN_INFO "xor: measuring software checksum speed\n");
-               XOR_TRY_TEMPLATES;
-               fastest = template_list;
-               for (f = fastest; f; f = f->next)
-                       if (f->speed > fastest->speed)
-                               fastest = f;
-       }
+       printk(KERN_INFO "xor: measuring software checksum speed\n");
+       XOR_TRY_TEMPLATES;
+       fastest = template_list;
+       for (f = fastest; f; f = f->next)
+               if (f->speed > fastest->speed)
+                       fastest = f;
 
        printk(KERN_INFO "xor: using function: %s (%d.%03d MB/sec)\n",
               fastest->name, fastest->speed / 1000, fastest->speed % 1000);
 
 #undef xor_speed
 
- out:
        free_pages((unsigned long)b1, 2);
-
+out:
        active_template = fastest;
        return 0;
 }