From nobody Sat May 4 00:21:05 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500542600603984.3208150034654; Thu, 20 Jul 2017 02:23:20 -0700 (PDT) Received: from localhost ([::1]:36872 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dY7ft-0001w6-MV for importer@patchew.org; Thu, 20 Jul 2017 05:23:13 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48952) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dY7dH-0000Gw-3I for qemu-devel@nongnu.org; Thu, 20 Jul 2017 05:20:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dY7dD-0004W9-Uc for qemu-devel@nongnu.org; Thu, 20 Jul 2017 05:20:31 -0400 Received: from mx1.redhat.com ([209.132.183.28]:41086) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dY7dD-0004UW-OI for qemu-devel@nongnu.org; Thu, 20 Jul 2017 05:20:27 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5ACF22FFC47 for ; Thu, 20 Jul 2017 09:20:24 +0000 (UTC) Received: from t460p.pahim.org.com (ovpn-204-59.brq.redhat.com [10.40.204.59]) by smtp.corp.redhat.com (Postfix) with ESMTP id 43B1917F43; Thu, 20 Jul 2017 09:20:09 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 5ACF22FFC47 Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=apahim@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 5ACF22FFC47 From: Amador Pahim To: qemu-devel@nongnu.org Date: Thu, 20 Jul 2017 11:19:00 +0200 Message-Id: <20170720091902.22476-2-apahim@redhat.com> In-Reply-To: <20170720091902.22476-1-apahim@redhat.com> References: <20170720091902.22476-1-apahim@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Thu, 20 Jul 2017 09:20:24 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v3 1/3] qemu.py: fix is_running() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, ldoktor@redhat.com, ehabkost@redhat.com, Amador Pahim , armbru@redhat.com, mreitz@redhat.com, crosa@redhat.com, famz@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Current implementation is broken. It does not really test if the child process is running. The Popen.returncode will only be set after by a poll(), wait() or communicate(). If the Popen fails to launch a VM, the Popen.returncode will not turn to None by itself. Instead of using Popen.returncode, let's use Popen.poll(), which actually checks if child process has terminated. Signed-off-by: Amador Pahim Reviewed-by: Eduardo Habkost Reviewed-by: Fam Zheng --- scripts/qemu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/qemu.py b/scripts/qemu.py index 880e3e8219..f0fade32bd 100644 --- a/scripts/qemu.py +++ b/scripts/qemu.py @@ -86,7 +86,7 @@ class QEMUMachine(object): raise =20 def is_running(self): - return self._popen and (self._popen.returncode is None) + return self._popen and (self._popen.poll() is None) =20 def exitcode(self): if self._popen is None: --=20 2.13.3 From nobody Sat May 4 00:21:05 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500542539600814.7794706189457; Thu, 20 Jul 2017 02:22:19 -0700 (PDT) Received: from localhost ([::1]:36869 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dY7ez-0001Ej-9r for importer@patchew.org; Thu, 20 Jul 2017 05:22:17 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49045) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dY7dX-0000OZ-3F for qemu-devel@nongnu.org; Thu, 20 Jul 2017 05:20:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dY7dT-0004gJ-U8 for qemu-devel@nongnu.org; Thu, 20 Jul 2017 05:20:47 -0400 Received: from mx1.redhat.com ([209.132.183.28]:51032) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dY7dT-0004fn-Iq for qemu-devel@nongnu.org; Thu, 20 Jul 2017 05:20:43 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 912B07CE1F for ; Thu, 20 Jul 2017 09:20:42 +0000 (UTC) Received: from t460p.pahim.org.com (ovpn-204-59.brq.redhat.com [10.40.204.59]) by smtp.corp.redhat.com (Postfix) with ESMTP id 38C7317DF0; Thu, 20 Jul 2017 09:20:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 912B07CE1F Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=apahim@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 912B07CE1F From: Amador Pahim To: qemu-devel@nongnu.org Date: Thu, 20 Jul 2017 11:19:01 +0200 Message-Id: <20170720091902.22476-3-apahim@redhat.com> In-Reply-To: <20170720091902.22476-1-apahim@redhat.com> References: <20170720091902.22476-1-apahim@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Thu, 20 Jul 2017 09:20:42 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v3 2/3] qemu.py: include debug information on launch error X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, ldoktor@redhat.com, ehabkost@redhat.com, Amador Pahim , armbru@redhat.com, mreitz@redhat.com, crosa@redhat.com, famz@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" When launching a VM, if an exception happens and the VM is not initiated, it is useful to see the qemu command line that was executed and the output of that command. Before the patch: >>> VM =3D qemu.QEMUMachine('../aarch64-softmmu/qemu-system-aarch64') >>> VM.launch() Traceback (most recent call last): File "", line 1, in File "qemu.py", line 137, in launch self._post_launch() File "qemu.py", line 121, in _post_launch self._qmp.accept() File "qmp/qmp.py", line 145, in accept self.__sock, _ =3D self.__sock.accept() File "/usr/lib64/python2.7/socket.py", line 206, in accept sock, addr =3D self._sock.accept() socket.timeout: timed out After the patch: >>> VM =3D qemu.QEMUMachine('../aarch64-softmmu/qemu-system-aarch64') >>> VM.launch() Traceback (most recent call last): File "", line 1, in File "qemu.py", line 156, in launch raise RuntimeError(msg) RuntimeError: Error launching VM. Original Exception: Traceback (most recent call last): File "qemu.py", line 138, in launch self._post_launch() File "qemu.py", line 122, in _post_launch self._qmp.accept() File "qmp/qmp.py", line 145, in accept self.__sock, _ =3D self.__sock.accept() File "/usr/lib64/python2.7/socket.py", line 206, in accept sock, addr =3D self._sock.accept() timeout: timed out Command: /usr/bin/qemu-system-aarch64 -chardev socket,id=3Dmon, path=3D/var/tmp/qemu-23958-monitor.sock -mon chardev=3Dmon,mode=3Dcontr= ol -display none -vga none Output: qemu-system-aarch64: No machine specified, and there is no default Use -machine help to list supported machines Also, if the launch() faces an exception, the 'except' now will use args to fill the debug information. So this patch assigns 'args' earlier, assuring it will be available for the 'except'. Signed-off-by: Amador Pahim Reviewed-by: Fam Zheng --- scripts/qemu.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/scripts/qemu.py b/scripts/qemu.py index f0fade32bd..2707ae7f75 100644 --- a/scripts/qemu.py +++ b/scripts/qemu.py @@ -18,6 +18,7 @@ import os import sys import subprocess import qmp.qmp +import traceback =20 =20 class QEMUMachine(object): @@ -129,17 +130,30 @@ class QEMUMachine(object): '''Launch the VM and establish a QMP connection''' devnull =3D open('/dev/null', 'rb') qemulog =3D open(self._qemu_log_path, 'wb') + args =3D self._wrapper + [self._binary] + self._base_args() + self= .args try: self._pre_launch() - args =3D self._wrapper + [self._binary] + self._base_args() + = self._args self._popen =3D subprocess.Popen(args, stdin=3Ddevnull, stdout= =3Dqemulog, stderr=3Dsubprocess.STDOUT, she= ll=3DFalse) self._post_launch() except: + self._load_io_log() if self.is_running(): self._popen.kill() self._popen.wait() - self._load_io_log() + else: + exc_type, exc_value, exc_traceback =3D sys.exc_info() + msg =3D ('Error launching VM.\n' + 'Original Exception: \n%s' + 'Command:\n%s\n' + 'Output:\n%s\n' % + (''.join(traceback.format_exception(exc_type, + exc_value, + exc_traceback)), + ' '.join(args), + self._iolog)) + self._post_shutdown() + raise RuntimeError(msg) self._post_shutdown() raise =20 --=20 2.13.3 From nobody Sat May 4 00:21:05 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500542555229888.6513749878069; Thu, 20 Jul 2017 02:22:35 -0700 (PDT) Received: from localhost ([::1]:36871 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dY7fE-0001Pc-Ra for importer@patchew.org; Thu, 20 Jul 2017 05:22:32 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49086) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dY7dg-0000Ux-7Y for qemu-devel@nongnu.org; Thu, 20 Jul 2017 05:20:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dY7dd-0004kx-2M for qemu-devel@nongnu.org; Thu, 20 Jul 2017 05:20:56 -0400 Received: from mx1.redhat.com ([209.132.183.28]:51232) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dY7dc-0004kO-Pf for qemu-devel@nongnu.org; Thu, 20 Jul 2017 05:20:53 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C5EBA7A16A for ; Thu, 20 Jul 2017 09:20:51 +0000 (UTC) Received: from t460p.pahim.org.com (ovpn-204-59.brq.redhat.com [10.40.204.59]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1B67517F3B; Thu, 20 Jul 2017 09:20:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com C5EBA7A16A Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=apahim@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com C5EBA7A16A From: Amador Pahim To: qemu-devel@nongnu.org Date: Thu, 20 Jul 2017 11:19:02 +0200 Message-Id: <20170720091902.22476-4-apahim@redhat.com> In-Reply-To: <20170720091902.22476-1-apahim@redhat.com> References: <20170720091902.22476-1-apahim@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Thu, 20 Jul 2017 09:20:51 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v3 3/3] qemu.py: make 'args' public X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, ldoktor@redhat.com, ehabkost@redhat.com, Amador Pahim , armbru@redhat.com, mreitz@redhat.com, crosa@redhat.com, famz@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Let's make args public so users can extend it without feeling like abusing the internal API. Signed-off-by: Amador Pahim Reviewed-by: Fam Zheng --- scripts/qemu.py | 13 +++++++------ tests/qemu-iotests/iotests.py | 18 +++++++++--------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/scripts/qemu.py b/scripts/qemu.py index 2707ae7f75..2c2043f89a 100644 --- a/scripts/qemu.py +++ b/scripts/qemu.py @@ -34,7 +34,7 @@ class QEMUMachine(object): self._qemu_log_path =3D os.path.join(test_dir, name + ".log") self._popen =3D None self._binary =3D binary - self._args =3D list(args) # Force copy args in case we modify them + self.args =3D list(args) # Force copy args in case we modify them self._wrapper =3D wrapper self._events =3D [] self._iolog =3D None @@ -44,8 +44,8 @@ class QEMUMachine(object): # This can be used to add an unused monitor instance. def add_monitor_telnet(self, ip, port): args =3D 'tcp:%s:%d,server,nowait,telnet' % (ip, port) - self._args.append('-monitor') - self._args.append(args) + self.args.append('-monitor') + self.args.append(args) =20 def add_fd(self, fd, fdset, opaque, opts=3D''): '''Pass a file descriptor to the VM''' @@ -55,8 +55,8 @@ class QEMUMachine(object): if opts: options.append(opts) =20 - self._args.append('-add-fd') - self._args.append(','.join(options)) + self.args.append('-add-fd') + self.args.append(','.join(options)) return self =20 def send_fd_scm(self, fd_file_path): @@ -168,7 +168,8 @@ class QEMUMachine(object): =20 exitcode =3D self._popen.wait() if exitcode < 0: - sys.stderr.write('qemu received signal %i: %s\n' % (-exitc= ode, ' '.join(self._args))) + sys.stderr.write('qemu received signal %i: %s\n' % + (-exitcode, ' '.join(self.args))) self._load_io_log() self._post_shutdown() =20 diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py index abcf3c10e2..6925d8841e 100644 --- a/tests/qemu-iotests/iotests.py +++ b/tests/qemu-iotests/iotests.py @@ -150,13 +150,13 @@ class VM(qtest.QEMUQtestMachine): self._num_drives =3D 0 =20 def add_device(self, opts): - self._args.append('-device') - self._args.append(opts) + self.args.append('-device') + self.args.append(opts) return self =20 def add_drive_raw(self, opts): - self._args.append('-drive') - self._args.append(opts) + self.args.append('-drive') + self.args.append(opts) return self =20 def add_drive(self, path, opts=3D'', interface=3D'virtio', format=3Dim= gfmt): @@ -172,17 +172,17 @@ class VM(qtest.QEMUQtestMachine): if opts: options.append(opts) =20 - self._args.append('-drive') - self._args.append(','.join(options)) + self.args.append('-drive') + self.args.append(','.join(options)) self._num_drives +=3D 1 return self =20 def add_blockdev(self, opts): - self._args.append('-blockdev') + self.args.append('-blockdev') if isinstance(opts, str): - self._args.append(opts) + self.args.append(opts) else: - self._args.append(','.join(opts)) + self.args.append(','.join(opts)) return self =20 def pause_drive(self, drive, event=3DNone): --=20 2.13.3