summaryrefslogtreecommitdiffstats
path: root/drivers/md/raid6altivec.uc
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2005-09-16 19:27:29 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2005-09-17 11:49:58 -0700
commitd7e70ba45fd9850296ebb78ff5827f6a375f650c (patch)
tree26c5eba7ce9386b756e0d7cae93a9d4fc419471d /drivers/md/raid6altivec.uc
parent0d0fc3a2d6901bdedd8497acdb3358e2da9abefc (diff)
downloadlinux-stable-d7e70ba45fd9850296ebb78ff5827f6a375f650c.tar.gz
linux-stable-d7e70ba45fd9850296ebb78ff5827f6a375f650c.tar.bz2
linux-stable-d7e70ba45fd9850296ebb78ff5827f6a375f650c.zip
[PATCH] RAID6 Altivec fix
This patch fixes a signedness bug with RAID6 for Altivec, and makes the Altivec code testable in userspace. Signed-off-by: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/md/raid6altivec.uc')
-rw-r--r--drivers/md/raid6altivec.uc18
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/md/raid6altivec.uc b/drivers/md/raid6altivec.uc
index 1de8f030eee0..b9afd35b8812 100644
--- a/drivers/md/raid6altivec.uc
+++ b/drivers/md/raid6altivec.uc
@@ -27,16 +27,20 @@
#ifdef CONFIG_ALTIVEC
#include <altivec.h>
-#include <asm/system.h>
-#include <asm/cputable.h>
+#ifdef __KERNEL__
+# include <asm/system.h>
+# include <asm/cputable.h>
+#endif
/*
- * This is the C data type to use
+ * This is the C data type to use. We use a vector of
+ * signed char so vec_cmpgt() will generate the right
+ * instruction.
*/
-typedef vector unsigned char unative_t;
+typedef vector signed char unative_t;
-#define NBYTES(x) ((vector unsigned char) {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x})
+#define NBYTES(x) ((vector signed char) {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x})
#define NSIZE sizeof(unative_t)
/*
@@ -108,7 +112,11 @@ int raid6_have_altivec(void);
int raid6_have_altivec(void)
{
/* This assumes either all CPUs have Altivec or none does */
+# ifdef __KERNEL__
return cpu_has_feature(CPU_FTR_ALTIVEC);
+# else
+ return 1;
+# endif
}
#endif