Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2217724/?format=api
{ "id": 2217724, "url": "http://patchwork.ozlabs.org/api/patches/2217724/?format=api", "web_url": "http://patchwork.ozlabs.org/project/kvm-riscv/patch/20260330122601.22140-4-fangyu.yu@linux.alibaba.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": "<20260330122601.22140-4-fangyu.yu@linux.alibaba.com>", "list_archive_url": null, "date": "2026-03-30T12:26:00", "name": "[v6,3/4] RISC-V: KVM: Detect and expose supported HGATP G-stage modes", "commit_ref": null, "pull_url": null, "state": "changes-requested", "archived": false, "hash": "a0a27248e0dd53942ae504395be76511b0d48a7d", "submitter": { "id": 91416, "url": "http://patchwork.ozlabs.org/api/people/91416/?format=api", "name": null, "email": "fangyu.yu@linux.alibaba.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/kvm-riscv/patch/20260330122601.22140-4-fangyu.yu@linux.alibaba.com/mbox/", "series": [ { "id": 498017, "url": "http://patchwork.ozlabs.org/api/series/498017/?format=api", "web_url": "http://patchwork.ozlabs.org/project/kvm-riscv/list/?series=498017", "date": "2026-03-30T12:25:57", "name": "Support runtime configuration for per-VM's HGATP mode", "version": 6, "mbox": "http://patchwork.ozlabs.org/series/498017/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2217724/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2217724/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=B2OlIEgc;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n unprotected) header.d=linux.alibaba.com header.i=@linux.alibaba.com\n header.a=rsa-sha256 header.s=default header.b=bi2nMf/1;\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 4fkr8m2r7yz1yGH\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 30 Mar 2026 23:26:48 +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 1w7Bhe-0000000BFno-36wU;\n\tMon, 30 Mar 2026 12:26:46 +0000", "from out30-113.freemail.mail.aliyun.com ([115.124.30.113])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w7BhZ-0000000BFjk-2qtz;\n\tMon, 30 Mar 2026 12:26:43 +0000", "from localhost.localdomain(mailfrom:fangyu.yu@linux.alibaba.com\n fp:SMTPD_---0X.zfcJ9_1774873591 cluster:ay36)\n by smtp.aliyun-inc.com;\n Mon, 30 Mar 2026 20:26:32 +0800" ], "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:MIME-Version:References:In-Reply-To:\n\tMessage-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=CdEgEUIb3i+frEPVbk1jz4Hqfqvk22mxlbxqig1dUe0=; b=B2OlIEgcLLaJqF\n\t1UESD9JJepvxNpSNRM2R4hoFcsGIvo242JGK8O7KOj6e6BBfbTF3Jyh73ImTGH5uayzSEVD5jB05B\n\tkYkIqotySSCylq+Sh0fplaa4XI0UaUFALjC6HeKibkA/FsjxfaxDH5t5pwL3K/B7ZxCz4OPFehAyN\n\t69t+s068sf4Rrza3xh1tv8rXCv85b3o9O0xMaaCL8LDzPgNiP0mtqgNxStNijkigkXKSbLxIhiKAy\n\tWLbT3XYZLxXcrdsz6aeyEj012qljubYPMnecqWbn/VS7P3Jbe5R+xLu6HwiEA3/9VO4Yji6vfmDtV\n\tCyFZzavqcNYS0gSvdyow==;", "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=linux.alibaba.com; s=default;\n\tt=1774873594; h=From:To:Subject:Date:Message-Id:MIME-Version;\n\tbh=PT+yx01BbG86omMromavfHwf6ELYE5YcV+gpW/gZMbk=;\n\tb=bi2nMf/1BxcM313nB4MzRBmi2Sfl9uCZX8SyppCIWHvT+qS0R7P2BLKi6OcnH3WIda3ZFX3LeyqxVtk8Y5aP5A6MLbQt2VDy6+4ch79h9oiSFXGWqNIdSY9qDz/860/Ac67FChyurIGmGFVqLQV37lOJ6swx2UHysZ0XhE0m9ok=" ], "X-Alimail-AntiSpam": "\n AC=PASS;BC=-1|-1;BR=01201311R121e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=maildocker-contentspam011083073210;MF=fangyu.yu@linux.alibaba.com;NM=1;PH=DS;RN=18;SR=0;TI=SMTPD_---0X.zfcJ9_1774873591;", "From": "fangyu.yu@linux.alibaba.com", "To": "pbonzini@redhat.com,\n\tcorbet@lwn.net,\n\tanup@brainfault.org,\n\tatish.patra@linux.dev,\n\tpjw@kernel.org,\n\tpalmer@dabbelt.com,\n\taou@eecs.berkeley.edu,\n\talex@ghiti.fr,\n\tskhan@linuxfoundation.org", "Cc": "guoren@kernel.org,\n\tradim.krcmar@oss.qualcomm.com,\n\tandrew.jones@oss.qualcomm.com,\n\tlinux-doc@vger.kernel.org,\n\tkvm@vger.kernel.org,\n\tkvm-riscv@lists.infradead.org,\n\tlinux-riscv@lists.infradead.org,\n\tlinux-kernel@vger.kernel.org,\n\tFangyu Yu <fangyu.yu@linux.alibaba.com>", "Subject": "[PATCH v6 3/4] RISC-V: KVM: Detect and expose supported HGATP G-stage\n modes", "Date": "Mon, 30 Mar 2026 20:26:00 +0800", "Message-Id": "<20260330122601.22140-4-fangyu.yu@linux.alibaba.com>", "X-Mailer": "git-send-email 2.39.3 (Apple Git-146)", "In-Reply-To": "<20260330122601.22140-1-fangyu.yu@linux.alibaba.com>", "References": "<20260330122601.22140-1-fangyu.yu@linux.alibaba.com>", "MIME-Version": "1.0", "X-CRM114-Version": "20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ", "X-CRM114-CacheID": "sfid-20260330_052641_909954_30460013 ", "X-CRM114-Status": "GOOD ( 10.38 )", "X-Spam-Score": "-14.6 (--------------)", "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: Fangyu Yu <fangyu.yu@linux.alibaba.com> Extend\n kvm_riscv_gstage_mode_detect()\n to probe all HGATP.MODE values supported by the host and record them in a\n bitmask. Keep tracking the maximum supported G-stage page table level for\n existing inter [...]\n Content analysis details: (-14.6 points, 5.0 required)\n pts rule name description\n ---- ----------------------\n --------------------------------------------------\n -7.5 USER_IN_DEF_DKIM_WL From: address is in the default DKIM welcome-list\n -7.5 USER_IN_DEF_SPF_WL From: address is in the default SPF 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_EF Message has a valid DKIM or DK signature from\n envelope-from domain\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 1.0 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED RBL: ADMINISTRATOR NOTICE: The\n query to Validity was blocked. See\n https://knowledge.validity.com/hc/en-us/articles/20961730681243\n for more information.\n [115.124.30.113 listed in\n sa-trusted.bondedsender.org]\n 1.0 RCVD_IN_VALIDITY_SAFE_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n Validity was blocked. See\n https://knowledge.validity.com/hc/en-us/articles/20961730681243\n for more information.\n [115.124.30.113 listed in sa-accredit.habeas.com]\n -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no\n trust\n [115.124.30.113 listed in list.dnswl.org]\n 1.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n Validity was blocked. See\n https://knowledge.validity.com/hc/en-us/articles/20961730681243\n for more information.\n [115.124.30.113 listed in\n bl.score.senderscore.com]\n -0.5 ENV_AND_HDR_SPF_MATCH Env and Hdr From used in default SPF WL Match\n 0.0 UNPARSEABLE_RELAY Informational: message has unparseable relay\n lines", "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": "From: Fangyu Yu <fangyu.yu@linux.alibaba.com>\n\nExtend kvm_riscv_gstage_mode_detect() to probe all HGATP.MODE values\nsupported by the host and record them in a bitmask. Keep tracking the\nmaximum supported G-stage page table level for existing internal users.\n\nAlso provide lightweight helpers to retrieve the supported-mode bitmask\nand validate a requested HGATP.MODE against it.\n\nSigned-off-by: Fangyu Yu <fangyu.yu@linux.alibaba.com>\nReviewed-by: Andrew Jones <andrew.jones@oss.qualcomm.com>\n---\n arch/riscv/include/asm/kvm_gstage.h | 11 ++++++++\n arch/riscv/kvm/gstage.c | 43 +++++++++++++++--------------\n 2 files changed, 34 insertions(+), 20 deletions(-)", "diff": "diff --git a/arch/riscv/include/asm/kvm_gstage.h b/arch/riscv/include/asm/kvm_gstage.h\nindex 70d9d483365e..bbf8f45c6563 100644\n--- a/arch/riscv/include/asm/kvm_gstage.h\n+++ b/arch/riscv/include/asm/kvm_gstage.h\n@@ -31,6 +31,7 @@ struct kvm_gstage_mapping {\n #endif\n \n extern unsigned long kvm_riscv_gstage_max_pgd_levels;\n+extern u32 kvm_riscv_gstage_supported_mode_mask;\n \n #define kvm_riscv_gstage_pgd_xbits\t2\n #define kvm_riscv_gstage_pgd_size\t(1UL << (HGATP_PAGE_SHIFT + kvm_riscv_gstage_pgd_xbits))\n@@ -102,4 +103,14 @@ static inline void kvm_riscv_gstage_init(struct kvm_gstage *gstage, struct kvm *\n \tgstage->pgd_levels = kvm->arch.pgd_levels;\n }\n \n+static inline u32 kvm_riscv_get_hgatp_mode_mask(void)\n+{\n+\treturn kvm_riscv_gstage_supported_mode_mask;\n+}\n+\n+static inline bool kvm_riscv_hgatp_mode_is_valid(unsigned long mode)\n+{\n+\treturn kvm_riscv_gstage_supported_mode_mask & BIT(mode);\n+}\n+\n #endif\ndiff --git a/arch/riscv/kvm/gstage.c b/arch/riscv/kvm/gstage.c\nindex 7c4c34bc191b..459041255c14 100644\n--- a/arch/riscv/kvm/gstage.c\n+++ b/arch/riscv/kvm/gstage.c\n@@ -16,6 +16,8 @@ unsigned long kvm_riscv_gstage_max_pgd_levels __ro_after_init = 3;\n #else\n unsigned long kvm_riscv_gstage_max_pgd_levels __ro_after_init = 2;\n #endif\n+/* Bitmask of supported HGATP.MODE encodings (BIT(HGATP_MODE_*)). */\n+u32 kvm_riscv_gstage_supported_mode_mask __ro_after_init;\n \n #define gstage_pte_leaf(__ptep)\t\\\n \t(pte_val(*(__ptep)) & (_PAGE_READ | _PAGE_WRITE | _PAGE_EXEC))\n@@ -315,42 +317,43 @@ void kvm_riscv_gstage_wp_range(struct kvm_gstage *gstage, gpa_t start, gpa_t end\n \t}\n }\n \n+static bool __init kvm_riscv_hgatp_mode_supported(unsigned long mode)\n+{\n+\tcsr_write(CSR_HGATP, mode << HGATP_MODE_SHIFT);\n+\treturn ((csr_read(CSR_HGATP) >> HGATP_MODE_SHIFT) == mode);\n+}\n+\n void __init kvm_riscv_gstage_mode_detect(void)\n {\n+\tkvm_riscv_gstage_supported_mode_mask = 0;\n+\tkvm_riscv_gstage_max_pgd_levels = 0;\n+\n #ifdef CONFIG_64BIT\n-\t/* Try Sv57x4 G-stage mode */\n-\tcsr_write(CSR_HGATP, HGATP_MODE_SV57X4 << HGATP_MODE_SHIFT);\n-\tif ((csr_read(CSR_HGATP) >> HGATP_MODE_SHIFT) == HGATP_MODE_SV57X4) {\n-\t\tkvm_riscv_gstage_max_pgd_levels = 5;\n-\t\tgoto done;\n+\t/* Try Sv39x4 G-stage mode */\n+\tif (kvm_riscv_hgatp_mode_supported(HGATP_MODE_SV39X4)) {\n+\t\tkvm_riscv_gstage_supported_mode_mask |= BIT(HGATP_MODE_SV39X4);\n+\t\tkvm_riscv_gstage_max_pgd_levels = 3;\n \t}\n \n \t/* Try Sv48x4 G-stage mode */\n-\tcsr_write(CSR_HGATP, HGATP_MODE_SV48X4 << HGATP_MODE_SHIFT);\n-\tif ((csr_read(CSR_HGATP) >> HGATP_MODE_SHIFT) == HGATP_MODE_SV48X4) {\n+\tif (kvm_riscv_hgatp_mode_supported(HGATP_MODE_SV48X4)) {\n+\t\tkvm_riscv_gstage_supported_mode_mask |= BIT(HGATP_MODE_SV48X4);\n \t\tkvm_riscv_gstage_max_pgd_levels = 4;\n-\t\tgoto done;\n \t}\n \n-\t/* Try Sv39x4 G-stage mode */\n-\tcsr_write(CSR_HGATP, HGATP_MODE_SV39X4 << HGATP_MODE_SHIFT);\n-\tif ((csr_read(CSR_HGATP) >> HGATP_MODE_SHIFT) == HGATP_MODE_SV39X4) {\n-\t\tkvm_riscv_gstage_max_pgd_levels = 3;\n-\t\tgoto done;\n+\t/* Try Sv57x4 G-stage mode */\n+\tif (kvm_riscv_hgatp_mode_supported(HGATP_MODE_SV57X4)) {\n+\t\tkvm_riscv_gstage_supported_mode_mask |= BIT(HGATP_MODE_SV57X4);\n+\t\tkvm_riscv_gstage_max_pgd_levels = 5;\n \t}\n #else /* CONFIG_32BIT */\n \t/* Try Sv32x4 G-stage mode */\n-\tcsr_write(CSR_HGATP, HGATP_MODE_SV32X4 << HGATP_MODE_SHIFT);\n-\tif ((csr_read(CSR_HGATP) >> HGATP_MODE_SHIFT) == HGATP_MODE_SV32X4) {\n+\tif (kvm_riscv_hgatp_mode_supported(HGATP_MODE_SV32X4)) {\n+\t\tkvm_riscv_gstage_supported_mode_mask |= BIT(HGATP_MODE_SV32X4);\n \t\tkvm_riscv_gstage_max_pgd_levels = 2;\n-\t\tgoto done;\n \t}\n #endif\n \n-\t/* KVM depends on !HGATP_MODE_OFF */\n-\tkvm_riscv_gstage_max_pgd_levels = 0;\n-\n-done:\n \tcsr_write(CSR_HGATP, 0);\n \tkvm_riscv_local_hfence_gvma_all();\n }\n", "prefixes": [ "v6", "3/4" ] }