lkml.org 
[lkml]   [2020]   [Oct]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH v5 04/17] x86/acrn: Introduce hypercall interfaces
    On Mon, Oct 19, 2020 at 02:17:50PM +0800, shuo.a.liu@intel.com wrote:
    > From: Shuo Liu <shuo.a.liu@intel.com>
    >
    > The Service VM communicates with the hypervisor via conventional
    > hypercalls. VMCALL instruction is used to make the hypercalls.
    >
    > ACRN hypercall ABI:
    > * Hypercall number is in R8 register.
    > * Up to 2 parameters are in RDI and RSI registers.
    > * Return value is in RAX register.
    >
    > Introduce the ACRN hypercall interfaces. Because GCC doesn't support R8
    > register as direct register constraints, use supported constraint as
    > input with a explicit MOV to R8 in beginning of asm.
    >
    > +static inline long acrn_hypercall0(unsigned long hcall_id)
    > +{
    > + long result;
    > +
    > + asm volatile("movl %1, %%r8d\n\t"
    > + "vmcall\n\t"
    > + : "=a" (result)
    > + : "ir" (hcall_id)

    Is the hypercall id an unsigned long (64 bits) or an unsigned int (32
    bits)? This will generate broken assembly if the "r" option is chosen,
    eg something like
    movl %rdi, %r8d

    > + : "r8", "memory");
    > +
    > + return result;
    > +}
    > +
    > +static inline long acrn_hypercall1(unsigned long hcall_id,
    > + unsigned long param1)
    > +{
    > + long result;
    > +
    > + asm volatile("movl %1, %%r8d\n\t"
    > + "vmcall\n\t"
    > + : "=a" (result)
    > + : "ir" (hcall_id), "D" (param1)
    > + : "r8", "memory");
    > +
    > + return result;
    > +}
    > +
    > +static inline long acrn_hypercall2(unsigned long hcall_id,
    > + unsigned long param1,
    > + unsigned long param2)
    > +{
    > + long result;
    > +
    > + asm volatile("movl %1, %%r8d\n\t"
    > + "vmcall\n\t"
    > + : "=a" (result)
    > + : "ir" (hcall_id), "D" (param1), "S" (param2)
    > + : "r8", "memory");
    > +
    > + return result;
    > +}
    > +
    > #endif /* _ASM_X86_ACRN_H */
    > --
    > 2.28.0
    >

    \
     
     \ /
      Last update: 2020-10-20 00:16    [W:4.262 / U:0.500 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site