|
@@ -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;
|
|
|
}
|