diff options
author | andrew <andrew@FreeBSD.org> | 2012-08-04 05:38:25 +0000 |
---|---|---|
committer | andrew <andrew@FreeBSD.org> | 2012-08-04 05:38:25 +0000 |
commit | 2929fcf69c8ddca115c9cbd02607082536cba849 (patch) | |
tree | a214e9d194520d60dcf356bb5c0ca381c46e6a17 | |
parent | 9ce85154102c4d6e20f5b096b55137fd1b9cd562 (diff) | |
download | FreeBSD-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.S | 3 | ||||
-rw-r--r-- | sys/arm/arm/bcopyinout_xscale.S | 2 |
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 */ |