Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2220789/?format=api
{ "id": 2220789, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2220789/?format=api", "web_url": "http://patchwork.ozlabs.org/project/kvm-riscv/patch/20260407-riscv_insn_table-v1-12-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-12-54b4736a1e77@gmail.com>", "date": "2026-04-08T04:46:00", "name": "[12/16] riscv: kvm: Add emulated test csr", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "0a78eb7f20c96dedf48f1ed5ad5d784e7979ff71", "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-12-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/2220789/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2220789/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=tjXxDiwK;\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=AdTWFeMa;\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 4fr9Wv0TnTz211P\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 08 Apr 2026 14:46:51 +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 1wAKoT-00000008Eo0-1Q2l;\n\tWed, 08 Apr 2026 04:46:49 +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-00000008Ecr-2FCG;\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 AFC39446DB;\n\tWed, 8 Apr 2026 04:46:37 +0000 (UTC)", "by smtp.kernel.org (Postfix) with ESMTPS id 899CEC2BCB6;\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 79152FD5F75;\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=uwUSB8ZAuT3CqqF/HkhuOdfQ/AvZ7Qb1ua6aHCvfo4s=; b=tjXxDiwKSSOZ7Y\n\tYrvNiZr2wG3S4emRDABddMvejEo1D94gJMN7n+4zY73JxAEihD6eZC21rG4zp7nuuMuUGAglg7pLm\n\tMuVNdhFE0C1HEZyum4f7IOjWV+rwK/HhHjzLHox8I8lklN8J/RECS44WVv3vJ9goCHrdepZ0+YG3V\n\tL0WCSmiT+jmnkvSb8mcsafNJPiaXF9UQzVi8cgs13KqKM0qSYwOY3pAfLycmRa/HgrRGYBX8gMt3g\n\t7PMk9pclcZDs8ttSfPYJWI83qePbx9acd8j6hxUbJK15gn4bKRqBRXPhRgkal/78g5MuA4eC9c/JG\n\tH7eXGDi2gaIoY04RWsXA==;", "v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1775623597;\n\tbh=WKSjkgsx5mMPbNpqlTOtDYTmkaZDZ/r6A2XwILlbu1g=;\n\th=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From;\n\tb=AdTWFeMaiJoFKFtsYJwPqqWdQIeVQLXSG4FUNi3GAhZKu6VvXLZxshjYum7f2PIbg\n\t Vav7xVk6Cnb2k9I8F6GBHNfHTtBxRwzzuj3LPI1/UejXqcOw1HodJgUQvAuRNsTByJ\n\t HJxRcqJCYCRsIeRqSR0T+9uRQazbyAUuwTbQ4ahFFjVDDpOm7HDlF2HuGr5oyalMnC\n\t lAENgFHbjh7UNP7/YeDHJnjNE0mncKrmCUGUDKp2XgfkHfE9nLhr7QH98zwBaMKUV+\n\t tWj1RNzKkYhRX+AmEi/uXdyW/42uz7qj+DOmftOMc1+UnwEw+hUn01NZfUa5/OUiX4\n\t wAtze9uMviKTA==" ], "From": "Charlie Jenkins via B4 Relay\n <devnull+thecharlesjenkins.gmail.com@kernel.org>", "Date": "Tue, 07 Apr 2026 21:46:00 -0700", "Subject": "[PATCH 12/16] riscv: kvm: Add emulated test csr", "MIME-Version": "1.0", "Message-Id": "<20260407-riscv_insn_table-v1-12-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=5057;\n i=thecharlesjenkins@gmail.com; s=2026030; h=from:subject:message-id;\n bh=VQg+AUDh82m4CKuXNzyUaNZj3tN1rr7u9UwtjA/PLWQ=;\n b=IxK/M+GZdcmuYVvUFn0ArMPQ+R4X1daV9Hr4PnCTImin79iBetPAbnAEEA1OEIMgDDaIizwRR\n 5Dc4RJzaRRQB+rh9z8oU3MyyyUe72p/HUlaGBNatdvZEnDRq12nZQWR", "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_712392_EB3A86A9 ", "X-CRM114-Status": "GOOD ( 17.45 )", "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 To test the riscv kvm implementation\n of emulated CSRs,\n add support to emulate the vsscratch csr when CONFIG_RISCV_KVM_TEST_CSR\n is set. Signed-off-by: Charlie Jenkins --- arch/riscv/Kconfig.debug | 1 +\n arch/riscv/include/asm/kvm_host.h | 10 ++++++++++\n arch/riscv/include/asm/kvm_vcpu_test_csr.h\n | 15 +++++++++++++++ arch/riscv/kvm/Kco [...]\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\nTo test the riscv kvm implementation of emulated CSRs, add support to\nemulate the vsscratch csr when CONFIG_RISCV_KVM_TEST_CSR is set.\n\nSigned-off-by: Charlie Jenkins <thecharlesjenkins@gmail.com>\n---\n arch/riscv/Kconfig.debug | 1 +\n arch/riscv/include/asm/kvm_host.h | 10 ++++++++++\n arch/riscv/include/asm/kvm_vcpu_test_csr.h | 15 +++++++++++++++\n arch/riscv/kvm/Kconfig.debug | 16 ++++++++++++++++\n arch/riscv/kvm/Makefile | 1 +\n arch/riscv/kvm/vcpu_insn.c | 5 +++++\n arch/riscv/kvm/vcpu_test_csr.c | 21 +++++++++++++++++++++\n 7 files changed, 69 insertions(+)", "diff": "diff --git a/arch/riscv/Kconfig.debug b/arch/riscv/Kconfig.debug\nindex eafe17ebf710..be202267da6d 100644\n--- a/arch/riscv/Kconfig.debug\n+++ b/arch/riscv/Kconfig.debug\n@@ -1 +1,2 @@\n source \"arch/riscv/kernel/tests/Kconfig.debug\"\n+source \"arch/riscv/kvm/Kconfig.debug\"\ndiff --git a/arch/riscv/include/asm/kvm_host.h b/arch/riscv/include/asm/kvm_host.h\nindex 24585304c02b..709a1c18ce22 100644\n--- a/arch/riscv/include/asm/kvm_host.h\n+++ b/arch/riscv/include/asm/kvm_host.h\n@@ -183,6 +183,12 @@ struct kvm_vcpu_reset_state {\n \tunsigned long a1;\n };\n \n+#ifdef CONFIG_RISCV_KVM_TEST_CSR\n+struct kvm_test_csr {\n+\tunsigned long val;\n+};\n+#endif\n+\n struct kvm_vcpu_arch {\n \t/* VCPU ran at least once */\n \tbool ran_atleast_once;\n@@ -278,6 +284,10 @@ struct kvm_vcpu_arch {\n \t\tgpa_t shmem;\n \t\tu64 last_steal;\n \t} sta;\n+\n+#ifdef CONFIG_RISCV_KVM_TEST_CSR\n+\tstruct kvm_test_csr test_csr;\n+#endif\n };\n \n /*\ndiff --git a/arch/riscv/include/asm/kvm_vcpu_test_csr.h b/arch/riscv/include/asm/kvm_vcpu_test_csr.h\nnew file mode 100644\nindex 000000000000..a844fccaafc3\n--- /dev/null\n+++ b/arch/riscv/include/asm/kvm_vcpu_test_csr.h\n@@ -0,0 +1,15 @@\n+/* SPDX-License-Identifier: GPL-2.0-only */\n+\n+#ifndef __KVM_VCPU_RISCV_TEST_CSR_H\n+#define __KVM_VCPU_RISCV_TEST_CSR_H\n+\n+#include <asm/kvm_vcpu_insn.h>\n+\n+#define KVM_RISCV_VCPU_TEST_CSR_FUNCS \\\n+\t{.base = CSR_VSSCRATCH,\t.count = 1,\t.func = kvm_riscv_vcpu_test_csr },\n+\n+int kvm_riscv_vcpu_test_csr(struct kvm_vcpu *vcpu, unsigned int csr_num,\n+\t\t\t unsigned long *val, unsigned long new_val,\n+\t\t\t unsigned long wr_mask);\n+\n+#endif /* !__KVM_VCPU_RISCV_TEST_CSR_H */\ndiff --git a/arch/riscv/kvm/Kconfig.debug b/arch/riscv/kvm/Kconfig.debug\nnew file mode 100644\nindex 000000000000..dc76e02120a3\n--- /dev/null\n+++ b/arch/riscv/kvm/Kconfig.debug\n@@ -0,0 +1,16 @@\n+# SPDX-License-Identifier: GPL-2.0-only\n+menu \"arch/riscv/kvm testing\"\n+\n+config RISCV_KVM_TEST_CSR\n+ bool \"Test KVM CSR emulation\"\n+ depends on KVM\n+ default n\n+ help\n+ Enable this option to enable the emulation of a test hypervisor csr.\n+ The KVM test csr is the vsscratch register. Once this is enabled,\n+ reading/writing to the vsscratch register will trap into the host\n+ supervisor and reflect the change.\n+\n+ If unsure, say N.\n+\n+endmenu # \"arch/riscv/kvm testing\"\ndiff --git a/arch/riscv/kvm/Makefile b/arch/riscv/kvm/Makefile\nindex 3b8afb038b35..02fd27ff33eb 100644\n--- a/arch/riscv/kvm/Makefile\n+++ b/arch/riscv/kvm/Makefile\n@@ -36,6 +36,7 @@ kvm-y += vcpu_sbi_sta.o\n kvm-y += vcpu_sbi_system.o\n kvm-$(CONFIG_RISCV_SBI_V01) += vcpu_sbi_v01.o\n kvm-y += vcpu_switch.o\n+kvm-$(CONFIG_RISCV_KVM_TEST_CSR) += vcpu_test_csr.o\n kvm-y += vcpu_timer.o\n kvm-y += vcpu_vector.o\n kvm-y += vm.o\ndiff --git a/arch/riscv/kvm/vcpu_insn.c b/arch/riscv/kvm/vcpu_insn.c\nindex 1d8741d02242..c5a70de4a579 100644\n--- a/arch/riscv/kvm/vcpu_insn.c\n+++ b/arch/riscv/kvm/vcpu_insn.c\n@@ -10,6 +10,8 @@\n #include <asm/cpufeature.h>\n #include <asm/insn.h>\n \n+#include <asm/kvm_vcpu_test_csr.h>\n+\n struct insn_func {\n \tunsigned long mask;\n \tunsigned long match;\n@@ -112,6 +114,9 @@ static int seed_csr_rmw(struct kvm_vcpu *vcpu, unsigned int csr_num,\n static const struct csr_func csr_funcs[] = {\n \tKVM_RISCV_VCPU_AIA_CSR_FUNCS\n \tKVM_RISCV_VCPU_HPMCOUNTER_CSR_FUNCS\n+#ifdef CONFIG_RISCV_KVM_TEST_CSR\n+\tKVM_RISCV_VCPU_TEST_CSR_FUNCS\n+#endif\n \t{ .base = CSR_SEED, .count = 1, .func = seed_csr_rmw },\n };\n \ndiff --git a/arch/riscv/kvm/vcpu_test_csr.c b/arch/riscv/kvm/vcpu_test_csr.c\nnew file mode 100644\nindex 000000000000..b8aa503cdaba\n--- /dev/null\n+++ b/arch/riscv/kvm/vcpu_test_csr.c\n@@ -0,0 +1,21 @@\n+// SPDX-License-Identifier: GPL-2.0\n+\n+#include <linux/kvm_host.h>\n+#include <asm/kvm_vcpu_insn.h>\n+#include <asm/kvm_vcpu_test_csr.h>\n+\n+#define vcpu_to_test_csr(vcpu) (&(vcpu)->arch.test_csr)\n+\n+int kvm_riscv_vcpu_test_csr(struct kvm_vcpu *vcpu, unsigned int csr_num,\n+\t\t\t unsigned long *val, unsigned long new_val,\n+\t\t\t unsigned long wr_mask)\n+{\n+\tstruct kvm_test_csr *test_csr = vcpu_to_test_csr(vcpu);\n+\n+\t*val = test_csr->val;\n+\n+\tif (wr_mask)\n+\t\ttest_csr->val = (test_csr->val & ~wr_mask) | (new_val & wr_mask);\n+\n+\treturn KVM_INSN_CONTINUE_NEXT_SEPC;\n+}\n", "prefixes": [ "12/16" ] }