btrfs-progs: check: introduce function to check shared block ref
[platform/upstream/btrfs-progs.git] / raid6.c
diff --git a/raid6.c b/raid6.c
index ce0f655..833df5f 100644 (file)
--- a/raid6.c
+++ b/raid6.c
  * ----------------------------------------------------------------------- */
 
 /*
+ * Added helpers for unaligned native int access
+ */
+
+/*
  * raid6int1.c
  *
  * 1-way unrolled portable integer math RAID-6 instruction set
@@ -20,6 +24,8 @@
 #include <stdint.h>
 #include <unistd.h>
 #include "kerncompat.h"
+#include "ctree.h"
+#include "disk-io.h"
 
 /*
  * This is the C data type to use
 # define NSIZE  8
 # define NSHIFT 3
 typedef uint64_t unative_t;
+#define put_unaligned_native(val,p)    put_unaligned_64((val),(p))
+#define get_unaligned_native(p)                get_unaligned_64((p))
 #else
 # define NBYTES(x) ((x) * 0x01010101U)
 # define NSIZE  4
 # define NSHIFT 2
 typedef uint32_t unative_t;
+#define put_unaligned_native(val,p)    put_unaligned_32((val),(p))
+#define get_unaligned_native(p)                get_unaligned_32((p))
 #endif
 
 /*
@@ -82,9 +92,9 @@ void raid6_gen_syndrome(int disks, size_t bytes, void **ptrs)
        q = dptr[z0+2];         /* RS syndrome */
 
        for ( d = 0 ; d < bytes ; d += NSIZE*1 ) {
-               wq0 = wp0 = *(unative_t *)&dptr[z0][d+0*NSIZE];
+               wq0 = wp0 = get_unaligned_native(&dptr[z0][d+0*NSIZE]);
                for ( z = z0-1 ; z >= 0 ; z-- ) {
-                       wd0 = *(unative_t *)&dptr[z][d+0*NSIZE];
+                       wd0 = get_unaligned_native(&dptr[z][d+0*NSIZE]);
                        wp0 ^= wd0;
                        w20 = MASK(wq0);
                        w10 = SHLBYTE(wq0);
@@ -92,8 +102,8 @@ void raid6_gen_syndrome(int disks, size_t bytes, void **ptrs)
                        w10 ^= w20;
                        wq0 = w10 ^ wd0;
                }
-               *(unative_t *)&p[d+NSIZE*0] = wp0;
-               *(unative_t *)&q[d+NSIZE*0] = wq0;
+               put_unaligned_native(wp0, &p[d+NSIZE*0]);
+               put_unaligned_native(wq0, &q[d+NSIZE*0]);
        }
 }