|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 3/4] VMX: use proper instruction mnemonics if assembler supports them
On 26/08/2013 15:03, Jan Beulich wrote:
> -static inline unsigned long __vmread_safe(unsigned long field, int *error)
> +static inline bool_t __vmread_safe(unsigned long field, unsigned long *value)
> {
> - unsigned long ecx;
> + bool_t okay;
>
> - asm volatile ( VMREAD_OPCODE
> - MODRM_EAX_ECX
> - /* CF==1 or ZF==1 --> rc = -1 */
> - "setna %b0 ; neg %0"
> - : "=q" (*error), "=c" (ecx)
> - : "0" (0), "a" (field)
> + asm volatile (
> +#ifdef HAVE_GAS_VMX
> + "vmread %2, %1\n\t"
> +#else
> + VMREAD_OPCODE MODRM_EAX_ECX
> +#endif
> + /* CF==1 or ZF==1 --> rc = 0 */
> + "setnbe %0"
> +#ifdef HAVE_GAS_VMX
> + : "=qm" (okay), "=rm" (*value)
> + : "r" (field)
> +#else
> + : "=qm" (okay), "=c" (*value)
> + : "a" (field)
> +#endif
From what I can work out while googling, the q constraint is equivalent
to the r constraint for 64bit code.
For consistency sake, I would suggest "=rm" (okay) here
> : "memory");
>
> - return ecx;
> + return okay;
> }
>
> static inline void __invept(int type, u64 eptp, u64 gpa)
> @@ -365,14 +398,22 @@ static inline void __invept(int type, u6
> !cpu_has_vmx_ept_invept_single_context )
> type = INVEPT_ALL_CONTEXT;
>
> - asm volatile ( INVEPT_OPCODE
> - MODRM_EAX_08
> + asm volatile (
> +#ifdef HAVE_GAS_EPT
> + "invept %0, %q1\n"
Another stray q
> +#else
> + INVEPT_OPCODE MODRM_EAX_08
> +#endif
> /* CF==1 or ZF==1 --> crash (ud2) */
> UNLIKELY_START(be, invept)
> "\tud2\n"
> UNLIKELY_END_SECTION
> :
> +#ifdef HAVE_GAS_EPT
> + : "m" (operand), "r" (type)
> +#else
> : "a" (&operand), "c" (type)
> +#endif
> : "memory" );
> }
>
> @@ -385,7 +426,12 @@ static inline void __invvpid(int type, u
> } __attribute__ ((packed)) operand = {vpid, 0, gva};
>
> /* Fix up #UD exceptions which occur when TLBs are flushed before VMXON.
> */
> - asm volatile ( "1: " INVVPID_OPCODE MODRM_EAX_08
> + asm volatile ( "1: "
> +#ifdef HAVE_GAS_EPT
> + "invvpid %0, %q1\n"
And another
~Andrew
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |