crypto: xor - skip speed test if the xor function is selected automatically

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>
This commit is contained in:
Martin Schwidefsky 2016-08-19 14:19:30 +02:00 committed by Herbert Xu
parent ed0bd721c9
commit 39457acda9

View file

@ -109,6 +109,18 @@ calibrate_xor_blocks(void)
void *b1, *b2; void *b1, *b2;
struct xor_block_template *f, *fastest; 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 * 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 * 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 * 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) #define xor_speed(templ) do_xor_speed((templ), b1, b2)
if (fastest) { printk(KERN_INFO "xor: measuring software checksum speed\n");
printk(KERN_INFO "xor: automatically using best " XOR_TRY_TEMPLATES;
"checksumming function:\n"); fastest = template_list;
xor_speed(fastest); for (f = fastest; f; f = f->next)
goto out; if (f->speed > fastest->speed)
} else { 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", printk(KERN_INFO "xor: using function: %s (%d.%03d MB/sec)\n",
fastest->name, fastest->speed / 1000, fastest->speed % 1000); fastest->name, fastest->speed / 1000, fastest->speed % 1000);
#undef xor_speed #undef xor_speed
out:
free_pages((unsigned long)b1, 2); free_pages((unsigned long)b1, 2);
out:
active_template = fastest; active_template = fastest;
return 0; return 0;
} }