Message ID | 20191206213433.11305-4-wainersm@redhat.com |
---|---|
State | New |
Headers | show |
Series | python/qemu: New accel module and improvements | expand |
On Fri, Dec 06, 2019 at 04:34:32PM -0500, Wainer dos Santos Moschetta wrote: > 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 <wainersm@redhat.com> > Reviewed-by: Alex Bennée <alex.bennee@linaro.org> > Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > --- > 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 746b7e68f5..9fecffb44b 100644 > --- a/python/qemu/accel.py > +++ b/python/qemu/accel.py > @@ -46,9 +46,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 > -- > 2.21.0 > Reviewed-by: Cleber Rosa <crosa@redhat.com> Tested-by: Cleber Rosa <crosa@redhat.com>
diff --git a/python/qemu/accel.py b/python/qemu/accel.py index 746b7e68f5..9fecffb44b 100644 --- a/python/qemu/accel.py +++ b/python/qemu/accel.py @@ -46,9 +46,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