Re: [PATCH 2/4] x86/vmware: Add a header file for hypercall definitions

From: Thomas HellstrÃm (VMware)
Date: Mon Aug 19 2019 - 03:49:18 EST

On 8/19/19 8:25 AM, Borislav Petkov wrote:
On Mon, Aug 19, 2019 at 12:28:05AM +0200, Thomas HellstrÃm (VMware) wrote:
Unfortunately we can't use it, because it's unconditionally set on AMD even
if the VMware hypervisor
doesn't support it (by version or by configuration).
AMD sets it because they don't support VMCALL. Nothing stops us from
making that conditional depending on what the hypervisor can/supports.
I'm thinking it would be even cleaner if we use those two flags:


to denote hw support for either one or the other instruction and switch
accordingly. Just like KVM does.

In your case, the HV would set the preferred flag in
arch/x86/kernel/cpu/vmware.c - just like the others do in their
respective CPU init files - and the alternatives code would switch to it
when it runs.

Or is there more? :)

Yes, unfortunately. I agree this is is the cleanest solution and my first choice. It would work for VMware, but AFAICT it might break setups of other hypervisors running at least the vmmouse driver. Quick googling tells me there are likely QEMU/KVM setups that do this. My thinking is they would have to set X86_FEATURE_VMMCALL on AMD to get the kvm_hypercall right, but that would mean the vmmouse hypercall also uses vmmcall, which they probably haven't implemented (yet). So the safe way would be to use at least XF86_FEATURE_VMW_VMMCALL + XF86_FEATURE_VMCALL until that has happened.