Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2197049/?format=api
{ "id": 2197049, "url": "http://patchwork.ozlabs.org/api/patches/2197049/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260216212952.420120-17-jsnow@redhat.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260216212952.420120-17-jsnow@redhat.com>", "list_archive_url": null, "date": "2026-02-16T21:29:48", "name": "[v7,16/19] scripts: nudge users to use 'run' script for scripts that import qemu.qmp", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "1a451c673672fc32cb02f234487c33e701e61ad1", "submitter": { "id": 64343, "url": "http://patchwork.ozlabs.org/api/people/64343/?format=api", "name": "John Snow", "email": "jsnow@redhat.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260216212952.420120-17-jsnow@redhat.com/mbox/", "series": [ { "id": 492353, "url": "http://patchwork.ozlabs.org/api/series/492353/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=492353", "date": "2026-02-16T21:29:34", "name": "python: drop qemu.qmp from qemu.git tree", "version": 7, "mbox": "http://patchwork.ozlabs.org/series/492353/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2197049/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2197049/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=V+yVw+CC;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fFGH04H4xz1xwC\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 17 Feb 2026 08:33:32 +1100 (AEDT)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1vs6Cn-0001SS-Rc; Mon, 16 Feb 2026 16:32:33 -0500", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <jsnow@redhat.com>) id 1vs6C5-0008CA-Te\n for qemu-devel@nongnu.org; Mon, 16 Feb 2026 16:31:51 -0500", "from us-smtp-delivery-124.mimecast.com ([170.10.129.124])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <jsnow@redhat.com>) id 1vs6C3-00040I-2t\n for qemu-devel@nongnu.org; Mon, 16 Feb 2026 16:31:49 -0500", "from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-677-vs0GDZk3MQ-9d0MOjeHhfw-1; Mon,\n 16 Feb 2026 16:31:43 -0500", "from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id A95BD180057E; Mon, 16 Feb 2026 21:31:40 +0000 (UTC)", "from jsnow-thinkpadp16vgen1.westford.csb (unknown [10.22.88.120])\n by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id 7521B19560A2; Mon, 16 Feb 2026 21:31:35 +0000 (UTC)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1771277506;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=UjdeyrAjANhlscv2cMRZSPPaeWyRzH5DdI+ljAZjH9Q=;\n b=V+yVw+CCFerCv69NAoQwNgnybQMcyJG6va7og9/m48A+xsGNtL5OqM57stvG4YdcCFMcFT\n sH8/4AmX/vBypANR2nUC7PLV2wnC3ThpxNZaLGqcqT5j9F+tCsaqAk46bkAmvqEyklsqV0\n OZ3fKmOnjkgM37syPepEvtaLwL5o/Vc=", "X-MC-Unique": "vs0GDZk3MQ-9d0MOjeHhfw-1", "X-Mimecast-MFC-AGG-ID": "vs0GDZk3MQ-9d0MOjeHhfw_1771277500", "From": "John Snow <jsnow@redhat.com>", "To": "qemu-devel@nongnu.org", "Cc": "qemu-block@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,\n Pierrick Bouvier <pierrick.bouvier@linaro.org>,\n Cleber Rosa <crosa@redhat.com>, Mahmoud Mandour <ma.mandourr@gmail.com>,\n Markus Armbruster <armbru@redhat.com>,\n =?utf-8?q?Marc-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>,\n Thomas Huth <thuth@redhat.com>,\n Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>,\n Kyle Evans <kevans@freebsd.org>, Peter Xu <peterx@redhat.com>, =?utf-8?q?Al?=\n\t=?utf-8?q?ex_Benn=C3=A9e?= <alex.bennee@linaro.org>, =?utf-8?q?Daniel_P=2E_?=\n\t=?utf-8?q?Berrang=C3=A9?= <berrange@redhat.com>,\n Mauro Carvalho Chehab <mchehab+huawei@kernel.org>,\n Yonggang Luo <luoyonggang@gmail.com>, John Snow <jsnow@redhat.com>,\n Warner Losh <imp@bsdimp.com>, Maksim Davydov <davydov-max@yandex-team.ru>,\n Alexandre Iooss <erdnaxe@crans.org>,\n =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>,\n Ed Maste <emaste@freebsd.org>, Kevin Wolf <kwolf@redhat.com>,\n Fabiano Rosas <farosas@suse.de>, Michael Roth <michael.roth@amd.com>,\n Li-Wen Hsu <lwhsu@freebsd.org>, Hanna Reitz <hreitz@redhat.com>", "Subject": "[PATCH v7 16/19] scripts: nudge users to use 'run' script for scripts\n that import qemu.qmp", "Date": "Mon, 16 Feb 2026 16:29:48 -0500", "Message-ID": "<20260216212952.420120-17-jsnow@redhat.com>", "In-Reply-To": "<20260216212952.420120-1-jsnow@redhat.com>", "References": "<20260216212952.420120-1-jsnow@redhat.com>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "X-Scanned-By": "MIMEDefang 3.0 on 10.30.177.12", "Received-SPF": "pass client-ip=170.10.129.124; envelope-from=jsnow@redhat.com;\n helo=us-smtp-delivery-124.mimecast.com", "X-Spam_score_int": "-20", "X-Spam_score": "-2.1", "X-Spam_bar": "--", "X-Spam_report": "(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,\n SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no", "X-Spam_action": "no action", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "qemu development <qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "Now that qmp has to be installed and isn't local, we can no longer offer\na simple forwarder for these scripts (nor path hacks) and hope that it\nworks. Encourage users to use the 'run' script to use these scripts\ninstead.\n\nSigned-off-by: John Snow <jsnow@redhat.com>\nReviewed-by: Daniel P. Berrangé <berrange@redhat.com>\n---\n scripts/compare-machine-types.py | 7 ++-----\n scripts/qmp/qemu-ga-client | 13 ++++++-------\n scripts/qmp/qmp-shell | 13 ++++++-------\n scripts/qmp/qmp-shell-wrap | 13 ++++++-------\n scripts/qmp/qom-fuse | 13 ++++++-------\n scripts/qmp/qom-get | 13 ++++++-------\n scripts/qmp/qom-list | 13 ++++++-------\n scripts/qmp/qom-set | 13 ++++++-------\n scripts/qmp/qom-tree | 13 ++++++-------\n scripts/qmp_helper.py | 9 ++-------\n scripts/render_block_graph.py | 10 +++++++---\n scripts/simplebench/bench_block_job.py | 10 +++++++---\n tests/migration-stress/guestperf/engine.py | 15 ++++++++++++---\n 13 files changed, 78 insertions(+), 77 deletions(-)", "diff": "diff --git a/scripts/compare-machine-types.py b/scripts/compare-machine-types.py\nindex b4f899082a7..83be361f4f6 100755\n--- a/scripts/compare-machine-types.py\n+++ b/scripts/compare-machine-types.py\n@@ -27,19 +27,16 @@\n # along with this program; if not, see <http://www.gnu.org/licenses/>.\n \n import sys\n-from os import path\n from argparse import ArgumentParser, RawTextHelpFormatter, Namespace\n import pandas as pd\n from contextlib import ExitStack\n from typing import Optional, List, Dict, Generator, Tuple, Union, Any, Set\n \n try:\n- qemu_dir = path.abspath(path.dirname(path.dirname(__file__)))\n- sys.path.append(path.join(qemu_dir, 'python'))\n from qemu.machine import QEMUMachine\n except ModuleNotFoundError as exc:\n- print(f\"Module '{exc.name}' not found.\")\n- print(\"Try export PYTHONPATH=top-qemu-dir/python or run from top-qemu-dir\")\n+ print(f\"Module '{exc.name}' not found.\", file=sys.stderr)\n+ print(f\"Try $builddir/run {' '.join(sys.argv)}\", file=sys.stderr)\n sys.exit(1)\n \n \ndiff --git a/scripts/qmp/qemu-ga-client b/scripts/qmp/qemu-ga-client\nindex 56edd0234a6..7ea01b9a11d 100755\n--- a/scripts/qmp/qemu-ga-client\n+++ b/scripts/qmp/qemu-ga-client\n@@ -1,11 +1,10 @@\n #!/usr/bin/env python3\n \n-import os\n import sys\n \n-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))\n-from qemu.utils import qemu_ga_client\n-\n-\n-if __name__ == '__main__':\n- sys.exit(qemu_ga_client.main())\n+print(\n+ \"This script has moved; after running configure,\"\n+ \" please use '$builddir/run qemu-ga-client [...]' instead.\",\n+ file=sys.stderr\n+)\n+sys.exit(1)\ndiff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell\nindex 4a20f97db70..436c4940c26 100755\n--- a/scripts/qmp/qmp-shell\n+++ b/scripts/qmp/qmp-shell\n@@ -1,11 +1,10 @@\n #!/usr/bin/env python3\n \n-import os\n import sys\n \n-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))\n-from qemu.qmp import qmp_shell\n-\n-\n-if __name__ == '__main__':\n- qmp_shell.main()\n+print(\n+ \"This script has moved; after running configure,\"\n+ \" please use '$builddir/run qmp-shell [...]' instead.\",\n+ file=sys.stderr\n+)\n+sys.exit(1)\ndiff --git a/scripts/qmp/qmp-shell-wrap b/scripts/qmp/qmp-shell-wrap\nindex 9e94da114f5..f63dadad1ed 100755\n--- a/scripts/qmp/qmp-shell-wrap\n+++ b/scripts/qmp/qmp-shell-wrap\n@@ -1,11 +1,10 @@\n #!/usr/bin/env python3\n \n-import os\n import sys\n \n-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))\n-from qemu.qmp import qmp_shell\n-\n-\n-if __name__ == '__main__':\n- qmp_shell.main_wrap()\n+print(\n+ \"This script has moved; after running configure,\"\n+ \" please use '$builddir/run qmp-shell-wrap [...]' instead.\",\n+ file=sys.stderr\n+)\n+sys.exit(1)\ndiff --git a/scripts/qmp/qom-fuse b/scripts/qmp/qom-fuse\nindex d453807b273..7d4724a3710 100755\n--- a/scripts/qmp/qom-fuse\n+++ b/scripts/qmp/qom-fuse\n@@ -1,11 +1,10 @@\n #!/usr/bin/env python3\n \n-import os\n import sys\n \n-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))\n-from qemu.utils.qom_fuse import QOMFuse\n-\n-\n-if __name__ == '__main__':\n- sys.exit(QOMFuse.entry_point())\n+print(\n+ \"This script has moved; after running configure,\"\n+ \" please use '$builddir/run qom-fuse [...]' instead.\",\n+ file=sys.stderr\n+)\n+sys.exit(1)\ndiff --git a/scripts/qmp/qom-get b/scripts/qmp/qom-get\nindex 04ebe052e82..96363539624 100755\n--- a/scripts/qmp/qom-get\n+++ b/scripts/qmp/qom-get\n@@ -1,11 +1,10 @@\n #!/usr/bin/env python3\n \n-import os\n import sys\n \n-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))\n-from qemu.utils.qom import QOMGet\n-\n-\n-if __name__ == '__main__':\n- sys.exit(QOMGet.entry_point())\n+print(\n+ \"This script has moved; after running configure,\"\n+ \" please use '$builddir/run qom-get [...]' instead.\",\n+ file=sys.stderr\n+)\n+sys.exit(1)\ndiff --git a/scripts/qmp/qom-list b/scripts/qmp/qom-list\nindex 853b85a8d3f..e988274d1e7 100755\n--- a/scripts/qmp/qom-list\n+++ b/scripts/qmp/qom-list\n@@ -1,11 +1,10 @@\n #!/usr/bin/env python3\n \n-import os\n import sys\n \n-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))\n-from qemu.utils.qom import QOMList\n-\n-\n-if __name__ == '__main__':\n- sys.exit(QOMList.entry_point())\n+print(\n+ \"This script has moved; after running configure,\"\n+ \" please use '$builddir/run qom-list [...]' instead.\",\n+ file=sys.stderr\n+)\n+sys.exit(1)\ndiff --git a/scripts/qmp/qom-set b/scripts/qmp/qom-set\nindex 06820feec42..c2569afdcd7 100755\n--- a/scripts/qmp/qom-set\n+++ b/scripts/qmp/qom-set\n@@ -1,11 +1,10 @@\n #!/usr/bin/env python3\n \n-import os\n import sys\n \n-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))\n-from qemu.utils.qom import QOMSet\n-\n-\n-if __name__ == '__main__':\n- sys.exit(QOMSet.entry_point())\n+print(\n+ \"This script has moved; after running configure,\"\n+ \" please use '$builddir/run qom-set [...]' instead.\",\n+ file=sys.stderr\n+)\n+sys.exit(1)\ndiff --git a/scripts/qmp/qom-tree b/scripts/qmp/qom-tree\nindex 760e172277e..b3cd5ab6f82 100755\n--- a/scripts/qmp/qom-tree\n+++ b/scripts/qmp/qom-tree\n@@ -1,11 +1,10 @@\n #!/usr/bin/env python3\n \n-import os\n import sys\n \n-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))\n-from qemu.utils.qom import QOMTree\n-\n-\n-if __name__ == '__main__':\n- sys.exit(QOMTree.entry_point())\n+print(\n+ \"This script has moved; after running configure,\"\n+ \" please use '$builddir/run qom-tree [...]' instead.\",\n+ file=sys.stderr\n+)\n+sys.exit(1)\ndiff --git a/scripts/qmp_helper.py b/scripts/qmp_helper.py\nindex c1e7e0fd80c..521612fb946 100755\n--- a/scripts/qmp_helper.py\n+++ b/scripts/qmp_helper.py\n@@ -13,17 +13,12 @@\n import sys\n \n from datetime import datetime\n-from os import path as os_path\n \n try:\n- qemu_dir = os_path.abspath(os_path.dirname(os_path.dirname(__file__)))\n- sys.path.append(os_path.join(qemu_dir, 'python'))\n-\n from qemu.qmp.legacy import QEMUMonitorProtocol\n-\n except ModuleNotFoundError as exc:\n- print(f\"Module '{exc.name}' not found.\")\n- print(\"Try export PYTHONPATH=top-qemu-dir/python or run from top-qemu-dir\")\n+ print(f\"Module '{exc.name}' not found.\", file=sys.stderr)\n+ print(f\"Try $builddir/run {' '.join(sys.argv)}\", file=sys.stderr)\n sys.exit(1)\n \n from base64 import b64encode\ndiff --git a/scripts/render_block_graph.py b/scripts/render_block_graph.py\nindex 3e1a2e3fa71..b9079bbed52 100755\n--- a/scripts/render_block_graph.py\n+++ b/scripts/render_block_graph.py\n@@ -24,9 +24,13 @@\n import json\n from graphviz import Digraph\n \n-sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'python'))\n-from qemu.qmp import QMPError\n-from qemu.qmp.legacy import QEMUMonitorProtocol\n+try:\n+ from qemu.qmp import QMPError\n+ from qemu.qmp.legacy import QEMUMonitorProtocol\n+except ModuleNotFoundError as exc:\n+ print(f\"Module '{exc.name}' not found.\", file=sys.stderr)\n+ print(f\"Try $builddir/run {' '.join(sys.argv)}\", file=sys.stderr)\n+ sys.exit(1)\n \n \n def perm(arr):\ndiff --git a/scripts/simplebench/bench_block_job.py b/scripts/simplebench/bench_block_job.py\nindex e575a3af10e..541a47e586d 100755\n--- a/scripts/simplebench/bench_block_job.py\n+++ b/scripts/simplebench/bench_block_job.py\n@@ -25,9 +25,13 @@\n import socket\n import json\n \n-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))\n-from qemu.machine import QEMUMachine\n-from qemu.qmp import ConnectError\n+try:\n+ from qemu.machine import QEMUMachine\n+ from qemu.qmp import ConnectError\n+except ModuleNotFoundError as exc:\n+ print(f\"Module '{exc.name}' not found.\", file=sys.stderr)\n+ print(f\"Try $builddir/run {' '.join(sys.argv)}\", file=sys.stderr)\n+ sys.exit(1)\n \n \n def bench_block_job(cmd, cmd_args, qemu_args):\ndiff --git a/tests/migration-stress/guestperf/engine.py b/tests/migration-stress/guestperf/engine.py\nindex d8462db7653..8d2ed757af3 100644\n--- a/tests/migration-stress/guestperf/engine.py\n+++ b/tests/migration-stress/guestperf/engine.py\n@@ -27,9 +27,18 @@\n from guestperf.report import Report, ReportResult\n from guestperf.timings import TimingRecord, Timings\n \n-sys.path.append(os.path.join(os.path.dirname(__file__),\n- '..', '..', '..', 'python'))\n-from qemu.machine import QEMUMachine\n+try:\n+ from qemu.machine import QEMUMachine\n+except ModuleNotFoundError as exc:\n+ print(\n+ f\"Module '{exc.name}' not found.\\n\"\n+ \"It should be installed as part of the configure-time \"\n+ \"virtual environment in $builddir/pyvenv.\\n\"\n+ \"Try re-running this script as:\\n\"\n+ f\"> $builddir/run {' '.join(sys.argv)}\",\n+ file=sys.stderr\n+ )\n+ sys.exit(1)\n \n # multifd supported compression algorithms\n MULTIFD_CMP_ALGS = (\"zlib\", \"zstd\", \"qpl\", \"uadk\")\n", "prefixes": [ "v7", "16/19" ] }