x86: commonize __range_not_ok.

For i386, __range_not_ok is a better name than __range_ok, since
it returns 0 when it is in fact okay. Other than that,
both versions does not need the word size specifiers, and we remove them.

Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Glauber Costa 2008-06-25 10:14:13 -03:00 committed by Ingo Molnar
parent 5cbbc3b1eb
commit 53938a68a2
2 changed files with 4 additions and 5 deletions

View file

@ -56,11 +56,11 @@ extern struct movsl_mask {
* *
* This needs 33-bit arithmetic. We have a carry... * This needs 33-bit arithmetic. We have a carry...
*/ */
#define __range_ok(addr, size) \ #define __range_not_ok(addr, size) \
({ \ ({ \
unsigned long flag, roksum; \ unsigned long flag, roksum; \
__chk_user_ptr(addr); \ __chk_user_ptr(addr); \
asm("addl %3,%1 ; sbbl %0,%0; cmpl %1,%4; sbbl $0,%0" \ asm("add %3,%1 ; sbb %0,%0; cmp %1,%4; sbb $0,%0" \
:"=&r" (flag), "=r" (roksum) \ :"=&r" (flag), "=r" (roksum) \
:"1" (addr), "g" ((int)(size)), \ :"1" (addr), "g" ((int)(size)), \
"rm" (current_thread_info()->addr_limit.seg)); \ "rm" (current_thread_info()->addr_limit.seg)); \
@ -86,7 +86,7 @@ extern struct movsl_mask {
* checks that the pointer is in the user space range - after calling * checks that the pointer is in the user space range - after calling
* this function, memory access functions may still return -EFAULT. * this function, memory access functions may still return -EFAULT.
*/ */
#define access_ok(type, addr, size) (likely(__range_ok(addr, size) == 0)) #define access_ok(type, addr, size) (likely(__range_not_ok(addr, size) == 0))
/* /*
* The exception table consists of pairs of addresses: the first is the * The exception table consists of pairs of addresses: the first is the

View file

@ -41,8 +41,7 @@
({ \ ({ \
unsigned long flag, roksum; \ unsigned long flag, roksum; \
__chk_user_ptr(addr); \ __chk_user_ptr(addr); \
asm("# range_ok\n\r" \ asm("add %3,%1 ; sbb %0,%0 ; cmp %1,%4 ; sbb $0,%0" \
"addq %3,%1 ; sbbq %0,%0 ; cmpq %1,%4 ; sbbq $0,%0" \
: "=&r" (flag), "=r" (roksum) \ : "=&r" (flag), "=r" (roksum) \
: "1" (addr), "g" ((long)(size)), \ : "1" (addr), "g" ((long)(size)), \
"g" (current_thread_info()->addr_limit.seg)); \ "g" (current_thread_info()->addr_limit.seg)); \