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

Re: [Xen-devel] [PATCH 1/4] x86/pv: Drop int80_bounce from struct pv_vcpu



>>> On 08.05.17 at 17:48, <andrew.cooper3@xxxxxxxxxx> wrote:
> --- a/xen/arch/x86/x86_64/entry.S
> +++ b/xen/arch/x86/x86_64/entry.S
> @@ -233,12 +233,36 @@ UNLIKELY_END(msi_check)
>  
>          GET_CURRENT(bx)
>  
> -        /* Check that the callback is non-null. */
> -        leaq  VCPU_int80_bounce(%rbx),%rdx
> -        cmpb  $0,TRAPBOUNCE_flags(%rdx)
> +        mov   VCPU_trap_ctxt(%rbx), %rsi
> +        mov   VCPU_domain(%rbx), %rax
> +
> +        /*
> +         * if ( null_trap_bounce(v, &v->arch.pv_vcpu.trap_ctxt[0x80]) )
> +         *    goto int80_slow_path;
> +         */
> +        mov    0x80 * TRAPINFO_sizeof + TRAPINFO_eip(%rsi), %rdi
> +        movzwl 0x80 * TRAPINFO_sizeof + TRAPINFO_cs (%rsi), %ecx
> +
> +        mov   %ecx, %edx
> +        and   $~3, %edx
> +
> +        testb $1, DOMAIN_is_32bit_pv(%rax)

While we may have other such instances, this is dangerous (and long
ago I think we had actual issues with constructs like this one). Either
"cmpb" against zero, or "testb" with 0xff.

> +        cmove %rdi, %rdx

As there's nothing "equal" here, but only the question of ZF being
set of clear, the more natural form would be "cmovz" (just like you
use "jz" and "setnz" below).

> +        test  %rdx, %rdx
>          jz    int80_slow_path
>  
> -        movq  VCPU_domain(%rbx),%rax
> +        /* Construct trap_bounce from trap_ctxt[0x80]. */
> +        lea   VCPU_trap_bounce(%rbx), %rdx
> +        movw  %cx, TRAPBOUNCE_cs(%rdx)
> +        movq  %rdi, TRAPBOUNCE_eip(%rdx)
> +
> +        /* TB_flags = TBF_EXCEPTION | (TI_GET_IF(ti) ? TBF_INTERRUPT : 0); */
> +        testb $4, 0x80 * TRAPINFO_sizeof + TRAPINFO_flags(%rsi)
> +        setnz %cl
> +        lea   TBF_EXCEPTION(, %rcx, TBF_INTERRUPT), %ecx
> +        movb  %cl, TRAPBOUNCE_flags(%rdx)

In code further up you avoided mnemonic suffixes where possible,
yet in this code section you're (partly) using them even when a
register operand makes them redundant.

Since I understand this code will go away with subsequent patches
anyway, I don't insist on changing these though. Hence with or
without the adjustments
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.