summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandrew <andrew@FreeBSD.org>2012-08-04 05:38:25 +0000
committerandrew <andrew@FreeBSD.org>2012-08-04 05:38:25 +0000
commit2929fcf69c8ddca115c9cbd02607082536cba849 (patch)
treea214e9d194520d60dcf356bb5c0ca381c46e6a17
parent9ce85154102c4d6e20f5b096b55137fd1b9cd562 (diff)
downloadFreeBSD-src-2929fcf69c8ddca115c9cbd02607082536cba849.zip
FreeBSD-src-2929fcf69c8ddca115c9cbd02607082536cba849.tar.gz
Correctly return EFAULT in copyin & copyout on a fault. This fixes NFS
when running FreeBSD on QEMU emulating a Gumstix board. While here remove the use of a magic number in the not-XScale version. Pointed out by: kib Reviewed by: stas
-rw-r--r--sys/arm/arm/bcopyinout.S3
-rw-r--r--sys/arm/arm/bcopyinout_xscale.S2
2 files changed, 4 insertions, 1 deletions
diff --git a/sys/arm/arm/bcopyinout.S b/sys/arm/arm/bcopyinout.S
index 4ded8fb..0d26ffa 100644
--- a/sys/arm/arm/bcopyinout.S
+++ b/sys/arm/arm/bcopyinout.S
@@ -39,6 +39,7 @@
#include "assym.s"
#include <machine/asm.h>
+#include <sys/errno.h>
.L_arm_memcpy:
.word _C_LABEL(_arm_memcpy)
@@ -310,7 +311,7 @@ ENTRY(copyin)
RET
.Lcopyfault:
- mov r0, #14 /* EFAULT */
+ ldr r0, =EFAULT
str r5, [r4, #PCB_ONFAULT]
RESTORE_REGS
diff --git a/sys/arm/arm/bcopyinout_xscale.S b/sys/arm/arm/bcopyinout_xscale.S
index 68c2701..64d9f42 100644
--- a/sys/arm/arm/bcopyinout_xscale.S
+++ b/sys/arm/arm/bcopyinout_xscale.S
@@ -108,6 +108,7 @@ ENTRY(copyin)
ldmfd sp!, {r10-r11, pc}
.Lcopyin_fault:
+ ldr r0, =EFAULT
str r11, [r10, #PCB_ONFAULT]
cmp r3, #0x00
ldmgtfd sp!, {r4-r7} /* r3 > 0 Restore r4-r7 */
@@ -559,6 +560,7 @@ ENTRY(copyout)
ldmfd sp!, {r10-r11, pc}
.Lcopyout_fault:
+ ldr r0, =EFAULT
str r11, [r10, #PCB_ONFAULT]
cmp r3, #0x00
ldmgtfd sp!, {r4-r7} /* r3 > 0 Restore r4-r7 */
OpenPOWER on IntegriCloud