Messages in this thread Patch in this message | | | Date | Mon, 19 Apr 2004 10:44:08 +0100 | From | Jamie Lokier <> | Subject | [PATCH] Add 64-bit get_user and __get_user for i386 |
| |
Linus Torvalds wrote: > I agree that it's an ugly special case. get/put_user should really accept > all the normal cases, and that includes 'u64'.
Enjoy, -- Jamie
Subject: [PATCH] Add 64-bit get_user and __get_user for i386 Patch: uaccess64-2.6.5
Add 64-bit get_user and __get_user for i386. Don't ask me how, but this shrinks the kernel too.
--- orig-2.6.5/include/asm-i386/uaccess.h 2003-12-18 02:58:16.000000000 +0000 +++ uaccess64-2.6.5/include/asm-i386/uaccess.h 2004-04-19 10:33:20.000000000 +0100 @@ -169,16 +169,19 @@ * On error, the variable @x is set to zero. */ #define get_user(x,ptr) \ -({ int __ret_gu,__val_gu; \ +(sizeof (*(ptr)) == 8 \ + ? (__copy_from_user_ll((void *)&(x), (ptr), 8) ? -EFAULT : 0) : \ +({ \ + int __ret_gu,__val_gu; \ switch(sizeof (*(ptr))) { \ case 1: __get_user_x(1,__ret_gu,__val_gu,ptr); break; \ case 2: __get_user_x(2,__ret_gu,__val_gu,ptr); break; \ case 4: __get_user_x(4,__ret_gu,__val_gu,ptr); break; \ - default: __get_user_x(X,__ret_gu,__val_gu,ptr); break; \ + default: __get_user_bad(); break; \ } \ (x) = (__typeof__(*(ptr)))__val_gu; \ __ret_gu; \ -}) +})) extern void __put_user_bad(void); @@ -333,13 +336,14 @@ : ltype (x), "m"(__m(addr)), "i"(errret), "0"(err)) -#define __get_user_nocheck(x,ptr,size) \ -({ \ - long __gu_err, __gu_val; \ - __get_user_size(__gu_val,(ptr),(size),__gu_err,-EFAULT);\ - (x) = (__typeof__(*(ptr)))__gu_val; \ - __gu_err; \ -}) +#define __get_user_nocheck(x,ptr,size) \ +((size) == 8 ? (__copy_from_user_ll((void *)&(x), (ptr), 8) ? -EFAULT : 0) : \ +({ \ + long __gu_err, __gu_val; \ + __get_user_size(__gu_val,(ptr),(size),__gu_err,-EFAULT); \ + (x) = (__typeof__(*(ptr)))__gu_val; \ + __gu_err; \ +})) extern long __get_user_bad(void); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |