On the Yocto Project Autobuilder we occasionally see qemu fail to start, most frequently on Fedora 25, because kvm fails to allocate memory. See:
https://bugzilla.yoctoproject.org/show_bug.cgi?id=12058 This patch introduces a fallback path where if the inital qemu command fails and kvm is enabled we retry running qemu with the kvm related options removed from the qemu command line. Signed-off-by: Joshua Lock <joshua.g.l...@intel.com> --- scripts/runqemu | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/scripts/runqemu b/scripts/runqemu index df762709043..b7f8b3c4d55 100755 --- a/scripts/runqemu +++ b/scripts/runqemu @@ -1168,7 +1168,25 @@ class BaseConfig(object): logger.info('Running %s\n' % cmd) process = subprocess.Popen(cmd, shell=True, stderr=subprocess.PIPE) if process.wait(): - logger.error("Failed to run qemu: %s", process.stderr.read().decode()) + # If starting qemu failed and kvm is enabled we try again, with the + # kvm related options removed. This is because we have observed + # failures where kvm is unable to allocate memory (particularly on + # Fedora 25) but where a run withou kvm may be successful. + if self.kvm_enabled: + logger.info("Failed to run qemu: %s\nRetrying without kvm...", + process.stderr.read().decode()) + nokvm_cmd = cmd + nokvm_cmd = nokvm_cmd.replace(' -enable-kvm', '') + nokvm_cmd = nokvm_cmd.replace(',vhost=on', '') + logger.info('Running %s\n' % nokvm_cmd) + process = subprocess.Popen(nokvm_cmd, shell=True, + stderr=subprocess.PIPE) + if process.wait(): + logger.error("Failed to run qemu (with kvm disabled): %s", + process.stderr.read().decode()) + else: + logger.error("Failed to run qemu: %s", + process.stderr.read().decode()) def cleanup(self): if self.cleantap: -- 2.13.6 -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core