From nobody Thu May 2 13:36:51 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 1500482399716997.1694168458507; Wed, 19 Jul 2017 09:39:59 -0700 (PDT) Received: from localhost ([::1]:34240 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dXs0z-0002L3-K5 for importer@patchew.org; Wed, 19 Jul 2017 12:39:57 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58695) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dXs02-0001bc-Dd for qemu-devel@nongnu.org; Wed, 19 Jul 2017 12:38:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dXrzz-0003Am-4T for qemu-devel@nongnu.org; Wed, 19 Jul 2017 12:38:58 -0400 Received: from mx1.redhat.com ([209.132.183.28]:33052) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dXrzy-0003AN-TT for qemu-devel@nongnu.org; Wed, 19 Jul 2017 12:38:55 -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 C0C7A267E3 for ; Wed, 19 Jul 2017 16:31:40 +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 6CDB860606; Wed, 19 Jul 2017 16:31:38 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com C0C7A267E3 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=apahim@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com C0C7A267E3 From: Amador Pahim To: qemu-devel@nongnu.org Date: Wed, 19 Jul 2017 18:31:06 +0200 Message-Id: <20170719163108.26943-2-apahim@redhat.com> In-Reply-To: <20170719163108.26943-1-apahim@redhat.com> References: <20170719163108.26943-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.30]); Wed, 19 Jul 2017 16:31:40 +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 v2 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 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 Thu May 2 13:36:51 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 1500482505768897.6694562959678; Wed, 19 Jul 2017 09:41:45 -0700 (PDT) Received: from localhost ([::1]:34249 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dXs2h-0003JS-0y for importer@patchew.org; Wed, 19 Jul 2017 12:41:43 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59252) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dXs1W-0002kI-CI for qemu-devel@nongnu.org; Wed, 19 Jul 2017 12:40:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dXs1T-0004Nx-Al for qemu-devel@nongnu.org; Wed, 19 Jul 2017 12:40:30 -0400 Received: from mx1.redhat.com ([209.132.183.28]:57436) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dXs1T-0004LW-1u for qemu-devel@nongnu.org; Wed, 19 Jul 2017 12:40: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 0CD9A7AEAF for ; Wed, 19 Jul 2017 16:31:44 +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 22B6317DC5; Wed, 19 Jul 2017 16:31:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 0CD9A7AEAF Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=apahim@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 0CD9A7AEAF From: Amador Pahim To: qemu-devel@nongnu.org Date: Wed, 19 Jul 2017 18:31:07 +0200 Message-Id: <20170719163108.26943-3-apahim@redhat.com> In-Reply-To: <20170719163108.26943-1-apahim@redhat.com> References: <20170719163108.26943-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.25]); Wed, 19 Jul 2017 16:31:44 +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 v2 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 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 Thu May 2 13:36:51 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 1500482329748331.7390830071953; Wed, 19 Jul 2017 09:38:49 -0700 (PDT) Received: from localhost ([::1]:34235 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dXrzr-0001FC-5n for importer@patchew.org; Wed, 19 Jul 2017 12:38:47 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58403) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dXryf-0000TR-TM for qemu-devel@nongnu.org; Wed, 19 Jul 2017 12:37:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dXrye-0002fv-DD for qemu-devel@nongnu.org; Wed, 19 Jul 2017 12:37:33 -0400 Received: from mx1.redhat.com ([209.132.183.28]:56776) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dXrye-0002fA-3e for qemu-devel@nongnu.org; Wed, 19 Jul 2017 12:37:32 -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 DE2764A701 for ; Wed, 19 Jul 2017 16:31:46 +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 65C6260606; Wed, 19 Jul 2017 16:31:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com DE2764A701 Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=apahim@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com DE2764A701 From: Amador Pahim To: qemu-devel@nongnu.org Date: Wed, 19 Jul 2017 18:31:08 +0200 Message-Id: <20170719163108.26943-4-apahim@redhat.com> In-Reply-To: <20170719163108.26943-1-apahim@redhat.com> References: <20170719163108.26943-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.38]); Wed, 19 Jul 2017 16:31:47 +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 v2 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 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 felling 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