RE: [PATCH 2/7] x86/hyper-v: fast hypercall implementation

From: Jork Loeser
Date: Mon Apr 10 2017 - 13:14:33 EST


> -----Original Message-----
> From: Vitaly Kuznetsov [mailto:vkuznets@xxxxxxxxxx]

> Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> writes:
>
> > Jork Loeser <Jork.Loeser@xxxxxxxxxxxxx> writes:
> >
>
> [snip]
>
> >
> >>> + }
> >>> +#else
> >>> + {
> >>> + u32 hv_status_hi, hv_status_lo;
> >>> +
> >>> + __asm__ __volatile__ ("call *%6"
> >>> + : "=d"(hv_status_hi),
> >>> + "=a"(hv_status_lo) :
> >>> + "d" (control.as_uint32_hi),
> >>> + "a" (control.as_uint32_lo),
> >>> + "c" ((u32)input1),
> >>> + "b" ((u32)(input1 >> 32)),
> >>> + "m" (hv_hypercall_pg)
> >>> + : "cc");
> >>> +
> >>> + return hv_status_lo | ((u64)hv_status_hi << 32);
> >>> + }
> >>> +#endif
> >> Please clobber ECX, EDI and ESI for x86. Clobber memory as well?
> >
> > ECX is already in listed in inputs (lower part of input1) so it's
> > automatically clobbered. I'll add EDI and ESI to clobbers here, thanks!
>
> Oh, I see what you mean - hypervisor is allowed to write to ecx too, we need
> to pass it with '+'. Will do, thanks!

Yes, thank you Vitaly!

As for memory clobber, we would want that if there were hypercalls that modify memory and can issued via the "fast" ABI. If there are not, we are fine.

Regards,
Jork