• A
    spapr/target-ppc/kvm: Only add hcall-instructions if KVM supports it · 0ddbd053
    Alexey Kardashevskiy 提交于
    ePAPR defines "hcall-instructions" device-tree property which contains
    code to call hypercalls in ePAPR paravirtualized guests.  In general
    pseries guests won't use this property, instead using the PAPR defined
    hypercall interface.
    
    However, this property has been re-used to implement a hack to allow
    PR KVM to run (slightly modified) guests in some situations where it
    otherwise wouldn't be able to (because the system's L0 hypervisor
    doesn't forward the PAPR hypercalls to the PR KVM kernel).
    
    Hence, this property is always present in the device tree for pseries
    guests. All KVM guests use it at least to read features via the
    KVM_HC_FEATURES hypercall.
    
    The property is populated by the code returned from the KVM's
    KVM_PPC_GET_PVINFO ioctl; if not implemented in the KVM, QEMU supplies
    code which will fail all hypercall attempts. If QEMU does not create
    the property, and the guest kernel is compiled with
    CONFIG_EPAPR_PARAVIRT (which is normally the case), there is exactly
    the same stub at @epapr_hypercall_start already.
    
    Rather than maintaining this fairly useless stub implementation, it
    makes more sense not to create the property in the device tree in the
    first place if the host kernel does not implement it.
    
    This changes kvmppc_get_hypercall() to return 1 if the host kernel
    does not implement KVM_CAP_PPC_GET_PVINFO. The caller can use it to decide
    on whether to create the property or not.
    
    This changes the pseries machine to not create the property if KVM does
    not implement KVM_PPC_GET_PVINFO. In practice this means that from now
    on the property will not be created if either HV KVM or TCG is used.
    Signed-off-by: NAlexey Kardashevskiy <aik@ozlabs.ru>
    [reworded commit message for clarity --dwg]
    Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
    0ddbd053
kvm.c 70.9 KB