Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2220791/?format=api
{ "id": 2220791, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2220791/?format=api", "web_url": "http://patchwork.ozlabs.org/project/kvm-riscv/patch/20260407-riscv_insn_table-v1-13-54b4736a1e77@gmail.com/", "project": { "id": 70, "url": "http://patchwork.ozlabs.org/api/1.1/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": "" }, "msgid": "<20260407-riscv_insn_table-v1-13-54b4736a1e77@gmail.com>", "date": "2026-04-08T04:46:01", "name": "[13/16] KVM: riscv: selftests: Add csr emulation test", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "64478c486966bb69505181908e4e76042bc48d4e", "submitter": { "id": 92521, "url": "http://patchwork.ozlabs.org/api/1.1/people/92521/?format=api", "name": "Charlie Jenkins via B4 Relay", "email": "devnull+thecharlesjenkins.gmail.com@kernel.org" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/kvm-riscv/patch/20260407-riscv_insn_table-v1-13-54b4736a1e77@gmail.com/mbox/", "series": [ { "id": 499063, "url": "http://patchwork.ozlabs.org/api/1.1/series/499063/?format=api", "web_url": "http://patchwork.ozlabs.org/project/kvm-riscv/list/?series=499063", "date": "2026-04-08T04:45:48", "name": "riscv: Generate riscv instruction functions", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/499063/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2220791/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2220791/checks/", "tags": {}, "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=Yd6DKWU1;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=qPXla7AB;\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 4fr9Ww3dKPz20x0\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 08 Apr 2026 14:46:52 +1000 (AEST)", "from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1wAKoU-00000008Epq-1jfe;\n\tWed, 08 Apr 2026 04:46:50 +0000", "from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1wAKoK-00000008Ecs-2IbQ;\n\tWed, 08 Apr 2026 04:46:43 +0000", "from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58])\n\tby sea.source.kernel.org (Postfix) with ESMTP id C16784457C;\n\tWed, 8 Apr 2026 04:46:37 +0000 (UTC)", "by smtp.kernel.org (Postfix) with ESMTPS id 9E523C19424;\n\tWed, 8 Apr 2026 04:46:37 +0000 (UTC)", "from aws-us-west-2-korg-lkml-1.web.codeaurora.org\n (localhost.localdomain [127.0.0.1])\n\tby smtp.lore.kernel.org (Postfix) with ESMTP id 96728FD5F68;\n\tWed, 8 Apr 2026 04:46:37 +0000 (UTC)" ], "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:Reply-To:List-Subscribe:List-Help:\n\tList-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References:\n\tMessage-Id:MIME-Version:Subject:Date:From:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=8beys0eUxPbd974tdwNnQaqKQ/OakarodXs1tQj7qS4=; b=Yd6DKWU1VECdbS\n\t5te6/Jdb86vJmqr6zxbdZFWKIBl/PRh37QHDWHgGA0L6YnDe5BRqLfOjbR9HOTdUQRbuwg9M1DqTp\n\teds7XFMjszrK5YzfiyZnHUNHbqbDkUpzgcHEwSrNOvE0vSxS4/dehG1jMlLfDv1Po68fzmbwtHEy3\n\tWbRJGpXGRj88lkTnFxzttZePatnkmgmgGWhqMqNgpQoZSRTbA/WxodSGHCT/n52J/rps/iWju7Jqf\n\tR0houOnsUV40+uPPixYNE81bvgzFAeM0FHLcU3vAM5ddnIEXBAMKA+3kZur//eIhCpRigMsdiIGhN\n\tUeNy6pDokY+7j0Y9BH+g==;", "v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1775623597;\n\tbh=jD6rZIHBnAc3F0vl+05n+kzI241HhCjoZQe6JKFRv0k=;\n\th=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From;\n\tb=qPXla7AB2EtgSTJDuDTbb3N2x4I3R+WuXNUBuKc9fio1qRsnbJ/2hGSAdyt9QY8Yu\n\t 4kebme7GxctLviD4bdTvRzeeJ9Hn0EuedyVqIff/yR06jk6lL48hZW8xA+lX2bo7B7\n\t 38wF0/6P24n9Xd0DwFxjeBSlOAxxWDa+o7qQ3fTmRwCu3slDJguuap4AG8Nx6zBN2P\n\t JzdhsSKwxskh2g4kso8fB+7OBzsAmM1EDYNibwJpBafSB/1KUZ3MJ4MkIxxsPOgUQg\n\t E1jM9leU9y1HU1mm+P+MjYOFM/oe1u0vppkTzKdNjY4P1zj5YNUguKLxk/oCILebBV\n\t mySlu7XfRIWVw==" ], "From": "Charlie Jenkins via B4 Relay\n <devnull+thecharlesjenkins.gmail.com@kernel.org>", "Date": "Tue, 07 Apr 2026 21:46:01 -0700", "Subject": "[PATCH 13/16] KVM: riscv: selftests: Add csr emulation test", "MIME-Version": "1.0", "Message-Id": "<20260407-riscv_insn_table-v1-13-54b4736a1e77@gmail.com>", "References": "<20260407-riscv_insn_table-v1-0-54b4736a1e77@gmail.com>", "In-Reply-To": "<20260407-riscv_insn_table-v1-0-54b4736a1e77@gmail.com>", "To": "Paul Walmsley <pjw@kernel.org>, Palmer Dabbelt <palmer@dabbelt.com>,\n Alexandre Ghiti <alex@ghiti.fr>, Anup Patel <anup@brainfault.org>,\n Atish Patra <atish.patra@linux.dev>, Conor Dooley <conor@kernel.org>,\n Paolo Bonzini <pbonzini@redhat.com>,\n Andrew Morton <akpm@linux-foundation.org>, Shuah Khan <shuah@kernel.org>", "Cc": "linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org,\n kvm@vger.kernel.org, kvm-riscv@lists.infradead.org,\n linux-kselftest@vger.kernel.org,\n Charlie Jenkins <thecharlesjenkins@gmail.com>", "X-Mailer": "b4 0.14.3", "X-Developer-Signature": "v=1; a=ed25519-sha256; t=1775623594; l=4489;\n i=thecharlesjenkins@gmail.com; s=2026030; h=from:subject:message-id;\n bh=v0o+U8CrXApIBAL0UNGWmAnw7rvZN7PoEjmLiOgCLHI=;\n b=L9BrRpEMB+4Md2H09k6rx8pwpAEyxK+234nKTLHkVZk0ySxZHmX+h0Tj6VImR7JYn89yN3y3m\n pD0YEkL2f1GB5LtQLLU4Pv2EYgMixIOTtyDhwdREFLPv5Va0VsHccYR", "X-Developer-Key": "i=thecharlesjenkins@gmail.com; a=ed25519;\n pk=vpF2USrG+aB6CTbSt34rzJKsAVe/l+GAXo1IomCMETk=", "X-Endpoint-Received": "by B4 Relay for thecharlesjenkins@gmail.com/2026030\n with auth_id=663", "X-Original-From": "Charlie Jenkins <thecharlesjenkins@gmail.com>", "X-CRM114-Version": "20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ", "X-CRM114-CacheID": "sfid-20260407_214640_790561_B6EB2500 ", "X-CRM114-Status": "GOOD ( 13.89 )", "X-Spam-Score": "-0.0 (/)", "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: From: Charlie Jenkins Introduce a kvm test that uses the\n emulated\n test csr to validate that all emulated reads/writes to csrs function as\n expected.\n Signed-off-by: Charlie Jenkins ---\n tools/testing/selftests/kvm/Makefile.kvm\n | 1 + tools/testing/selftests/kvm/riscv/csr_test.c | 123\n +++++++++++++++++++++++++++\n 2 files changed, 124 insertions(+)\n Content analysis details: (-0.0 points, 5.0 required)\n pts rule name description\n ---- ----------------------\n --------------------------------------------------\n -0.0 SPF_PASS SPF: sender matches SPF record\n 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record\n -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from\n envelope-from domain\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 2.1 FREEMAIL_FORGED_REPLYTO Freemail in Reply-To, but not From", "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>", "Reply-To": "thecharlesjenkins@gmail.com", "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": "From: Charlie Jenkins <thecharlesjenkins@gmail.com>\n\nIntroduce a kvm test that uses the emulated test csr to validate that\nall emulated reads/writes to csrs function as expected.\n\nSigned-off-by: Charlie Jenkins <thecharlesjenkins@gmail.com>\n---\n tools/testing/selftests/kvm/Makefile.kvm | 1 +\n tools/testing/selftests/kvm/riscv/csr_test.c | 123 +++++++++++++++++++++++++++\n 2 files changed, 124 insertions(+)", "diff": "diff --git a/tools/testing/selftests/kvm/Makefile.kvm b/tools/testing/selftests/kvm/Makefile.kvm\nindex d402fb339bc0..2eadab48186b 100644\n--- a/tools/testing/selftests/kvm/Makefile.kvm\n+++ b/tools/testing/selftests/kvm/Makefile.kvm\n@@ -202,6 +202,7 @@ TEST_GEN_PROGS_s390 += s390/user_operexec\n TEST_GEN_PROGS_s390 += rseq_test\n \n TEST_GEN_PROGS_riscv = $(TEST_GEN_PROGS_COMMON)\n+TEST_GEN_PROGS_riscv += riscv/csr_test\n TEST_GEN_PROGS_riscv += riscv/sbi_pmu_test\n TEST_GEN_PROGS_riscv += riscv/ebreak_test\n TEST_GEN_PROGS_riscv += riscv/mmio_test\ndiff --git a/tools/testing/selftests/kvm/riscv/csr_test.c b/tools/testing/selftests/kvm/riscv/csr_test.c\nnew file mode 100644\nindex 000000000000..432d043fa1ac\n--- /dev/null\n+++ b/tools/testing/selftests/kvm/riscv/csr_test.c\n@@ -0,0 +1,123 @@\n+// SPDX-License-Identifier: GPL-2.0-only\n+/*\n+ * csr_test.c - Tests the csr functionality.\n+ */\n+#include \"kvm_util.h\"\n+#include \"ucall_common.h\"\n+\n+#define CSR_TEST 0x240\n+#define FP 0x00006000\n+\n+/*\n+ * Use the fcsr as a U-mode accesible csr and compare against the custom 'test'\n+ * hypervisor csr (currently using vsscratch)\n+ */\n+#define test_csr(write, initial, mode)\t\t\t\t\t\t\t\t\\\n+static void test_##write(void)\t\t\t\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\t\t\t\\\n+\tunsigned long hypervisor_result, reference_result, old_hypervisor;\t\t\t\\\n+\tunsigned long mask = 0x15;\t\t\t\t\t\t\t\t\\\n+\tasm volatile (\t\t\t\t\t\t\t\t\t\t\\\n+\t\t\"csrs\tsstatus, %[enable_fp]\\n\"\t\t\t\t\t\t\\\n+\t\t\"csrw\tfcsr, %[init]\\n\"\t\t\t\t\t\t\t\\\n+\t\t#write\"\tzero, fcsr, %[mask]\\n\"\t\t\t\t\t\t\t\\\n+\t\t\"csrr\t%[ref_res], fcsr\\n\"\t\t\t\t\t\t\t\\\n+\t\t: [ref_res] \"=&r\" (reference_result)\t\t\t\t\t\t\\\n+\t\t: [enable_fp] \"r\" (FP), [mask] #mode(mask), [init] \"r\" (initial)\t\t\\\n+\t\t: \"memory\"\t\t\t\t\t\t\t\t\t\\\n+\t);\t\t\t\t\t\t\t\t\t\t\t\\\n+\tasm volatile (\t\t\t\t\t\t\t\t\t\t\\\n+\t\t\"csrw\t%[test_csr], %[init]\\n\"\t\t\t\t\t\t\t\\\n+\t\t#write\"\t%[old], %[test_csr], %[mask]\\n\"\t\t\t\t\t\t\\\n+\t\t\"csrr\t%[hyp_res], %[test_csr]\\n\"\t\t\t\t\t\t\\\n+\t\t: [hyp_res] \"=&r\" (hypervisor_result), [old] \"=&r\" (old_hypervisor)\t\t\\\n+\t\t: [test_csr] \"i\"(CSR_TEST), [mask] #mode(mask), [init] \"r\" (initial)\t\t\\\n+\t\t: \"memory\"\t\t\t\t\t\t\t\t\t\\\n+\t);\t\t\t\t\t\t\t\t\t\t\t\\\n+\t/* Check that writing works */\t\t\t\t\t\t\t\t\\\n+\tGUEST_ASSERT_EQ(reference_result, hypervisor_result);\t\t\t\t\t\\\n+\t/* Check that reading works */\t\t\t\t\t\t\t\t\\\n+\tGUEST_ASSERT_EQ(old_hypervisor, initial);\t\t\t\t\t\t\\\n+\tGUEST_DONE();\t\t\t\t\t\t\t\t\t\t\\\n+}\n+\n+test_csr(csrrw, 0x0, r)\n+test_csr(csrrs, 0x0, r)\n+test_csr(csrrc, 0x15, r)\n+test_csr(csrrwi, 0x0, i)\n+test_csr(csrrsi, 0x0, i)\n+test_csr(csrrci, 0x15, i)\n+\n+static void run(void *guest_code, char *instruction)\n+{\n+\tstruct ucall uc;\n+\tstruct kvm_vm *vm;\n+\tstruct kvm_vcpu *vcpu;\n+\n+\tvm = vm_create_with_one_vcpu(&vcpu, guest_code);\n+\n+\tkvm_create_device(vm, KVM_DEV_TYPE_TEST);\n+\n+\tvcpu_run(vcpu);\n+\n+\tTEST_ASSERT(get_ucall(vcpu, &uc) == UCALL_DONE,\n+\t\t \"CSR instruction '%s' failed: '%s'\", instruction,\n+\t\t uc.buffer);\n+\n+\tkvm_vm_free(vm);\n+}\n+\n+static void check_test_csr_guest(void)\n+{\n+\tunsigned long scause, stvec;\n+\n+\tasm volatile(\n+\t\t\"la\t%[stvec], 1f\\n\"\n+\t\t\"csrw\tstvec, %[stvec]\\n\"\n+\t\t\"csrwi\t%[test_csr], 0x0\\n\"\n+\t\t\"1:\\n\"\n+\t\t\"csrr\t%[scause], scause\\n\"\n+\t\t: [scause] \"=&r\" (scause), [stvec] \"=&r\" (stvec)\n+\t\t: [test_csr] \"i\" (CSR_TEST)\n+\t);\n+\n+\t/* An illegal instruction will be generated if CONFIG_RISCV_KVM_TEST_CSR is not enabled. */\n+\tif (scause == 2)\n+\t\tGUEST_FAIL(\"CONFIG_RISCV_KVM_TEST_CSR not enabled.\\n\");\n+\tGUEST_DONE();\n+}\n+\n+static int check_test_csr(void)\n+{\n+\tstruct ucall uc;\n+\tstruct kvm_vm *vm;\n+\tstruct kvm_vcpu *vcpu;\n+\tint success;\n+\n+\tvm = vm_create_with_one_vcpu(&vcpu, check_test_csr_guest);\n+\tkvm_create_device(vm, KVM_DEV_TYPE_TEST);\n+\n+\tvcpu_run(vcpu);\n+\n+\tsuccess = get_ucall(vcpu, &uc) == UCALL_DONE;\n+\n+\tkvm_vm_free(vm);\n+\n+\treturn success;\n+}\n+\n+int main(void)\n+{\n+\t/* Skip if CONFIG_RISCV_KVM_TEST_CSR not enabled */\n+\tif (!check_test_csr())\n+\t\texit(KSFT_SKIP);\n+\n+\trun(test_csrrw, \"csrrw\");\n+\trun(test_csrrs, \"csrrs\");\n+\trun(test_csrrc, \"csrrc\");\n+\trun(test_csrrwi, \"csrrwi\");\n+\trun(test_csrrsi, \"csrrsi\");\n+\trun(test_csrrci, \"csrrci\");\n+\n+\treturn 0;\n+}\n", "prefixes": [ "13/16" ] }