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

Re: [Xen-devel] [PATCH v5 11/20] xen: setup hypercall page for PVH


  • To: Daniel Kiper <daniel.kiper@xxxxxxxxxx>
  • From: Juergen Gross <jgross@xxxxxxxx>
  • Date: Wed, 28 Nov 2018 12:44:08 +0100
  • Autocrypt: addr=jgross@xxxxxxxx; prefer-encrypt=mutual; keydata= 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
  • Cc: hans@xxxxxxxxxxx, grub-devel@xxxxxxx, phcoder@xxxxxxxxx, roger.pau@xxxxxxxxxx, xen-devel@xxxxxxxxxxxxx
  • Delivery-date: Wed, 28 Nov 2018 11:44:15 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Openpgp: preference=signencrypt

On 28/11/2018 12:28, Daniel Kiper wrote:
> On Tue, Nov 27, 2018 at 09:31:10PM +0100, Daniel Kiper wrote:
>> On Wed, Nov 21, 2018 at 03:28:46PM +0100, Juergen Gross wrote:
>>> Add the needed code to setup the hypercall page for calling into the
>>> Xen hypervisor.
>>>
>>> Import the XEN_HVM_DEBUGCONS_IOPORT define from Xen unstable into
>>> include/xen/arch-x86/xen.h
>>>
>>> Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
> 
> [...]
> 
>>> +int
>>> +grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t a0,
>>> +               grub_uint32_t a1, grub_uint32_t a2,
>>> +               grub_uint32_t a3, grub_uint32_t a4,
>>> +               grub_uint32_t a5 __attribute__ ((unused)))
>>> +{
>>> +  grub_uint32_t __res, dummy;
>>> +
>>> +  asm volatile ("call *%[callno]"
>>> +           : "=a" (__res), "=b" (dummy), "=c" (dummy), "=d" (dummy),
>>> +             "=S" (dummy), "=D" (dummy)
>>> +           : "1" (a0), "2" (a1), "3" (a2), "4" (a3), "5" (a4),
>>> +             [callno] "a" (&hypercall_page[callno * 32])
>>> +           : "memory");
>>
>> Have you tried "+b", "+c", ... instead of "=b", "=c", ...?
> 
> I have done some experiments. Your code:
> 
>   grub_uint32_t __res, dummy;
> 
>   asm volatile ("call *%[callno]"
>                 : "=a" (__res), "=b" (dummy), "=c" (dummy), "=d" (dummy),
>                   "=S" (dummy), "=D" (dummy)
>                 : "1" (a0), "2" (a1), "3" (a2), "4" (a3), "5" (a4),
>                   [callno] "a" (&hypercall_page[callno * 32])
>                 : "memory");
> 
> ... generates this assembly:
> 
> 0000048e <grub_xen_hypercall>:
>  48e:   55                      push   %ebp
>  48f:   89 e5                   mov    %esp,%ebp
>  491:   57                      push   %edi
>  492:   56                      push   %esi
>  493:   53                      push   %ebx
>  494:   c1 e0 05                shl    $0x5,%eax
>  497:   05 00 10 00 00          add    $0x1000,%eax
>  49c:   89 d3                   mov    %edx,%ebx
>  49e:   8b 55 08                mov    0x8(%ebp),%edx
>  4a1:   8b 75 0c                mov    0xc(%ebp),%esi
>  4a4:   8b 7d 10                mov    0x10(%ebp),%edi
>  4a7:   ff d0                   call   *%eax
>  4a9:   5b                      pop    %ebx
>  4aa:   5e                      pop    %esi
>  4ab:   5f                      pop    %edi
>  4ac:   5d                      pop    %ebp
>  4ad:   c2 10 00                ret    $0x10
> 
> Mine code:
> 
>   grub_uint32_t __res;
> 
>   asm volatile ("call *%[callno]"
>                 : "=a" (__res), "+b" (a0), "+c" (a1), "+d" (a2), "+S" (a3), 
> "+D" (a4)
>                 : [callno] "rm" (&hypercall_page[callno * 32])
>                 : "memory");
> 
> ... generates this assembly:
> 
> 0000048e <grub_xen_hypercall>:
>  48e:   55                      push   %ebp
>  48f:   89 e5                   mov    %esp,%ebp
>  491:   57                      push   %edi
>  492:   56                      push   %esi
>  493:   53                      push   %ebx
>  494:   c1 e0 05                shl    $0x5,%eax
>  497:   05 00 10 00 00          add    $0x1000,%eax
>  49c:   89 d3                   mov    %edx,%ebx
>  49e:   8b 55 08                mov    0x8(%ebp),%edx
>  4a1:   8b 75 0c                mov    0xc(%ebp),%esi
>  4a4:   8b 7d 10                mov    0x10(%ebp),%edi
>  4a7:   ff d0                   call   *%eax
>  4a9:   5b                      pop    %ebx
>  4aa:   5e                      pop    %esi
>  4ab:   5f                      pop    %edi
>  4ac:   5d                      pop    %ebp
>  4ad:   c2 10 00                ret    $0x10
> 
> So, both are equal but mine seems a bit simpler.
> 
> And I think that you can drop "__" from __res variable.

Okay.


Juergen

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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