diff options
author | H. Peter Anvin <hpa@zytor.com> | 2005-09-16 19:27:29 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-09-17 11:49:58 -0700 |
commit | d7e70ba45fd9850296ebb78ff5827f6a375f650c (patch) | |
tree | 26c5eba7ce9386b756e0d7cae93a9d4fc419471d /drivers/md/raid6altivec.uc | |
parent | 0d0fc3a2d6901bdedd8497acdb3358e2da9abefc (diff) | |
download | lwn-d7e70ba45fd9850296ebb78ff5827f6a375f650c.tar.gz lwn-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.uc | 18 |
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 |