On 02/08/2013 09:18 AM, Ville Syrjälä wrote: >> >> diff --git a/arch/x86/include/asm/uaccess.h b/arch/x86/include/asm/uaccess.h >> index 1709801..1e96326 100644 >> --- a/arch/x86/include/asm/uaccess.h >> +++ b/arch/x86/include/asm/uaccess.h >> @@ -151,8 +151,15 @@ extern int __get_user_bad(void); >> * On error, the variable @x is set to zero. >> */ >> #ifdef CONFIG_X86_32 >> -#define __get_user_8(__ret_gu, __val_gu, ptr) \ >> - __get_user_x(X, __ret_gu, __val_gu, ptr) >> +#define __get_user_8(ret, x, ptr) \ >> +do { \ >> + register unsigned long long __xx asm("%edx"); \ >> + asm volatile("call __get_user_8" \ >> + : "=a" (ret), "=r" (__xx) \ >> + : "0" (ptr)); \ >> + (x) = __xx; \ >> +} while (0) > > I'm no inline asm guy so I don't claim to know whether this always > works. I'll have to take your word for it. While gcc documentation > does mention explicit register variables, it doesn't tell you > anything about using multiple registers for one such variable. > gcc always uses two consecutive registers for wide integers; however, it uses the register sequence: eax, edx, ecx, ebx, esp, ebp, esi, edi ecx and edx are swapped versus x86 register numbering so that the standard register pairs edx:eax and ebx:ecx are contiguous. -hpa -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html