Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2219121/?format=api
{ "id": 2219121, "url": "http://patchwork.ozlabs.org/api/patches/2219121/?format=api", "web_url": "http://patchwork.ozlabs.org/project/kvm-riscv/patch/20260402132303.6252-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": "<20260402132303.6252-4-fangyu.yu@linux.alibaba.com>", "list_archive_url": null, "date": "2026-04-02T13:23:02", "name": "[v7,3/4] RISC-V: KVM: Detect and expose supported HGATP G-stage modes", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "c8013996d7adad501110d63fab4bf67f9432088d", "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/20260402132303.6252-4-fangyu.yu@linux.alibaba.com/mbox/", "series": [ { "id": 498480, "url": "http://patchwork.ozlabs.org/api/series/498480/?format=api", "web_url": "http://patchwork.ozlabs.org/project/kvm-riscv/list/?series=498480", "date": "2026-04-02T13:23:02", "name": "Support runtime configuration for per-VM's HGATP mode", "version": 7, "mbox": "http://patchwork.ozlabs.org/series/498480/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2219121/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2219121/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=pdrhMRI6;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n secure) header.d=infradead.org header.i=@infradead.org header.a=rsa-sha256\n header.s=desiato.20200630 header.b=OEg7XBN+;\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=rNTwyPKE;\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 4fmjH73gzmz1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 03 Apr 2026 00:23:47 +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 1w8I1R-00000000AUU-3RGY;\n\tThu, 02 Apr 2026 13:23:45 +0000", "from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8I1Q-00000000ATk-1Iz6;\n\tThu, 02 Apr 2026 13:23:44 +0000", "from out30-132.freemail.mail.aliyun.com ([115.124.30.132])\n\tby desiato.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w8I1M-00000002X78-13Oq;\n\tThu, 02 Apr 2026 13:23:43 +0000", "from localhost.localdomain(mailfrom:fangyu.yu@linux.alibaba.com\n fp:SMTPD_---0X0HNDEh_1775136205 cluster:ay36)\n by smtp.aliyun-inc.com;\n Thu, 02 Apr 2026 21:23:25 +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=lMagpSgmuBVaxSbaK9Qy6tZ7aDbzGr34eemf/rzyaMI=; b=pdrhMRI6ojuIl0\n\tgw9RJbJyEKH+EdZ5+Yo5Z5yYBs80zoohjYcIfooun0qGFKKdHdtQ3yI0/L/vH9BDTRz0Jwa02mzqL\n\tB3xG1ACbnbpBRDshbJnan6U3PVoJIHNQWgPdzKPKgegcmWkbIneD/gRsxd268Rj1zX0cxt/1W+JyQ\n\tMXnehWfINr8Urwc7LMPVX+NuxTqYNXOC6kXJeZipML0cLS63WITFcmY89hH6XEgPaE/9h7WBdd+e+\n\tt0sO3EjPRNHBwoomegswK4AEd6prwgEl2HdiqsQ6f1M1H0UfaJRYPHvxhZ+TlheOUg1suaAVv+6k4\n\tDZWiivmLPIvXKIvrjd2Q==;", "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:MIME-Version\n\t:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:\n\tContent-Type:Content-ID:Content-Description;\n\tbh=7ELOJE3JZXFjIllqNR+stpZ1VHthBWOJOaGpIGYae10=; b=OEg7XBN+4MUVSb1YviLmTiYSjB\n\tfxvG9YjMzQRJJnfFosu+qBUwJmptAmBRPyR4/2CFGlHG4rP5FYK8SVxmpBs/6cWFhS8BnHu881DTg\n\tUKv0H3/VISP9OOq9Wa+2LS/Hm9uoR8kxijeiE8z1JpXRcNx1CMZ7HKO6NbMoLqV8BWjn0RUFKXOih\n\tbhdcl/8hlFzJu2nWaQoP4ikT1H3tREHXH+HxA+D7imbqwf+KyrKRa1uJWYO/Q9rNJQPdxSi5LYgMR\n\tSqj2fEe3QOP7WQgMYmMnK2x5NRRQti55w/btILt1iPJxMwqFWNZ/o1Admqu+CnR+rgKauqLGvaLJs\n\tNknnULyA==;", "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=linux.alibaba.com; s=default;\n\tt=1775136207; h=From:To:Subject:Date:Message-Id:MIME-Version;\n\tbh=7ELOJE3JZXFjIllqNR+stpZ1VHthBWOJOaGpIGYae10=;\n\tb=rNTwyPKEO2dCY5Ks6gPWCREB+37aEP7xc58pV3n0wuUff4V0sZ3TuDK2qGwjT2gj/j7Ja86oxelKPYLUopBnOFDi04Us1+a/IZ+FGCzFncOxsGLGpAzJzL/JfzfutG9yypUsefGyuKsXZRHoJBqbiIVu7O26qqw49fk3/kBAKjc=" ], "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_---0X0HNDEh_1775136205;", "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 v7 3/4] RISC-V: KVM: Detect and expose supported HGATP G-stage\n modes", "Date": "Thu, 2 Apr 2026 21:23:02 +0800", "Message-Id": "<20260402132303.6252-4-fangyu.yu@linux.alibaba.com>", "X-Mailer": "git-send-email 2.39.3 (Apple Git-146)", "In-Reply-To": "<20260402132303.6252-1-fangyu.yu@linux.alibaba.com>", "References": "<20260402132303.6252-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-20260402_142340_677816_E3F720EF ", "X-CRM114-Status": "UNSURE ( 8.49 )", "X-CRM114-Notice": "Please train this message.", "X-Spam-Score": "-12.7 (------------)", "X-Spam-Report": "Spam detection software,\n running on the system \"desiato.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 record HGATP.MODE values in a bitmask. Keep tracking the maximum\n supported\n G-stage page table level for existing internal users.\n Content analysis details: (-12.7 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 [115.124.30.132 listed in list.dnswl.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.132 listed in sa-accredit.habeas.com]\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.132 listed in\n sa-trusted.bondedsender.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.132 listed in\n bl.score.senderscore.com]\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 -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.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 -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 record HGATP.MODE values in a\nbitmask. Keep tracking the maximum supported G-stage page table level\nfor 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>\nReviewed-by: Guo Ren <guoren@kernel.org>\n---\n arch/riscv/include/asm/kvm_gstage.h | 11 +++++++++++\n arch/riscv/kvm/gstage.c | 15 ++++++++++++---\n 2 files changed, 23 insertions(+), 3 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..9204e6427d2d 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@@ -317,11 +319,17 @@ void kvm_riscv_gstage_wp_range(struct kvm_gstage *gstage, gpa_t start, gpa_t end\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\tkvm_riscv_gstage_supported_mode_mask |= BIT(HGATP_MODE_SV57X4) |\n+\t\t\t\t\t\t\tBIT(HGATP_MODE_SV48X4) |\n+\t\t\t\t\t\t\tBIT(HGATP_MODE_SV39X4);\n \t\tgoto done;\n \t}\n \n@@ -329,6 +337,8 @@ void __init kvm_riscv_gstage_mode_detect(void)\n \tcsr_write(CSR_HGATP, HGATP_MODE_SV48X4 << HGATP_MODE_SHIFT);\n \tif ((csr_read(CSR_HGATP) >> HGATP_MODE_SHIFT) == HGATP_MODE_SV48X4) {\n \t\tkvm_riscv_gstage_max_pgd_levels = 4;\n+\t\tkvm_riscv_gstage_supported_mode_mask |= BIT(HGATP_MODE_SV48X4) |\n+\t\t\t\t\t\t\tBIT(HGATP_MODE_SV39X4);\n \t\tgoto done;\n \t}\n \n@@ -336,6 +346,7 @@ void __init kvm_riscv_gstage_mode_detect(void)\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\tkvm_riscv_gstage_supported_mode_mask |= BIT(HGATP_MODE_SV39X4);\n \t\tgoto done;\n \t}\n #else /* CONFIG_32BIT */\n@@ -343,13 +354,11 @@ void __init kvm_riscv_gstage_mode_detect(void)\n \tcsr_write(CSR_HGATP, HGATP_MODE_SV32X4 << HGATP_MODE_SHIFT);\n \tif ((csr_read(CSR_HGATP) >> HGATP_MODE_SHIFT) == HGATP_MODE_SV32X4) {\n \t\tkvm_riscv_gstage_max_pgd_levels = 2;\n+\t\tkvm_riscv_gstage_supported_mode_mask |= BIT(HGATP_MODE_SV32X4);\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", "prefixes": [ "v7", "3/4" ] }