{"id":2225766,"url":"http://patchwork.ozlabs.org/api/patches/2225766/?format=json","web_url":"http://patchwork.ozlabs.org/project/kvm-riscv/patch/20260421145451.1597930-3-guoren@kernel.org/","project":{"id":70,"url":"http://patchwork.ozlabs.org/api/projects/70/?format=json","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":"<20260421145451.1597930-3-guoren@kernel.org>","list_archive_url":null,"date":"2026-04-21T14:54:49","name":"[2/3] RISC-V: KVM: AIA: Replace global HGEI count with simple enabled bool","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"f17d4f4730449cb02facc83dd2cf77c568eabfaa","submitter":{"id":75626,"url":"http://patchwork.ozlabs.org/api/people/75626/?format=json","name":"Guo Ren","email":"guoren@kernel.org"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/kvm-riscv/patch/20260421145451.1597930-3-guoren@kernel.org/mbox/","series":[{"id":500831,"url":"http://patchwork.ozlabs.org/api/series/500831/?format=json","web_url":"http://patchwork.ozlabs.org/project/kvm-riscv/list/?series=500831","date":"2026-04-21T14:54:47","name":"RISC-V: KVM: AIA: Convert HGEI management to fully per-HART","version":1,"mbox":"http://patchwork.ozlabs.org/series/500831/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2225766/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2225766/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=KEXbXYAz;\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=sa1jaqy1;\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 4g0QQb2hKmz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 00:55: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 1wFCVx-00000008n5p-2guS;\n\tTue, 21 Apr 2026 14:55: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 1wFCVv-00000008n4v-3LHU;\n\tTue, 21 Apr 2026 14:55:48 +0000","from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58])\n\tby sea.source.kernel.org (Postfix) with ESMTP id CAF9240A5E;\n\tTue, 21 Apr 2026 14:55:46 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPSA id 5E22EC2BCB0;\n\tTue, 21 Apr 2026 14:55:40 +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: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=BxhQogB6WYhC+VJzC+JR3+ifegZJ3Kvf2fqjogwUNWw=; b=KEXbXYAz4kvI7z\n\tc3YrpyBVGxWrLBrLbHvPPRRDwkMFSmP29z1hULSEb5bKcvXXaeB4/DEtxczPBxMXMEBYJ1cpD1kjG\n\tWna4dvqdpMhqjWFk0lQ7ay/8jjORU5wGNTFp1XUmx66UzZdcD7RoxsbuiBTWOqzWv0Il6Fr3A9ZMf\n\ty6a2HEiD6qJwxqwQlItYOZp9TFqigwrlTXDetTMWGiLJf5nwCxlbtpeJ5jr9NwMMI4ClOJxVL15KI\n\tgLxT7N6bIE7LLAzegZfxTArIhUPDZwE7FmiWlB7u0FTyU1ltBzg0+s5UC5L2OqW9dt6qiKZc9e80k\n\tCRhwT3CLeICNr3oWcO+g==;","v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1776783346;\n\tbh=p/wdV82CM5k36GboR0wr9dwL7I5eqEnXaA6SjWQmRfw=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=sa1jaqy1uX4ggAIR1nqF3d8IXx0KZGfwmVA6Z8jfMhMthXvBdFJF0Mr9+UyUY8Moo\n\t 3zTrLZJtIChGJlFtY7o5EFHNQximwR+f2HbTkMlQos1LBTsl6o8xuhIlYqLyYPx4jZ\n\t 2khgDZ6NrK2mTo6XOpQGXa2NbxzYRBAZhErASFbDeMXHOstYf+3roFObXsM2TUSA/H\n\t 7ASK6YFsVrRd3GTXsRQlvACe5U7v6a7uOql3uyPhTcGc9OsN6fCEcCZvB1gxWnaSkY\n\t 8msQfhT63/P+MHfZPj/9fMfiWucnHcmFNgWyfB0J2rzMJHQjaN5HcieUt5WGDZ+OQj\n\t 3fJeW/qyClWuw=="],"From":"guoren@kernel.org","To":"fangyu.yu@linux.alibaba.com,\n\tcp0613@linux.alibaba.com,\n\tinochiama@gmail.com,\n\tme@ziyao.cc,\n\tgaohan@iscas.ac.cn,\n\tanup@brainfault.org,\n\tatish.patra@linux.dev,\n\tpjw@kernel.org,\n\tpalmer@dabbelt.com,\n\talex@ghiti.fr,\n\ttglx@kernel.org,\n\tAlbert Ou <aou@eecs.berkeley.edu>","Cc":"kvm-riscv@lists.infradead.org,\n\tkvm@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\t\"Guo Ren (Alibaba DAMO Academy)\" <guoren@kernel.org>,\n\tlinux-riscv@lists.infradead.org","Subject":"[PATCH 2/3] RISC-V: KVM: AIA: Replace global HGEI count with simple\n enabled bool","Date":"Tue, 21 Apr 2026 10:54:49 -0400","Message-Id":"<20260421145451.1597930-3-guoren@kernel.org>","X-Mailer":"git-send-email 2.40.1","In-Reply-To":"<20260421145451.1597930-1-guoren@kernel.org>","References":"<20260421145451.1597930-1-guoren@kernel.org>","MIME-Version":"1.0","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20260421_075547_878492_F31DAEF4 ","X-CRM114-Status":"GOOD (  15.56  )","X-Spam-Score":"-2.1 (--)","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: \"Guo Ren (Alibaba DAMO Academy)\" <guoren@kernel.org>\n    Now that HGEI line management is fully per-CPU (via struct\n aia_hgei_control::nr_hgei),\n    the global `kvm_riscv_aia_nr_hgei` is no longer needed. Replace it with a\n    simple `bool kvm_riscv_aia_hgei_enabled [...]\n Content analysis details:   (-2.1 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_VALID             Message has at least one valid DKIM or DK\n signature\n -0.1 DKIM_VALID_AU          Message has a valid DKIM or DK signature from\n author's\n                             domain\n  0.1 DKIM_SIGNED            Message has a DKIM or DK signature,\n not necessarily valid\n -1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n                             [score: 0.0000]\n -0.0 DKIMWL_WL_HIGH         DKIMwl.org - High 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":"From: \"Guo Ren (Alibaba DAMO Academy)\" <guoren@kernel.org>\n\nNow that HGEI line management is fully per-CPU (via struct\naia_hgei_control::nr_hgei), the global `kvm_riscv_aia_nr_hgei`\nis no longer needed. Replace it with a simple `bool\nkvm_riscv_aia_hgei_enabled` that only indicates whether HGEI\nsupport is available at all.\n\nSigned-off-by: Guo Ren (Alibaba DAMO Academy) <guoren@kernel.org>\n---\n arch/riscv/include/asm/kvm_aia.h |  2 +-\n arch/riscv/kvm/aia.c             | 18 ++++++++----------\n arch/riscv/kvm/aia_device.c      |  4 ++--\n arch/riscv/kvm/main.c            |  3 +--\n 4 files changed, 12 insertions(+), 15 deletions(-)","diff":"diff --git a/arch/riscv/include/asm/kvm_aia.h b/arch/riscv/include/asm/kvm_aia.h\nindex b04ecdd1a860..e8749ac6bed7 100644\n--- a/arch/riscv/include/asm/kvm_aia.h\n+++ b/arch/riscv/include/asm/kvm_aia.h\n@@ -79,7 +79,7 @@ struct kvm_vcpu_aia {\n \n #define irqchip_in_kernel(k)\t\t((k)->arch.aia.in_kernel)\n \n-extern unsigned int kvm_riscv_aia_nr_hgei;\n+extern bool kvm_riscv_aia_hgei_enabled;\n extern unsigned int kvm_riscv_aia_max_ids;\n DECLARE_STATIC_KEY_FALSE(kvm_riscv_aia_available);\n #define kvm_riscv_aia_available() \\\ndiff --git a/arch/riscv/kvm/aia.c b/arch/riscv/kvm/aia.c\nindex a23729052cfb..70ff1d25dd99 100644\n--- a/arch/riscv/kvm/aia.c\n+++ b/arch/riscv/kvm/aia.c\n@@ -28,7 +28,7 @@ struct aia_hgei_control {\n static DEFINE_PER_CPU(struct aia_hgei_control, aia_hgei);\n static int hgei_parent_irq;\n \n-unsigned int kvm_riscv_aia_nr_hgei;\n+bool kvm_riscv_aia_hgei_enabled;\n unsigned int kvm_riscv_aia_max_ids;\n DEFINE_STATIC_KEY_FALSE(kvm_riscv_aia_available);\n \n@@ -491,7 +491,7 @@ static int aia_hgei_init(void)\n \tstruct irq_domain *domain;\n \n \t/* Skip SGEI interrupt setup for zero guest external interrupts */\n-\tif (!kvm_riscv_aia_nr_hgei)\n+\tif (!kvm_riscv_aia_hgei_enabled)\n \t\tgoto skip_sgei_interrupt;\n \n \t/* Find INTC irq domain */\n@@ -524,7 +524,7 @@ static int aia_hgei_init(void)\n static void aia_hgei_exit(void)\n {\n \t/* Do nothing for zero guest external interrupts */\n-\tif (!kvm_riscv_aia_nr_hgei)\n+\tif (!kvm_riscv_aia_hgei_enabled)\n \t\treturn;\n \n \t/* Free per-CPU SGEI interrupt */\n@@ -631,6 +631,7 @@ int kvm_riscv_aia_init(void)\n {\n \tint rc;\n \tconst struct imsic_global_config *gc;\n+\tunsigned int kvm_riscv_aia_nr_hgei;\n \n \tif (!riscv_isa_extension_available(NULL, SxAIA))\n \t\treturn -ENODEV;\n@@ -641,21 +642,18 @@ int kvm_riscv_aia_init(void)\n \tkvm_riscv_aia_nr_hgei = fls_long(csr_read(CSR_HGEIE));\n \tcsr_write(CSR_HGEIE, 0);\n \tif (kvm_riscv_aia_nr_hgei)\n-\t\tkvm_riscv_aia_nr_hgei--;\n+\t\tkvm_riscv_aia_hgei_enabled = true;\n \n \t/*\n \t * Number of usable HGEI lines should be minimum of per-HART\n \t * IMSIC guest files and number of bits in HGEIE\n \t */\n-\tif (gc)\n-\t\tkvm_riscv_aia_nr_hgei = min((ulong)kvm_riscv_aia_nr_hgei,\n-\t\t\t\t\t    gc->nr_guest_files);\n-\telse\n-\t\tkvm_riscv_aia_nr_hgei = 0;\n+\tif (!gc)\n+\t\tkvm_riscv_aia_hgei_enabled = 0;\n \n \t/* Find number of guest MSI IDs */\n \tkvm_riscv_aia_max_ids = IMSIC_MAX_ID;\n-\tif (gc && kvm_riscv_aia_nr_hgei)\n+\tif (gc && kvm_riscv_aia_hgei_enabled)\n \t\tkvm_riscv_aia_max_ids = gc->nr_guest_ids + 1;\n \n \t/* Initialize guest external interrupt line management */\ndiff --git a/arch/riscv/kvm/aia_device.c b/arch/riscv/kvm/aia_device.c\nindex 3d1e81e2a36b..5b45b1114425 100644\n--- a/arch/riscv/kvm/aia_device.c\n+++ b/arch/riscv/kvm/aia_device.c\n@@ -71,7 +71,7 @@ static int aia_config(struct kvm *kvm, unsigned long type,\n \t\t\t\t * external interrupts (i.e. non-zero\n \t\t\t\t * VS-level IMSIC pages).\n \t\t\t\t */\n-\t\t\t\tif (!kvm_riscv_aia_nr_hgei)\n+\t\t\t\tif (!kvm_riscv_aia_hgei_enabled)\n \t\t\t\t\treturn -EINVAL;\n \t\t\t\tbreak;\n \t\t\tdefault:\n@@ -628,7 +628,7 @@ void kvm_riscv_aia_init_vm(struct kvm *kvm)\n \t */\n \n \t/* Initialize default values in AIA global context */\n-\taia->mode = (kvm_riscv_aia_nr_hgei) ?\n+\taia->mode = (kvm_riscv_aia_hgei_enabled) ?\n \t\tKVM_DEV_RISCV_AIA_MODE_AUTO : KVM_DEV_RISCV_AIA_MODE_EMUL;\n \taia->nr_ids = kvm_riscv_aia_max_ids - 1;\n \taia->nr_sources = 0;\ndiff --git a/arch/riscv/kvm/main.c b/arch/riscv/kvm/main.c\nindex cb8a65273c1f..bcfa139f4871 100644\n--- a/arch/riscv/kvm/main.c\n+++ b/arch/riscv/kvm/main.c\n@@ -169,8 +169,7 @@ static int __init riscv_kvm_init(void)\n \tkvm_info(\"VMID %ld bits available\\n\", kvm_riscv_gstage_vmid_bits());\n \n \tif (kvm_riscv_aia_available())\n-\t\tkvm_info(\"AIA available with %d guest external interrupts\\n\",\n-\t\t\t kvm_riscv_aia_nr_hgei);\n+\t\tkvm_info(\"AIA available with guest external interrupts\\n\");\n \n \tkvm_riscv_setup_vendor_features();\n \n","prefixes":["2/3"]}