aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Musta <tommusta@gmail.com>2013-10-18 13:08:22 -0400
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2013-10-30 01:01:23 -0400
commit630c8a5fc9fb2f3541652b65f23630757d304cc9 (patch)
tree0e8acd66c8b5fee2983a12707b444b6b9a1c2526
parent075f6311af30b011eaa8e50341c06a9082a796a9 (diff)
powerpc: Enable Little Endian Alignment Handler for Float Pair Instructions
This patch enables alignment handling for the load/store floating point pair instructions (lfdp, lfdpx, stfdp, stfdpx). The handler routine is properly coded and only needs to be enabled. Signed-off-by: Tom Musta <tmusta@gmail.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-rw-r--r--arch/powerpc/kernel/align.c6
1 files changed, 0 insertions, 6 deletions
diff --git a/arch/powerpc/kernel/align.c b/arch/powerpc/kernel/align.c
index a3169a987b84..de91f3ae631e 100644
--- a/arch/powerpc/kernel/align.c
+++ b/arch/powerpc/kernel/align.c
@@ -378,7 +378,6 @@ static int emulate_multiple(struct pt_regs *regs, unsigned char __user *addr,
378 * Only POWER6 has these instructions, and it does true little-endian, 378 * Only POWER6 has these instructions, and it does true little-endian,
379 * so we don't need the address swizzling. 379 * so we don't need the address swizzling.
380 */ 380 */
381#ifdef __BIG_ENDIAN__
382static int emulate_fp_pair(unsigned char __user *addr, unsigned int reg, 381static int emulate_fp_pair(unsigned char __user *addr, unsigned int reg,
383 unsigned int flags) 382 unsigned int flags)
384{ 383{
@@ -406,7 +405,6 @@ static int emulate_fp_pair(unsigned char __user *addr, unsigned int reg,
406 return -EFAULT; 405 return -EFAULT;
407 return 1; /* exception handled and fixed up */ 406 return 1; /* exception handled and fixed up */
408} 407}
409#endif
410 408
411#ifdef CONFIG_SPE 409#ifdef CONFIG_SPE
412 410
@@ -918,12 +916,8 @@ int fix_alignment(struct pt_regs *regs)
918 916
919 /* Special case for 16-byte FP loads and stores */ 917 /* Special case for 16-byte FP loads and stores */
920 if (nb == 16) { 918 if (nb == 16) {
921#ifdef __BIG_ENDIAN__
922 PPC_WARN_ALIGNMENT(fp_pair, regs); 919 PPC_WARN_ALIGNMENT(fp_pair, regs);
923 return emulate_fp_pair(addr, reg, flags); 920 return emulate_fp_pair(addr, reg, flags);
924#else
925 return -EFAULT;
926#endif
927 } 921 }
928 922
929 PPC_WARN_ALIGNMENT(unaligned, regs); 923 PPC_WARN_ALIGNMENT(unaligned, regs);