Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2218259/?format=api
{ "id": 2218259, "url": "http://patchwork.ozlabs.org/api/patches/2218259/?format=api", "web_url": "http://patchwork.ozlabs.org/project/kvm-riscv/patch/20260331194202.1722082-8-vipinsh@google.com/", "project": { "id": 70, "url": "http://patchwork.ozlabs.org/api/projects/70/?format=api", "name": "Linux KVM RISC-V", "link_name": "kvm-riscv", "list_id": "kvm-riscv.lists.infradead.org", "list_email": "kvm-riscv@lists.infradead.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "http://lists.infradead.org/pipermail/kvm-riscv/", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260331194202.1722082-8-vipinsh@google.com>", "list_archive_url": null, "date": "2026-03-31T19:42:00", "name": "[v4,7/9] KVM: selftests: Print sticky KVM selftests runner status at bottom", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "95adcd5a312fbc86f8cc101dbc62b5868137b866", "submitter": { "id": 86282, "url": "http://patchwork.ozlabs.org/api/people/86282/?format=api", "name": "Vipin Sharma", "email": "vipinsh@google.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/kvm-riscv/patch/20260331194202.1722082-8-vipinsh@google.com/mbox/", "series": [ { "id": 498244, "url": "http://patchwork.ozlabs.org/api/series/498244/?format=api", "web_url": "http://patchwork.ozlabs.org/project/kvm-riscv/list/?series=498244", "date": "2026-03-31T19:41:53", "name": "KVM: selftests: Create KVM selftests runner", "version": 4, "mbox": "http://patchwork.ozlabs.org/series/498244/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2218259/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2218259/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "\n <kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=JuCsAW3d;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256\n header.s=20251104 header.b=uZm3GbkG;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fldn31gtZz1yCp\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 01 Apr 2026 06:42:31 +1100 (AEDT)", "from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w7eyr-0000000DUU7-2oYk;\n\tTue, 31 Mar 2026 19:42:29 +0000", "from mail-pf1-x449.google.com ([2607:f8b0:4864:20::449])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w7eyo-0000000DURQ-3gSG\n\tfor kvm-riscv@lists.infradead.org;\n\tTue, 31 Mar 2026 19:42:28 +0000", "by mail-pf1-x449.google.com with SMTP id\n d2e1a72fcca58-82a88a2704fso106991b3a.0\n for <kvm-riscv@lists.infradead.org>;\n Tue, 31 Mar 2026 12:42:26 -0700 (PDT)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject:Message-ID:\n\tReferences:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID:\n\tContent-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc\n\t:Resent-Message-ID:List-Owner;\n\tbh=J9BqIiVY+NeaOjcWMKzG5oTixTxMLbzZXDC8nsGO2xQ=; b=JuCsAW3dMwJ1AD1tKEeLyH2zUI\n\tovdCPcznNCncxBGYX2drUgl3zH4wYomxVyoQijcS9hs3ULZd+7VLYtmbXYZTjLpVWu5j0IWxMRZKL\n\tMUQwLNe16s5prG4JqdFSDe7w68IEzYV4amv4Wow9ZEMfRDKFpfg/q6ejXNkWtTHVqB7SL4Dp/w5j2\n\td5DjswYCNDa8ej5ZIR5NUs0tHZikZFUi8EzXXyHnsZl6P+WXLlRXsTIWCsNfDaode1efbA1kvmKox\n\tSNZPw/fuwXduk7p70/Qb2SHJ6xNZrO0QzChqTVmouzsOBbydkHSF5BwiaxFRRj/3PfrZKcdIQgohm\n\tkxONzc/w==;", "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=google.com; s=20251104; t=1774986145; x=1775590945;\n darn=lists.infradead.org;\n h=cc:to:from:subject:message-id:references:mime-version:in-reply-to\n :date:from:to:cc:subject:date:message-id:reply-to;\n bh=EDxS3RLGSrG2H/pkS7vidJMr8Di538wm6I+VqwzPhms=;\n b=uZm3GbkG3QrOu4yQAS1lwze0IiGdsEUPytuJ0iMwscyAgNyTr5GzADZKS1bNSM4npH\n 4FtRIe9EUCuH5+y3BqjfOUfi+cb1Zvlo28nbMa7tomAVQkAiOWzD1vQm3QEnIMPyOK+g\n Vex4MQ7ImEv8XC1zfvUoOn7FzPvsfKdfx8dej8hnZovVTswvXLZS+G3e3AENrI7Utl7d\n gajwrvU4ZCQLr4iAE72vcOui7zhD98PinZ75xgQGlWMpE/h2H5yEHftge5JT7hypmrRe\n OC5bBXd090gCVp0U4EHTB//62NbsxNNAZkE1SjftQxfuBK7n0egL46/MFHmbcylNT5XZ\n HHtw==" ], "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1774986145; x=1775590945;\n h=cc:to:from:subject:message-id:references:mime-version:in-reply-to\n :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;\n bh=EDxS3RLGSrG2H/pkS7vidJMr8Di538wm6I+VqwzPhms=;\n b=r/hZULERu6UZSGyRqNlfbmB98azwRzUp9ayrVv8g1pDHp7gPjra1l+g84D++J7kH+K\n ojOGFUwlClfHKePU3onlmtPOGrPmaXm86XuEOlsb/Z712iRZSbVYJ9dZ5Nyinm0hm7tT\n 29rpmuyZmBUN99BHFGvOn05rced2jdDCBssFHGiGz1ZcUIsHVOyWpH3lMsCz4NPcD5md\n +hLcoIqOWn/t0u3E8ISEuxPsYLpY35Ma29L3Chbc9JLbkSBF7+T3TbDUO6nUmk7+RT3X\n kNlN4Wxsglmb3e5SftR5Oc3Ith30lfN5/M+oOf9LBGU8S4BgeYCsOHCPyjSUx5db77fa\n EGbg==", "X-Forwarded-Encrypted": "i=1;\n AJvYcCVhDk3zyMMixOt61BcjXDqyRkWOpkfNGs6S/lND/naJEKXC26t1qOVU7fUjS/3cTuLrLdvWroUPN4o=@lists.infradead.org", "X-Gm-Message-State": "AOJu0YznqrlHRkLyiPo1szo9k6N68frSucQybEOOF3zMNetdSGtFEQ7N\n\tya4KWbwmcXsOgkoHNG172eHRqfzdhbhCDO0RglnTDR/NBlgGmVkKpg4C4hsa7/ZNwNF+6lKV458\n\tY+oqu37ckSg==", "X-Received": "from pfud21.prod.google.com\n ([2002:a05:6a00:10d5:b0:82a:1d94:6f65])\n (user=vipinsh job=prod-delivery.src-stubby-dispatcher) by\n 2002:a05:6a00:1ca8:b0:82a:15a1:14d\n with SMTP id d2e1a72fcca58-82ceaa5635emr441207b3a.14.1774986145378; Tue, 31\n Mar 2026 12:42:25 -0700 (PDT)", "Date": "Tue, 31 Mar 2026 12:42:00 -0700", "In-Reply-To": "<20260331194202.1722082-1-vipinsh@google.com>", "Mime-Version": "1.0", "References": "<20260331194202.1722082-1-vipinsh@google.com>", "X-Mailer": "git-send-email 2.53.0.1118.gaef5881109-goog", "Message-ID": "<20260331194202.1722082-8-vipinsh@google.com>", "Subject": "[PATCH v4 7/9] KVM: selftests: Print sticky KVM selftests runner\n status at bottom", "From": "Vipin Sharma <vipinsh@google.com>", "To": "kvm@vger.kernel.org, kvmarm@lists.linux.dev, kvm-riscv@lists.infradead.org", "Cc": "seanjc@google.com, pbonzini@redhat.com, borntraeger@linux.ibm.com,\n\tfrankja@linux.ibm.com, imbrenda@linux.ibm.com, anup@brainfault.org,\n\tatish.patra@linux.dev, zhaotianrui@loongson.cn, maobibo@loongson.cn,\n\tchenhuacai@kernel.org, maz@kernel.org, oliver.upton@linux.dev,\n\tajones@ventanamicro.com, Vipin Sharma <vipinsh@google.com>", "X-CRM114-Version": "20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ", "X-CRM114-CacheID": "sfid-20260331_124227_032599_BD712DA5 ", "X-CRM114-Status": "UNSURE ( 9.32 )", "X-CRM114-Notice": "Please train this message.", "X-Spam-Score": "-9.5 (---------)", "X-Spam-Report": "Spam detection software,\n running on the system \"bombadil.infradead.org\",\n has NOT identified this incoming email as spam. The original\n message has been attached to this so you can view it or label\n similar future email. If you have any questions, see\n the administrator of that system for details.\n Content preview: Print current state of the KVM selftest runner during its\n execution. Show it as the bottom most line,\n make it sticky and colored. Provide\n the following information: - Total number of tests selected fo [...]\n Content analysis details: (-9.5 points, 5.0 required)\n pts rule name description\n ---- ----------------------\n --------------------------------------------------\n -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no\n trust\n [2607:f8b0:4864:20:0:0:0:449 listed in]\n [list.dnswl.org]\n -7.5 USER_IN_DEF_DKIM_WL From: address is in the default DKIM welcome-list\n 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record\n -0.0 SPF_PASS SPF: sender matches SPF record\n 0.1 DKIM_SIGNED Message has a DKIM or DK signature,\n not necessarily valid\n -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from\n author's\n domain\n -0.1 DKIM_VALID Message has at least one valid DKIM or DK\n signature\n -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1%\n [score: 0.0000]\n -0.0 DKIMWL_WL_MED DKIMwl.org - Medium trust sender", "X-BeenThere": "kvm-riscv@lists.infradead.org", "X-Mailman-Version": "2.1.34", "Precedence": "list", "List-Id": "<kvm-riscv.lists.infradead.org>", "List-Unsubscribe": "<http://lists.infradead.org/mailman/options/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=unsubscribe>", "List-Archive": "<http://lists.infradead.org/pipermail/kvm-riscv/>", "List-Post": "<mailto:kvm-riscv@lists.infradead.org>", "List-Help": "<mailto:kvm-riscv-request@lists.infradead.org?subject=help>", "List-Subscribe": "<http://lists.infradead.org/mailman/listinfo/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=subscribe>", "Content-Type": "text/plain; charset=\"us-ascii\"", "Content-Transfer-Encoding": "7bit", "Sender": "\"kvm-riscv\" <kvm-riscv-bounces@lists.infradead.org>", "Errors-To": "kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org" }, "content": "Print current state of the KVM selftest runner during its execution.\nShow it as the bottom most line, make it sticky and colored. Provide\nthe following information:\n- Total number of tests selected for run.\n- How many have executed.\n- Total for each end state.\n\nExample:\n\nTotal: 3/3 Passed: 1 Failed: 1 Skipped: 0 Timed Out: 0 No Run: 1\n\nSigned-off-by: Vipin Sharma <vipinsh@google.com>\n---\n .../selftests/kvm/runner/test_runner.py | 21 +++++++++++++++++++\n 1 file changed, 21 insertions(+)", "diff": "diff --git a/tools/testing/selftests/kvm/runner/test_runner.py b/tools/testing/selftests/kvm/runner/test_runner.py\nindex e8e8fd91c1ad..66a3c3711a8a 100644\n--- a/tools/testing/selftests/kvm/runner/test_runner.py\n+++ b/tools/testing/selftests/kvm/runner/test_runner.py\n@@ -15,6 +15,7 @@ logger = logging.getLogger(\"runner\")\n class TestRunner:\n def __init__(self, testcases, args):\n self.tests = []\n+ self.status = {x: 0 for x in SelftestStatus}\n self.output_dir = args.output\n self.jobs = args.jobs\n self.print_stds = {\n@@ -33,9 +34,19 @@ class TestRunner:\n test.run()\n return test\n \n+ def _sticky_update(self):\n+ print(f\"\\r\\033[1mTotal: {self.tests_ran}/{len(self.tests)}\" \\\n+ f\"\\033[32;1m Passed: {self.status[SelftestStatus.PASSED]}\" \\\n+ f\"\\033[31;1m Failed: {self.status[SelftestStatus.FAILED]}\" \\\n+ f\"\\033[33;1m Skipped: {self.status[SelftestStatus.SKIPPED]}\"\\\n+ f\"\\033[91;1m Timed Out: {self.status[SelftestStatus.TIMED_OUT]}\"\\\n+ f\"\\033[34;1m No Run: {self.status[SelftestStatus.NO_RUN]}\\033[0m\",\n+ end=\"\\r\", flush=True)\n+\n def _log_result(self, test_result):\n print_level = self.print_stds.get(test_result.status, \"full\")\n \n+ print(\"\\033[2K\", end=\"\\r\", flush=True)\n if (print_level == \"full\" or print_level == \"stdout\"):\n logger.info(\"*** stdout ***\\n\" + test_result.stdout)\n if (print_level == \"full\" or print_level == \"stderr\"):\n@@ -43,8 +54,16 @@ class TestRunner:\n if (print_level != \"off\"):\n logger.log(test_result.status, f\"[{test_result.status.name}] {test_result.test_path}\")\n \n+ self.status[test_result.status] += 1\n+ # Sticky bottom line\n+ self._sticky_update()\n+\n def start(self):\n ret = 0\n+ self.tests_ran = 0\n+\n+ # Show initial progress\n+ self._sticky_update()\n \n with concurrent.futures.ProcessPoolExecutor(max_workers=self.jobs) as executor:\n all_futures = []\n@@ -54,9 +73,11 @@ class TestRunner:\n \n for future in concurrent.futures.as_completed(all_futures):\n test_result = future.result()\n+ self.tests_ran += 1\n self._log_result(test_result)\n if (test_result.status not in [SelftestStatus.PASSED,\n SelftestStatus.NO_RUN,\n SelftestStatus.SKIPPED]):\n ret = 1\n+ print(\"\\n\")\n return ret\n", "prefixes": [ "v4", "7/9" ] }