Re: [tip:x86/mm] x86-32: Add support for 64bit get_user()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Stable Commits]     [Linux Stable Kernel]     [Linux Kernel]     [Linux USB Devel]     [Linux Video &Media]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux