Wainer dos Santos Moschetta <waine...@redhat.com> writes:
> Currently kvm_available() checks for the presence of kvm module > and, if target and host arches don't mismatch. This patch adds > an 3rd checking: if QEMU binary was compiled with kvm > support. > > Signed-off-by: Wainer dos Santos Moschetta <waine...@redhat.com> Reviewed-by: Alex Bennée <alex.ben...@linaro.org> > --- > python/qemu/accel.py | 27 +++++++++++++++++++++------ > 1 file changed, 21 insertions(+), 6 deletions(-) > > diff --git a/python/qemu/accel.py b/python/qemu/accel.py > index a63ff980a9..1978fbee4e 100644 > --- a/python/qemu/accel.py > +++ b/python/qemu/accel.py > @@ -48,9 +48,24 @@ def list_accel(qemu_bin): > # Skip the first line which is the header. > return [l.strip() for l in lines[1:] if l] > > -def kvm_available(target_arch=None): > - host_arch = os.uname()[4] > - if target_arch and target_arch != host_arch: > - if target_arch != ADDITIONAL_ARCHES.get(host_arch): > - return False > - return os.access("/dev/kvm", os.R_OK | os.W_OK) > +def kvm_available(target_arch=None, qemu_bin=None): > + """ > + Check if KVM is available using the following heuristic: > + - Kernel module is present in the host; > + - Target and host arches don't mismatch; > + - KVM is enabled in the QEMU binary. > + > + @param target_arch (str): target architecture > + @param qemu_bin (str): path to the QEMU binary > + @return True if kvm is available, otherwise False. > + """ > + if not os.access("/dev/kvm", os.R_OK | os.W_OK): > + return False > + if target_arch: > + host_arch = os.uname()[4] > + if target_arch != host_arch: > + if target_arch != ADDITIONAL_ARCHES.get(host_arch): > + return False > + if qemu_bin and "kvm" not in list_accel(qemu_bin): > + return False > + return True -- Alex Bennée