Merge master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 into next
[pandora-kernel.git] / drivers / md / raid6algos.c
index 51c63c0..21987e3 100644 (file)
@@ -52,7 +52,7 @@ const struct raid6_calls * const raid6_algos[] = {
        &raid6_intx16,
        &raid6_intx32,
 #endif
-#if defined(__i386__)
+#if defined(__i386__) && !defined(__arch_um__)
        &raid6_mmxx1,
        &raid6_mmxx2,
        &raid6_sse1x1,
@@ -60,7 +60,7 @@ const struct raid6_calls * const raid6_algos[] = {
        &raid6_sse2x1,
        &raid6_sse2x2,
 #endif
-#if defined(__x86_64__)
+#if defined(__x86_64__) && !defined(__arch_um__)
        &raid6_sse2x1,
        &raid6_sse2x2,
        &raid6_sse2x4,
@@ -121,7 +121,8 @@ int __init raid6_select_algo(void)
                        j0 = jiffies;
                        while ( (j1 = jiffies) == j0 )
                                cpu_relax();
-                       while ( (jiffies-j1) < (1 << RAID6_TIME_JIFFIES_LG2) ) {
+                       while (time_before(jiffies,
+                                           j1 + (1<<RAID6_TIME_JIFFIES_LG2))) {
                                (*algo)->gen_syndrome(disks, PAGE_SIZE, dptrs);
                                perf++;
                        }
@@ -139,15 +140,14 @@ int __init raid6_select_algo(void)
                }
        }
 
-       if ( best )
+       if (best) {
                printk("raid6: using algorithm %s (%ld MB/s)\n",
                       best->name,
                       (bestperf*HZ) >> (20-16+RAID6_TIME_JIFFIES_LG2));
-       else
+               raid6_call = *best;
+       } else
                printk("raid6: Yikes!  No algorithm found!\n");
 
-       raid6_call = *best;
-
        free_pages((unsigned long)syndromes, 1);
 
        return best ? 0 : -EINVAL;