[{"id":3680209,"web_url":"http://patchwork.ozlabs.org/comment/3680209/","msgid":"<CAJF2gTSi_j2LsOSm2MEfz0y38O0MAEEqdYufciGtAhxVOC+U2A@mail.gmail.com>","list_archive_url":null,"date":"2026-04-22T03:09:30","subject":"Re: [PATCH 3/3] irqchip/riscv-imsic: Remove global nr_guest_files\n after KVM AIA per-HART conversion","submitter":{"id":75626,"url":"http://patchwork.ozlabs.org/api/people/75626/","name":"Guo Ren","email":"guoren@kernel.org"},"content":"Hi all,\n\nThis patch simply removed `nr_guest_files`, which is suboptimal. For\nv2, I will keep `nr_guest_files` inside `struct imsic_local_config`\n(per-HART) and compute the effective HGEI count in\n`kvm_riscv_aia_enable()` as:\n\nmin(hgctrl->nr_hgei, lc->nr_guest_files)\n\nThis provides a more accurate and robust per-HART configuration.\n\nHere are the updated two patches for your review:\n\n    irqchip/riscv-imsic: Move nr_guest_files to per-HART local config\n\n    With the recent KVM AIA per-HART HGEI conversion, the global\n    nr_guest_files is no longer appropriate. Different HARTs in\n    heterogeneous SoCs may have different numbers of guest interrupt\n    files.\n\n    Move `nr_guest_files` from `struct imsic_global_config` to\n    `struct imsic_local_config`, and compute it per-CPU in\n    imsic_setup_state() based on the actual MMIO guest file region size.\n\n    Update the related comment to reflect that KVM now uses the\n    per-HART value.\n\n    This eliminates the last global assumption about guest files and\n    completes the per-HART conversion series for RISC-V AIA/IMSIC.\n\n    Signed-off-by: Guo Ren (Alibaba DAMO Academy) <guoren@kernel.org>\n\ndiff --git a/drivers/irqchip/irq-riscv-imsic-state.c\nb/drivers/irqchip/irq-riscv-imsic-state.c\nindex e3ed874d89e7..3d455ef43298 100644\n--- a/drivers/irqchip/irq-riscv-imsic-state.c\n+++ b/drivers/irqchip/irq-riscv-imsic-state.c\n@@ -784,7 +784,7 @@ static int __init imsic_parse_fwnode(struct\nfwnode_handle *fwnode,\n\n int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)\n {\n-       u32 i, j, index, nr_parent_irqs, nr_mmios, nr_guest_files,\nnr_handlers = 0;\n+       u32 i, j, index, nr_parent_irqs, nr_mmios, nr_handlers = 0;\n        struct imsic_global_config *global;\n        struct imsic_local_config *local;\n        void __iomem **mmios_va = NULL;\n@@ -878,7 +878,6 @@ int __init imsic_setup_state(struct fwnode_handle\n*fwnode, void *opaque)\n        }\n\n        /* Configure handlers for target CPUs */\n-       global->nr_guest_files = BIT(global->guest_index_bits) - 1;\n        for (i = 0; i < nr_parent_irqs; i++) {\n                rc = imsic_get_parent_hartid(fwnode, i, &hartid);\n                if (rc) {\n@@ -920,13 +919,13 @@ int __init imsic_setup_state(struct\nfwnode_handle *fwnode, void *opaque)\n                local->msi_va = mmios_va[index] + reloff;\n\n                /*\n-                * KVM uses global->nr_guest_files to determine the\navailable guest\n+                * KVM uses local->nr_guest_files to determine the\navailable guest\n                 * interrupt files on each CPU. Take the minimum number of guest\n                 * interrupt files across all CPUs to avoid KVM\nincorrectly allocating\n                 * an unexisted or unmapped guest interrupt file on some CPUs.\n                 */\n-               nr_guest_files = (resource_size(&mmios[index]) -\nreloff) / IMSIC_MMIO_PAGE_SZ - 1;\n-               global->nr_guest_files = min(global->nr_guest_files,\nnr_guest_files);\n+               local->nr_guest_files =\n+                       (resource_size(&mmios[index]) - reloff) /\nIMSIC_MMIO_PAGE_SZ - 1;\n\n                nr_handlers++;\n        }\ndiff --git a/include/linux/irqchip/riscv-imsic.h\nb/include/linux/irqchip/riscv-imsic.h\nindex 4b348836de7a..13e8bd7ff4b4 100644\n--- a/include/linux/irqchip/riscv-imsic.h\n+++ b/include/linux/irqchip/riscv-imsic.h\n@@ -40,6 +40,9 @@\n struct imsic_local_config {\n        phys_addr_t                             msi_pa;\n        void __iomem                            *msi_va;\n+\n+       /* Number of guest interrupt files per core */\n+       u32                                     nr_guest_files;\n };\n\n struct imsic_global_config {\n@@ -68,9 +71,6 @@ struct imsic_global_config {\n        /* Number of guest interrupt identities */\n        u32                                     nr_guest_ids;\n\n-       /* Number of guest interrupt files per core */\n-       u32                                     nr_guest_files;\n-\n        /* Per-CPU IMSIC addresses */\n        struct imsic_local_config __percpu      *local;\n };\n\n------------------------\nThe other one:\n\n    RISC-V: KVM: AIA: Use per-HART IMSIC guest files to compute final HGEI count\n\n    Now that `nr_guest_files` has been moved to `struct imsic_local_config`\n    and is computed per-HART, KVM must respect the actual number of guest\n    interrupt files available on each HART when setting up HGEI.\n\n    In `kvm_riscv_aia_enable()`:\n\n     - Retrieve the per-CPU IMSIC local config\n     - Take `min(hgctrl->nr_hgei, lc->nr_guest_files)` as the final usable\n       HGEI count for this HART\n     - Use the result to initialize `free_bitmap`\n\n    This ensures correct HGEI allocation on heterogeneous RISC-V SoCs\n    where different cores may have different IMSIC guest file counts, and\n    completes the per-HART conversion series.\n\n    Signed-off-by: Guo Ren (Alibaba DAMO Academy) <guoren@kernel.org>\n\ndiff --git a/arch/riscv/kvm/aia.c b/arch/riscv/kvm/aia.c\nindex 70ff1d25dd99..a5f4b7fe1dce 100644\n--- a/arch/riscv/kvm/aia.c\n+++ b/arch/riscv/kvm/aia.c\n@@ -534,6 +534,9 @@ static void aia_hgei_exit(void)\n void kvm_riscv_aia_enable(void)\n {\n        struct aia_hgei_control *hgctrl;\n+       const struct imsic_global_config *gc;\n+       const struct imsic_local_config *lc;\n+       unsigned int nr_hgei;\n\n        if (!kvm_riscv_aia_available())\n                return;\n@@ -547,8 +550,13 @@ void kvm_riscv_aia_enable(void)\n        if (hgctrl->nr_hgei)\n                hgctrl->nr_hgei--;\n\n-       if (hgctrl->nr_hgei) {\n-               hgctrl->free_bitmap = BIT(hgctrl->nr_hgei + 1) - 1;\n+       gc = imsic_get_global_config();\n+       lc = (gc) ? this_cpu_ptr(gc->local) : NULL;\n+       if (lc)\n+               nr_hgei = min(hgctrl->nr_hgei, lc->nr_guest_files);\n+\n+       if (nr_hgei) {\n+               hgctrl->free_bitmap = BIT(nr_hgei + 1) - 1;\n                hgctrl->free_bitmap &= ~BIT(0);\n        } else {\n                hgctrl->free_bitmap = 0;\n\n\nOn Tue, Apr 21, 2026 at 10:55 PM <guoren@kernel.org> wrote:\n>\n> From: \"Guo Ren (Alibaba DAMO Academy)\" <guoren@kernel.org>\n>\n> With the recent KVM AIA changes, HGEI line management is now fully\n> per-CPU (via struct aia_hgei_control::nr_hgei) and the global\n> kvm_riscv_aia_nr_hgei has been replaced by a simple enabled flag.\n> The IMSIC driver no longer needs to compute and enforce a global\n> minimum number of guest interrupt files across all HARTs.\n>\n> Remove:\n>  - `u32 nr_guest_files` from `struct imsic_global_config`\n>  - the initial `BIT(global->guest_index_bits) - 1` assignment\n>  - the entire per-CPU MMIO-based min() calculation and its comment\n>    (which was specifically there to protect old KVM)\n>\n> The per-HART guest file count is already handled locally in\n> `imsic_local_config` during the parent IRQ loop, so this global\n> field was redundant.\n>\n> This completes the cleanup series, eliminates the last global\n> assumption about guest files, and improves support for heterogeneous\n> (big.LITTLE / multi-vendor) RISC-V platforms.\n>\n> Signed-off-by: Guo Ren (Alibaba DAMO Academy) <guoren@kernel.org>\n> ---\n>  drivers/irqchip/irq-riscv-imsic-state.c | 12 +-----------\n>  include/linux/irqchip/riscv-imsic.h     |  3 ---\n>  2 files changed, 1 insertion(+), 14 deletions(-)\n>\n> diff --git a/drivers/irqchip/irq-riscv-imsic-state.c b/drivers/irqchip/irq-riscv-imsic-state.c\n> index e3ed874d89e7..fef27247a34f 100644\n> --- a/drivers/irqchip/irq-riscv-imsic-state.c\n> +++ b/drivers/irqchip/irq-riscv-imsic-state.c\n> @@ -784,7 +784,7 @@ static int __init imsic_parse_fwnode(struct fwnode_handle *fwnode,\n>\n>  int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)\n>  {\n> -       u32 i, j, index, nr_parent_irqs, nr_mmios, nr_guest_files, nr_handlers = 0;\n> +       u32 i, j, index, nr_parent_irqs, nr_mmios, nr_handlers = 0;\n>         struct imsic_global_config *global;\n>         struct imsic_local_config *local;\n>         void __iomem **mmios_va = NULL;\n> @@ -878,7 +878,6 @@ int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)\n>         }\n>\n>         /* Configure handlers for target CPUs */\n> -       global->nr_guest_files = BIT(global->guest_index_bits) - 1;\n>         for (i = 0; i < nr_parent_irqs; i++) {\n>                 rc = imsic_get_parent_hartid(fwnode, i, &hartid);\n>                 if (rc) {\n> @@ -919,15 +918,6 @@ int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)\n>                 local->msi_pa = mmios[index].start + reloff;\n>                 local->msi_va = mmios_va[index] + reloff;\n>\n> -               /*\n> -                * KVM uses global->nr_guest_files to determine the available guest\n> -                * interrupt files on each CPU. Take the minimum number of guest\n> -                * interrupt files across all CPUs to avoid KVM incorrectly allocating\n> -                * an unexisted or unmapped guest interrupt file on some CPUs.\n> -                */\n> -               nr_guest_files = (resource_size(&mmios[index]) - reloff) / IMSIC_MMIO_PAGE_SZ - 1;\n> -               global->nr_guest_files = min(global->nr_guest_files, nr_guest_files);\n> -\n>                 nr_handlers++;\n>         }\n>\n> diff --git a/include/linux/irqchip/riscv-imsic.h b/include/linux/irqchip/riscv-imsic.h\n> index 4b348836de7a..7f3ff5c5ea53 100644\n> --- a/include/linux/irqchip/riscv-imsic.h\n> +++ b/include/linux/irqchip/riscv-imsic.h\n> @@ -68,9 +68,6 @@ struct imsic_global_config {\n>         /* Number of guest interrupt identities */\n>         u32                                     nr_guest_ids;\n>\n> -       /* Number of guest interrupt files per core */\n> -       u32                                     nr_guest_files;\n> -\n>         /* Per-CPU IMSIC addresses */\n>         struct imsic_local_config __percpu      *local;\n>  };\n> --\n> 2.40.1\n>\n\n\n--\nBest Regards\n Guo Ren","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=cKLnyEYO;\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=Avp5W5po;\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 4g0kjb2bmyz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 13:09: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 1wFNyF-00000009X8l-2Jvx;\n\tWed, 22 Apr 2026 03:09:47 +0000","from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1wFNyE-00000009X8V-1LXb\n\tfor kvm-riscv@lists.infradead.org;\n\tWed, 22 Apr 2026 03:09:46 +0000","from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58])\n\tby tor.source.kernel.org (Postfix) with ESMTP id B293360172\n\tfor <kvm-riscv@lists.infradead.org>; Wed, 22 Apr 2026 03:09:44 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPSA id 24A1CC2BCF7\n\tfor <kvm-riscv@lists.infradead.org>; Wed, 22 Apr 2026 03:09:44 +0000 (UTC)","by mail-wr1-f51.google.com with SMTP id\n ffacd0b85a97d-43d03db7f87so3309551f8f.3\n        for <kvm-riscv@lists.infradead.org>;\n Tue, 21 Apr 2026 20:09:44 -0700 (PDT)"],"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:Cc:To:Subject:Message-ID:Date:From:\n\tIn-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=zFd9P4brjM6Qo3wZnCZrxzLUofoqHPDHQZ+wvo0+DJc=; b=cKLnyEYOjsqykc\n\tnavfAaea/RnJOsSe8DMvbUn8qAA7vfYcVE6BlS3DuaWbToZmVwPWRTRSXKscwpArwJB+nTtbEiioC\n\ts2csMIj/3Mi+zGUo97DY+SJBMow5tHNgSLvbT0rIB/I6WlyVYqXgK/TPNJRjPNUmADTmqi5Hi7qKY\n\tzCCAWnXuXotUKJRKaSRiMW7Fhc6+NPilOFurAkFygmHx8cACC/GQwDxANOJu8Lw2RTnyZCBGIFZkz\n\t8D1Unl8cRUb6KH+14vC216+19qAun8BSB18X0y/3fGnqNTDBCVQZJJ9dmZKJT3BLM8tXSBmWRECAs\n\tdTIovWYBYK2C8dWWo9gg==;","v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1776827384;\n\tbh=ZcIggO6rHVKXrbMaaBNS5ZInxgMloGHCtV37gIxmurY=;\n\th=References:In-Reply-To:From:Date:Subject:To:Cc:From;\n\tb=Avp5W5poptctvjKCTAqiq6a8TNgR7vR/ZVQlrL42Da/YTuiAR/UZ9cGkt9hflaAGO\n\t o/KDC2c6HZ5brkUSxcfaLJnftVULK2tj64go9WdsMKpS9lp/5IcXDrh5qSRGFPNFnR\n\t VeGA8HMhYwnfRW29qgX3DbecftA6sy7nh19fkmUVV8XFnX/USSPn9XG3qpxKhPsQDr\n\t mRMtOm6RVQBKhNH/IXrJhFGZ1sn6bwZAVcknvroHBK+VZ6RMcorm2BdevpoWYGhHLz\n\t DfcZKHzFD1IPBHBSyD2P+NunT9DX5EMW0P0HZzqesOTB114Qeo5OpqZ/ul1i9UhOuW\n\t hDc6hZkAFYGgA=="],"X-Gm-Message-State":"AOJu0Yy/MhuKEHv4maE/Ks1hVNmAEYbPdhUVdPIqKS6xssDyyy3KfW6B\n\tl/If1pse43+cCMtJViQQukJ4cXJzkIfarHMPU938Rn7kAfhmfZ+Fima/t7Qu8OhQy8t20WQHbMw\n\tkDxAuye3caGEkgX6eqohW2PcOk70qMmw=","X-Received":"by 2002:a05:6000:144d:b0:43c:fe0e:5bbc with SMTP id\n ffacd0b85a97d-43fe3dc59a6mr29815285f8f.19.1776827382437; Tue, 21 Apr 2026\n 20:09:42 -0700 (PDT)","MIME-Version":"1.0","References":"<20260421145451.1597930-1-guoren@kernel.org>\n <20260421145451.1597930-4-guoren@kernel.org>","In-Reply-To":"<20260421145451.1597930-4-guoren@kernel.org>","From":"Guo Ren <guoren@kernel.org>","Date":"Wed, 22 Apr 2026 11:09:30 +0800","X-Gmail-Original-Message-ID":"\n <CAJF2gTSi_j2LsOSm2MEfz0y38O0MAEEqdYufciGtAhxVOC+U2A@mail.gmail.com>","X-Gm-Features":"AQROBzBZe1JTgYQdvIW5sUIzIHV5HT_GKcTOIRFGW7PWkgVOz-gmNFks7hiURc0","Message-ID":"\n <CAJF2gTSi_j2LsOSm2MEfz0y38O0MAEEqdYufciGtAhxVOC+U2A@mail.gmail.com>","Subject":"Re: [PATCH 3/3] irqchip/riscv-imsic: Remove global nr_guest_files\n after KVM AIA per-HART conversion","To":"fangyu.yu@linux.alibaba.com, cp0613@linux.alibaba.com,\n inochiama@gmail.com,\n\tme@ziyao.cc, gaohan@iscas.ac.cn, anup@brainfault.org, atish.patra@linux.dev,\n\tpjw@kernel.org, palmer@dabbelt.com, alex@ghiti.fr, tglx@kernel.org,\n\tAlbert Ou <aou@eecs.berkeley.edu>","Cc":"kvm-riscv@lists.infradead.org, kvm@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org","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=\"utf-8\"","Content-Transfer-Encoding":"base64","Sender":"\"kvm-riscv\" <kvm-riscv-bounces@lists.infradead.org>","Errors-To":"kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}},{"id":3680382,"web_url":"http://patchwork.ozlabs.org/comment/3680382/","msgid":"<CAAhSdy2RBs15ndXbUMs=k7fw8CH_5+b9k=+o6SNzxpvb-YKDig@mail.gmail.com>","list_archive_url":null,"date":"2026-04-22T09:44:37","subject":"Re: [PATCH 3/3] irqchip/riscv-imsic: Remove global nr_guest_files\n after KVM AIA per-HART conversion","submitter":{"id":33417,"url":"http://patchwork.ozlabs.org/api/people/33417/","name":"Anup Patel","email":"anup@brainfault.org"},"content":"On Wed, Apr 22, 2026 at 8:39 AM Guo Ren <guoren@kernel.org> wrote:\n>\n> Hi all,\n>\n> This patch simply removed `nr_guest_files`, which is suboptimal. For\n> v2, I will keep `nr_guest_files` inside `struct imsic_local_config`\n> (per-HART) and compute the effective HGEI count in\n> `kvm_riscv_aia_enable()` as:\n>\n> min(hgctrl->nr_hgei, lc->nr_guest_files)\n\nYes, I was going to comment the exact same thing. Good that you\nrealized it early.\n\nRegards,\nAnup\n\n>\n> This provides a more accurate and robust per-HART configuration.\n>\n> Here are the updated two patches for your review:\n>\n>     irqchip/riscv-imsic: Move nr_guest_files to per-HART local config\n>\n>     With the recent KVM AIA per-HART HGEI conversion, the global\n>     nr_guest_files is no longer appropriate. Different HARTs in\n>     heterogeneous SoCs may have different numbers of guest interrupt\n>     files.\n>\n>     Move `nr_guest_files` from `struct imsic_global_config` to\n>     `struct imsic_local_config`, and compute it per-CPU in\n>     imsic_setup_state() based on the actual MMIO guest file region size.\n>\n>     Update the related comment to reflect that KVM now uses the\n>     per-HART value.\n>\n>     This eliminates the last global assumption about guest files and\n>     completes the per-HART conversion series for RISC-V AIA/IMSIC.\n>\n>     Signed-off-by: Guo Ren (Alibaba DAMO Academy) <guoren@kernel.org>\n>\n> diff --git a/drivers/irqchip/irq-riscv-imsic-state.c\n> b/drivers/irqchip/irq-riscv-imsic-state.c\n> index e3ed874d89e7..3d455ef43298 100644\n> --- a/drivers/irqchip/irq-riscv-imsic-state.c\n> +++ b/drivers/irqchip/irq-riscv-imsic-state.c\n> @@ -784,7 +784,7 @@ static int __init imsic_parse_fwnode(struct\n> fwnode_handle *fwnode,\n>\n>  int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)\n>  {\n> -       u32 i, j, index, nr_parent_irqs, nr_mmios, nr_guest_files,\n> nr_handlers = 0;\n> +       u32 i, j, index, nr_parent_irqs, nr_mmios, nr_handlers = 0;\n>         struct imsic_global_config *global;\n>         struct imsic_local_config *local;\n>         void __iomem **mmios_va = NULL;\n> @@ -878,7 +878,6 @@ int __init imsic_setup_state(struct fwnode_handle\n> *fwnode, void *opaque)\n>         }\n>\n>         /* Configure handlers for target CPUs */\n> -       global->nr_guest_files = BIT(global->guest_index_bits) - 1;\n>         for (i = 0; i < nr_parent_irqs; i++) {\n>                 rc = imsic_get_parent_hartid(fwnode, i, &hartid);\n>                 if (rc) {\n> @@ -920,13 +919,13 @@ int __init imsic_setup_state(struct\n> fwnode_handle *fwnode, void *opaque)\n>                 local->msi_va = mmios_va[index] + reloff;\n>\n>                 /*\n> -                * KVM uses global->nr_guest_files to determine the\n> available guest\n> +                * KVM uses local->nr_guest_files to determine the\n> available guest\n>                  * interrupt files on each CPU. Take the minimum number of guest\n>                  * interrupt files across all CPUs to avoid KVM\n> incorrectly allocating\n>                  * an unexisted or unmapped guest interrupt file on some CPUs.\n>                  */\n> -               nr_guest_files = (resource_size(&mmios[index]) -\n> reloff) / IMSIC_MMIO_PAGE_SZ - 1;\n> -               global->nr_guest_files = min(global->nr_guest_files,\n> nr_guest_files);\n> +               local->nr_guest_files =\n> +                       (resource_size(&mmios[index]) - reloff) /\n> IMSIC_MMIO_PAGE_SZ - 1;\n>\n>                 nr_handlers++;\n>         }\n> diff --git a/include/linux/irqchip/riscv-imsic.h\n> b/include/linux/irqchip/riscv-imsic.h\n> index 4b348836de7a..13e8bd7ff4b4 100644\n> --- a/include/linux/irqchip/riscv-imsic.h\n> +++ b/include/linux/irqchip/riscv-imsic.h\n> @@ -40,6 +40,9 @@\n>  struct imsic_local_config {\n>         phys_addr_t                             msi_pa;\n>         void __iomem                            *msi_va;\n> +\n> +       /* Number of guest interrupt files per core */\n> +       u32                                     nr_guest_files;\n>  };\n>\n>  struct imsic_global_config {\n> @@ -68,9 +71,6 @@ struct imsic_global_config {\n>         /* Number of guest interrupt identities */\n>         u32                                     nr_guest_ids;\n>\n> -       /* Number of guest interrupt files per core */\n> -       u32                                     nr_guest_files;\n> -\n>         /* Per-CPU IMSIC addresses */\n>         struct imsic_local_config __percpu      *local;\n>  };\n>\n> ------------------------\n> The other one:\n>\n>     RISC-V: KVM: AIA: Use per-HART IMSIC guest files to compute final HGEI count\n>\n>     Now that `nr_guest_files` has been moved to `struct imsic_local_config`\n>     and is computed per-HART, KVM must respect the actual number of guest\n>     interrupt files available on each HART when setting up HGEI.\n>\n>     In `kvm_riscv_aia_enable()`:\n>\n>      - Retrieve the per-CPU IMSIC local config\n>      - Take `min(hgctrl->nr_hgei, lc->nr_guest_files)` as the final usable\n>        HGEI count for this HART\n>      - Use the result to initialize `free_bitmap`\n>\n>     This ensures correct HGEI allocation on heterogeneous RISC-V SoCs\n>     where different cores may have different IMSIC guest file counts, and\n>     completes the per-HART conversion series.\n>\n>     Signed-off-by: Guo Ren (Alibaba DAMO Academy) <guoren@kernel.org>\n>\n> diff --git a/arch/riscv/kvm/aia.c b/arch/riscv/kvm/aia.c\n> index 70ff1d25dd99..a5f4b7fe1dce 100644\n> --- a/arch/riscv/kvm/aia.c\n> +++ b/arch/riscv/kvm/aia.c\n> @@ -534,6 +534,9 @@ static void aia_hgei_exit(void)\n>  void kvm_riscv_aia_enable(void)\n>  {\n>         struct aia_hgei_control *hgctrl;\n> +       const struct imsic_global_config *gc;\n> +       const struct imsic_local_config *lc;\n> +       unsigned int nr_hgei;\n>\n>         if (!kvm_riscv_aia_available())\n>                 return;\n> @@ -547,8 +550,13 @@ void kvm_riscv_aia_enable(void)\n>         if (hgctrl->nr_hgei)\n>                 hgctrl->nr_hgei--;\n>\n> -       if (hgctrl->nr_hgei) {\n> -               hgctrl->free_bitmap = BIT(hgctrl->nr_hgei + 1) - 1;\n> +       gc = imsic_get_global_config();\n> +       lc = (gc) ? this_cpu_ptr(gc->local) : NULL;\n> +       if (lc)\n> +               nr_hgei = min(hgctrl->nr_hgei, lc->nr_guest_files);\n> +\n> +       if (nr_hgei) {\n> +               hgctrl->free_bitmap = BIT(nr_hgei + 1) - 1;\n>                 hgctrl->free_bitmap &= ~BIT(0);\n>         } else {\n>                 hgctrl->free_bitmap = 0;\n>\n>\n> On Tue, Apr 21, 2026 at 10:55 PM <guoren@kernel.org> wrote:\n> >\n> > From: \"Guo Ren (Alibaba DAMO Academy)\" <guoren@kernel.org>\n> >\n> > With the recent KVM AIA changes, HGEI line management is now fully\n> > per-CPU (via struct aia_hgei_control::nr_hgei) and the global\n> > kvm_riscv_aia_nr_hgei has been replaced by a simple enabled flag.\n> > The IMSIC driver no longer needs to compute and enforce a global\n> > minimum number of guest interrupt files across all HARTs.\n> >\n> > Remove:\n> >  - `u32 nr_guest_files` from `struct imsic_global_config`\n> >  - the initial `BIT(global->guest_index_bits) - 1` assignment\n> >  - the entire per-CPU MMIO-based min() calculation and its comment\n> >    (which was specifically there to protect old KVM)\n> >\n> > The per-HART guest file count is already handled locally in\n> > `imsic_local_config` during the parent IRQ loop, so this global\n> > field was redundant.\n> >\n> > This completes the cleanup series, eliminates the last global\n> > assumption about guest files, and improves support for heterogeneous\n> > (big.LITTLE / multi-vendor) RISC-V platforms.\n> >\n> > Signed-off-by: Guo Ren (Alibaba DAMO Academy) <guoren@kernel.org>\n> > ---\n> >  drivers/irqchip/irq-riscv-imsic-state.c | 12 +-----------\n> >  include/linux/irqchip/riscv-imsic.h     |  3 ---\n> >  2 files changed, 1 insertion(+), 14 deletions(-)\n> >\n> > diff --git a/drivers/irqchip/irq-riscv-imsic-state.c b/drivers/irqchip/irq-riscv-imsic-state.c\n> > index e3ed874d89e7..fef27247a34f 100644\n> > --- a/drivers/irqchip/irq-riscv-imsic-state.c\n> > +++ b/drivers/irqchip/irq-riscv-imsic-state.c\n> > @@ -784,7 +784,7 @@ static int __init imsic_parse_fwnode(struct fwnode_handle *fwnode,\n> >\n> >  int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)\n> >  {\n> > -       u32 i, j, index, nr_parent_irqs, nr_mmios, nr_guest_files, nr_handlers = 0;\n> > +       u32 i, j, index, nr_parent_irqs, nr_mmios, nr_handlers = 0;\n> >         struct imsic_global_config *global;\n> >         struct imsic_local_config *local;\n> >         void __iomem **mmios_va = NULL;\n> > @@ -878,7 +878,6 @@ int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)\n> >         }\n> >\n> >         /* Configure handlers for target CPUs */\n> > -       global->nr_guest_files = BIT(global->guest_index_bits) - 1;\n> >         for (i = 0; i < nr_parent_irqs; i++) {\n> >                 rc = imsic_get_parent_hartid(fwnode, i, &hartid);\n> >                 if (rc) {\n> > @@ -919,15 +918,6 @@ int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)\n> >                 local->msi_pa = mmios[index].start + reloff;\n> >                 local->msi_va = mmios_va[index] + reloff;\n> >\n> > -               /*\n> > -                * KVM uses global->nr_guest_files to determine the available guest\n> > -                * interrupt files on each CPU. Take the minimum number of guest\n> > -                * interrupt files across all CPUs to avoid KVM incorrectly allocating\n> > -                * an unexisted or unmapped guest interrupt file on some CPUs.\n> > -                */\n> > -               nr_guest_files = (resource_size(&mmios[index]) - reloff) / IMSIC_MMIO_PAGE_SZ - 1;\n> > -               global->nr_guest_files = min(global->nr_guest_files, nr_guest_files);\n> > -\n> >                 nr_handlers++;\n> >         }\n> >\n> > diff --git a/include/linux/irqchip/riscv-imsic.h b/include/linux/irqchip/riscv-imsic.h\n> > index 4b348836de7a..7f3ff5c5ea53 100644\n> > --- a/include/linux/irqchip/riscv-imsic.h\n> > +++ b/include/linux/irqchip/riscv-imsic.h\n> > @@ -68,9 +68,6 @@ struct imsic_global_config {\n> >         /* Number of guest interrupt identities */\n> >         u32                                     nr_guest_ids;\n> >\n> > -       /* Number of guest interrupt files per core */\n> > -       u32                                     nr_guest_files;\n> > -\n> >         /* Per-CPU IMSIC addresses */\n> >         struct imsic_local_config __percpu      *local;\n> >  };\n> > --\n> > 2.40.1\n> >\n>\n>\n> --\n> Best Regards\n>  Guo Ren","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=NtXaGFVs;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=brainfault-org.20251104.gappssmtp.com\n header.i=@brainfault-org.20251104.gappssmtp.com header.a=rsa-sha256\n header.s=20251104 header.b=acLEvUQK;\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 4g0vTb1zXTz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 19:44:57 +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 1wFU8b-00000009sZ0-0JjF;\n\tWed, 22 Apr 2026 09:44:53 +0000","from mail-ot1-x335.google.com ([2607:f8b0:4864:20::335])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1wFU8Y-00000009sXr-2526\n\tfor kvm-riscv@lists.infradead.org;\n\tWed, 22 Apr 2026 09:44:52 +0000","by mail-ot1-x335.google.com with SMTP id\n 46e09a7af769-7dbec19732eso4576159a34.3\n        for <kvm-riscv@lists.infradead.org>;\n Wed, 22 Apr 2026 02:44:49 -0700 (PDT)"],"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:Cc:To:Subject:Message-ID:Date:From:\n\tIn-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=dtWnghDwoyHGn0TJHW9XpeQ1EdgzbLF+x/6gJzO0oh4=; b=NtXaGFVsClKpu0\n\tkQeIgFldie7Udx9Us9fUZiErhDBQnEgqW4Jm9ab17vN3b7HSAnYJNScOv+34Zn8lVOIGAT+RwVU2A\n\t9X1EIufz0GAPetpGLNZYnmh5u5gYhfbL97rMB625VGaX2tMyTd9fL3Lfe0nP7/F6mew1meq8j2XB/\n\th4w7JPI/E8/QBsBar/Lqhy8klRVUo+OjlxRTVKb3MPH84KHdZmT0UyCocAkxLkRCs8tyiC8F8V7ff\n\trbfwa5M9QBcYk+HbvtWN3UXbZcZChbmsmKpatk6F2VgJ21lNqz7lIESqD9b+O9WsImWxRo+pBqgLh\n\tZc2LZkZAFmUnagjqm4Iw==;","v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=brainfault-org.20251104.gappssmtp.com; s=20251104; t=1776851089;\n x=1777455889; darn=lists.infradead.org;\n        h=content-transfer-encoding:cc:to:subject:message-id:date:from\n         :in-reply-to:references:mime-version:from:to:cc:subject:date\n         :message-id:reply-to;\n        bh=zNohhJuDH0wTzg7Vb48xGyj90V8SdJM+WEkGd1AHVB8=;\n        b=acLEvUQKheeCaQpBtSHCp0FRxc61M7QGzXjFf/gTW2ZU3dLDZ9LRiMSJy1uS9TGMQe\n         HDo0BEcMJyLfTzUUEIyDkrRMkkds/f341TLPzv5NXj56mtfy3HMUU5XGNYNmzhkbRSZf\n         p3nqKGtzPHvY+W05q1CcR8kgwFdJg/Sqgy1EjKea1CZGqCArHTZzNAhgkgJDb4DJJhna\n         1NNm8VZIPcaJzyXC25QZ0+RcIhg6UoIrZEAJkekWPZk+kgzGwZUk0V9auRWB5Xsvh7Hu\n         GTZNW/1GCmS2ftUEJ7eiYXfrTnggFm20dgvBGPZNF49qgy9noFAxVgQyOAbL7YZZi/T4\n         b/CQ=="],"ARC-Seal":"i=1; a=rsa-sha256; t=1776851089; cv=none;\n        d=google.com; s=arc-20240605;\n        b=EjNk6TamqnrA8Vi6Sjp7/HPHWqwKBXKviNlbmPa5HEPkHK7smu8o5QCMOgeb9G7SBh\n         NZfpnionlkeXh/MYUdZGquWyCjjTxkwS2c838j2Dea8fQF++I7rNQZV/uppHlgVDQ4g8\n         KKZGoQ9XcSbwaN74UCZ1ZDHfXzNrxyUlJMYRzYHjYJGgqumuUxSGMATy1pOLp12wp/Iy\n         735P8cI5NNosVBNjNKCQQvWYsOp8//oISvidARKBxaCvBCkhI+6CZ8QNVAgSqAQsTlvh\n         +IFuTotZ0ot9hjRfuKHm6JzwWHZNwRwgAUBU2tAKuZ6Zo1NIfv5frAAE+JpdVgWlETJF\n         5pkw==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n s=arc-20240605;\n        h=content-transfer-encoding:cc:to:subject:message-id:date:from\n         :in-reply-to:references:mime-version:dkim-signature;\n        bh=zNohhJuDH0wTzg7Vb48xGyj90V8SdJM+WEkGd1AHVB8=;\n        fh=IjCvQTTr0bHeJuBmIx3PABCHzqZPSMC06Y273eZFZko=;\n        b=jHt+4fEaWVPtMHGrZRTp4Kj9K1JQi1hPaCDa0JTZYyoyY6ea2nmrj6yV1j6+FVxbCf\n         i7SurjVtrPo/kqceYP2KEgqt053iL14RHdierNJdEMAfwHmHhgQIE/F7hJUcXApuCd3S\n         5kAAyK2+OyZmmuhbEs7ATbuNzrbPFIZSdXUd2XXBPgjaEMBEqpx3whPcPh7c3Ay5rh03\n         aQEsb/7WeW04fHc6elq8maMRi6RhHkUysG9XZE0oeOPhAvxIvKM8rZemrxuEj1dqnwFh\n         eHF95mBgEXqnwg7ZZx09/BBtiFc/X1jINfgejl92CBk99yjPRVMXEqWJbVjJgFUNQz05\n         hDJg==;\n        darn=lists.infradead.org","ARC-Authentication-Results":"i=1; mx.google.com; arc=none","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1776851089; x=1777455889;\n        h=content-transfer-encoding:cc:to:subject:message-id:date:from\n         :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from\n         :to:cc:subject:date:message-id:reply-to;\n        bh=zNohhJuDH0wTzg7Vb48xGyj90V8SdJM+WEkGd1AHVB8=;\n        b=kSBw0qY9L0cP/ubsD+rODAGegaDNvnKgGbikXpEfjNkYn4scAySuaQ5rupSpA5o7cO\n         z7GqzCQkIMkx1fwz1PUjwnzKrZOOAMSOvYohjhQ+qSmkXnpiZ4ykFg3fkddd1eslfng7\n         VEqzUzmCOOd2g7enJ7YFrTXeBy+N06M4tMm/M6zCi1BzbZrNr9nnRs6cudtUFcX2auzG\n         lMxDpUC8wmZiMf/H5FF5YYVoMzk6+LLt3I9SrzvEKVCYJdjsFS4ZXtXQKHexK1Wq3sXR\n         zGkiuS6pY0f3NHIkhqz5c9iftcApuqlOcuuQfk0+aouAy1ReszhNbOFbsS0I6tcv/EAS\n         6+bQ==","X-Forwarded-Encrypted":"i=1;\n AFNElJ/nK+eRarsD1pSvhNLmnb8ePao5GfSKimz2nKrBdtFxewsr8B8LMepRiDBahnT4VdcEOWulpcZ2+Cw=@lists.infradead.org","X-Gm-Message-State":"AOJu0YwqoWWIMHYS1/09KMxOwovEHUGh+na9TekudfRCNxdybyjy27ut\n\tsOYMIkiih3EVJ8vI9+F7rtFub/vjroWdYSklxHAg7B3XDRWToneJ0eueZqj7YE6EKBQ1Rcz2xsv\n\t1UQsgbPFCEQKBBeI8Z0cbPr7/bje8zdnE/RxvVpmLcQ==","X-Gm-Gg":"AeBDiesUVDhFFtiNg3pbLMRnv4nVe/jcX+jFc+UsKGnJdJ+CL5QgVa6aJvBY6qUDJHC\n\tftgPvOo21tG9knKRp1F9AM/4Ho96hqeE8aQID4FPQaQbcyrnPvXy6u8ltAbHWtK0tI2Mz69E+w8\n\tBpGuVg4gTPguxqrSeIkGeLbqRtGlLsItb/qaGN6o3OUsw+6MAiyfmoMKMVPTbjWTDBWHFuAwIYy\n\tXpbwwITNQ3Va9qAAF4zROSc58aOfd8LkGfzI6FLZ398DEQYJFsvciCfo47x6nnkQ2HoAvuo7nVn\n\trOCWr5f2ml9tK5/J5wtKfLw6DcurzV67g9aZJ1DYUFYHqMo+6Q3VIIzvIBpRft34zWHPm80ZZN3\n\t4L+fpjcLrEdCZx/f34Hn8rblFPiDnLnHxHQuQ9w==","X-Received":"by 2002:a05:6820:6ae3:b0:694:a362:4b8f with SMTP id\n 006d021491bc7-694a3624d01mr1461340eaf.6.1776851088816; Wed, 22 Apr 2026\n 02:44:48 -0700 (PDT)","MIME-Version":"1.0","References":"<20260421145451.1597930-1-guoren@kernel.org>\n <20260421145451.1597930-4-guoren@kernel.org>\n <CAJF2gTSi_j2LsOSm2MEfz0y38O0MAEEqdYufciGtAhxVOC+U2A@mail.gmail.com>","In-Reply-To":"\n <CAJF2gTSi_j2LsOSm2MEfz0y38O0MAEEqdYufciGtAhxVOC+U2A@mail.gmail.com>","From":"Anup Patel <anup@brainfault.org>","Date":"Wed, 22 Apr 2026 15:14:37 +0530","X-Gm-Features":"AQROBzBB69Ahi7Y0MUFKRhBuneBS0E63Hi9zFKVMzede85aQZNsHr4zAFW-KBcE","Message-ID":"\n <CAAhSdy2RBs15ndXbUMs=k7fw8CH_5+b9k=+o6SNzxpvb-YKDig@mail.gmail.com>","Subject":"Re: [PATCH 3/3] irqchip/riscv-imsic: Remove global nr_guest_files\n after KVM AIA per-HART conversion","To":"Guo Ren <guoren@kernel.org>","Cc":"fangyu.yu@linux.alibaba.com, cp0613@linux.alibaba.com,\n inochiama@gmail.com,\n\tme@ziyao.cc, gaohan@iscas.ac.cn, atish.patra@linux.dev, pjw@kernel.org,\n\tpalmer@dabbelt.com, alex@ghiti.fr, tglx@kernel.org,\n\tAlbert Ou <aou@eecs.berkeley.edu>, kvm-riscv@lists.infradead.org,\n kvm@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20260422_024450_695001_3CA46780 ","X-CRM114-Status":"GOOD (  41.51  )","X-Spam-Score":"-1.9 (-)","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:  On Wed, Apr 22, 2026 at 8:39 AM Guo Ren <guoren@kernel.org>\n    wrote: > > Hi all, > > This patch simply removed `nr_guest_files`, which\n   is suboptimal. For > v2, I will keep `nr_guest_files` inside `struc [...]\n Content analysis details:   (-1.9 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                             [2607:f8b0:4864:20:0:0:0:335 listed in]\n                             [list.dnswl.org]\n  0.0 SPF_NONE               SPF: sender does not publish an SPF Record\n  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record\n -0.1 DKIM_VALID             Message has at least one valid DKIM or DK\n signature\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]","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=\"utf-8\"","Content-Transfer-Encoding":"base64","Sender":"\"kvm-riscv\" <kvm-riscv-bounces@lists.infradead.org>","Errors-To":"kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}},{"id":3681270,"web_url":"http://patchwork.ozlabs.org/comment/3681270/","msgid":"<aemaxgRgviykvKPf@inochi.infowork>","list_archive_url":null,"date":"2026-04-23T04:20:26","subject":"Re: [PATCH 3/3] irqchip/riscv-imsic: Remove global nr_guest_files\n after KVM AIA per-HART conversion","submitter":{"id":89342,"url":"http://patchwork.ozlabs.org/api/people/89342/","name":"Inochi Amaoto","email":"inochiama@gmail.com"},"content":"On Wed, Apr 22, 2026 at 11:09:30AM +0800, Guo Ren wrote:\n> Hi all,\n> \n> This patch simply removed `nr_guest_files`, which is suboptimal. For\n> v2, I will keep `nr_guest_files` inside `struct imsic_local_config`\n> (per-HART) and compute the effective HGEI count in\n> `kvm_riscv_aia_enable()` as:\n> \n> min(hgctrl->nr_hgei, lc->nr_guest_files)\n> \n> This provides a more accurate and robust per-HART configuration.\n> \n> Here are the updated two patches for your review:\n> \n>     irqchip/riscv-imsic: Move nr_guest_files to per-HART local config\n> \n>     With the recent KVM AIA per-HART HGEI conversion, the global\n>     nr_guest_files is no longer appropriate. Different HARTs in\n>     heterogeneous SoCs may have different numbers of guest interrupt\n>     files.\n> \n>     Move `nr_guest_files` from `struct imsic_global_config` to\n>     `struct imsic_local_config`, and compute it per-CPU in\n>     imsic_setup_state() based on the actual MMIO guest file region size.\n> \n>     Update the related comment to reflect that KVM now uses the\n>     per-HART value.\n> \n>     This eliminates the last global assumption about guest files and\n>     completes the per-HART conversion series for RISC-V AIA/IMSIC.\n> \n>     Signed-off-by: Guo Ren (Alibaba DAMO Academy) <guoren@kernel.org>\n> \n> diff --git a/drivers/irqchip/irq-riscv-imsic-state.c\n> b/drivers/irqchip/irq-riscv-imsic-state.c\n> index e3ed874d89e7..3d455ef43298 100644\n> --- a/drivers/irqchip/irq-riscv-imsic-state.c\n> +++ b/drivers/irqchip/irq-riscv-imsic-state.c\n> @@ -784,7 +784,7 @@ static int __init imsic_parse_fwnode(struct\n> fwnode_handle *fwnode,\n> \n>  int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)\n>  {\n> -       u32 i, j, index, nr_parent_irqs, nr_mmios, nr_guest_files,\n> nr_handlers = 0;\n> +       u32 i, j, index, nr_parent_irqs, nr_mmios, nr_handlers = 0;\n>         struct imsic_global_config *global;\n>         struct imsic_local_config *local;\n>         void __iomem **mmios_va = NULL;\n> @@ -878,7 +878,6 @@ int __init imsic_setup_state(struct fwnode_handle\n> *fwnode, void *opaque)\n>         }\n> \n>         /* Configure handlers for target CPUs */\n> -       global->nr_guest_files = BIT(global->guest_index_bits) - 1;\n>         for (i = 0; i < nr_parent_irqs; i++) {\n>                 rc = imsic_get_parent_hartid(fwnode, i, &hartid);\n>                 if (rc) {\n> @@ -920,13 +919,13 @@ int __init imsic_setup_state(struct\n> fwnode_handle *fwnode, void *opaque)\n>                 local->msi_va = mmios_va[index] + reloff;\n> \n>                 /*\n> -                * KVM uses global->nr_guest_files to determine the\n> available guest\n> +                * KVM uses local->nr_guest_files to determine the\n> available guest\n>                  * interrupt files on each CPU. Take the minimum number of guest\n>                  * interrupt files across all CPUs to avoid KVM\n> incorrectly allocating\n>                  * an unexisted or unmapped guest interrupt file on some CPUs.\n>                  */\n\n> -               nr_guest_files = (resource_size(&mmios[index]) -\n> reloff) / IMSIC_MMIO_PAGE_SZ - 1;\n> -               global->nr_guest_files = min(global->nr_guest_files,\n> nr_guest_files);\n> +               local->nr_guest_files =\n> +                       (resource_size(&mmios[index]) - reloff) /\n> IMSIC_MMIO_PAGE_SZ - 1;\n> \n\nThe min is still required, otherwise the local->nr_guest_files can be\nbigger than BIT(global->guest_index_bits) - 1, which is the max number\nof the guest interrupt files that a hart can have. This condition is\ntrue if the IMSIC group has more than one harts.\n\nRegards,\nInochi\n\n>                 nr_handlers++;\n>         }\n> diff --git a/include/linux/irqchip/riscv-imsic.h\n> b/include/linux/irqchip/riscv-imsic.h\n> index 4b348836de7a..13e8bd7ff4b4 100644\n> --- a/include/linux/irqchip/riscv-imsic.h\n> +++ b/include/linux/irqchip/riscv-imsic.h\n> @@ -40,6 +40,9 @@\n>  struct imsic_local_config {\n>         phys_addr_t                             msi_pa;\n>         void __iomem                            *msi_va;\n> +\n> +       /* Number of guest interrupt files per core */\n> +       u32                                     nr_guest_files;\n>  };\n> \n>  struct imsic_global_config {\n> @@ -68,9 +71,6 @@ struct imsic_global_config {\n>         /* Number of guest interrupt identities */\n>         u32                                     nr_guest_ids;\n> \n> -       /* Number of guest interrupt files per core */\n> -       u32                                     nr_guest_files;\n> -\n>         /* Per-CPU IMSIC addresses */\n>         struct imsic_local_config __percpu      *local;\n>  };\n> \n> ------------------------\n> The other one:\n> \n>     RISC-V: KVM: AIA: Use per-HART IMSIC guest files to compute final HGEI count\n> \n>     Now that `nr_guest_files` has been moved to `struct imsic_local_config`\n>     and is computed per-HART, KVM must respect the actual number of guest\n>     interrupt files available on each HART when setting up HGEI.\n> \n>     In `kvm_riscv_aia_enable()`:\n> \n>      - Retrieve the per-CPU IMSIC local config\n>      - Take `min(hgctrl->nr_hgei, lc->nr_guest_files)` as the final usable\n>        HGEI count for this HART\n>      - Use the result to initialize `free_bitmap`\n> \n>     This ensures correct HGEI allocation on heterogeneous RISC-V SoCs\n>     where different cores may have different IMSIC guest file counts, and\n>     completes the per-HART conversion series.\n> \n>     Signed-off-by: Guo Ren (Alibaba DAMO Academy) <guoren@kernel.org>\n> \n> diff --git a/arch/riscv/kvm/aia.c b/arch/riscv/kvm/aia.c\n> index 70ff1d25dd99..a5f4b7fe1dce 100644\n> --- a/arch/riscv/kvm/aia.c\n> +++ b/arch/riscv/kvm/aia.c\n> @@ -534,6 +534,9 @@ static void aia_hgei_exit(void)\n>  void kvm_riscv_aia_enable(void)\n>  {\n>         struct aia_hgei_control *hgctrl;\n> +       const struct imsic_global_config *gc;\n> +       const struct imsic_local_config *lc;\n> +       unsigned int nr_hgei;\n> \n>         if (!kvm_riscv_aia_available())\n>                 return;\n> @@ -547,8 +550,13 @@ void kvm_riscv_aia_enable(void)\n>         if (hgctrl->nr_hgei)\n>                 hgctrl->nr_hgei--;\n> \n> -       if (hgctrl->nr_hgei) {\n> -               hgctrl->free_bitmap = BIT(hgctrl->nr_hgei + 1) - 1;\n> +       gc = imsic_get_global_config();\n> +       lc = (gc) ? this_cpu_ptr(gc->local) : NULL;\n> +       if (lc)\n> +               nr_hgei = min(hgctrl->nr_hgei, lc->nr_guest_files);\n> +\n> +       if (nr_hgei) {\n> +               hgctrl->free_bitmap = BIT(nr_hgei + 1) - 1;\n>                 hgctrl->free_bitmap &= ~BIT(0);\n>         } else {\n>                 hgctrl->free_bitmap = 0;\n> \n> \n> On Tue, Apr 21, 2026 at 10:55 PM <guoren@kernel.org> wrote:\n> >\n> > From: \"Guo Ren (Alibaba DAMO Academy)\" <guoren@kernel.org>\n> >\n> > With the recent KVM AIA changes, HGEI line management is now fully\n> > per-CPU (via struct aia_hgei_control::nr_hgei) and the global\n> > kvm_riscv_aia_nr_hgei has been replaced by a simple enabled flag.\n> > The IMSIC driver no longer needs to compute and enforce a global\n> > minimum number of guest interrupt files across all HARTs.\n> >\n> > Remove:\n> >  - `u32 nr_guest_files` from `struct imsic_global_config`\n> >  - the initial `BIT(global->guest_index_bits) - 1` assignment\n> >  - the entire per-CPU MMIO-based min() calculation and its comment\n> >    (which was specifically there to protect old KVM)\n> >\n> > The per-HART guest file count is already handled locally in\n> > `imsic_local_config` during the parent IRQ loop, so this global\n> > field was redundant.\n> >\n> > This completes the cleanup series, eliminates the last global\n> > assumption about guest files, and improves support for heterogeneous\n> > (big.LITTLE / multi-vendor) RISC-V platforms.\n> >\n> > Signed-off-by: Guo Ren (Alibaba DAMO Academy) <guoren@kernel.org>\n> > ---\n> >  drivers/irqchip/irq-riscv-imsic-state.c | 12 +-----------\n> >  include/linux/irqchip/riscv-imsic.h     |  3 ---\n> >  2 files changed, 1 insertion(+), 14 deletions(-)\n> >\n> > diff --git a/drivers/irqchip/irq-riscv-imsic-state.c b/drivers/irqchip/irq-riscv-imsic-state.c\n> > index e3ed874d89e7..fef27247a34f 100644\n> > --- a/drivers/irqchip/irq-riscv-imsic-state.c\n> > +++ b/drivers/irqchip/irq-riscv-imsic-state.c\n> > @@ -784,7 +784,7 @@ static int __init imsic_parse_fwnode(struct fwnode_handle *fwnode,\n> >\n> >  int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)\n> >  {\n> > -       u32 i, j, index, nr_parent_irqs, nr_mmios, nr_guest_files, nr_handlers = 0;\n> > +       u32 i, j, index, nr_parent_irqs, nr_mmios, nr_handlers = 0;\n> >         struct imsic_global_config *global;\n> >         struct imsic_local_config *local;\n> >         void __iomem **mmios_va = NULL;\n> > @@ -878,7 +878,6 @@ int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)\n> >         }\n> >\n> >         /* Configure handlers for target CPUs */\n> > -       global->nr_guest_files = BIT(global->guest_index_bits) - 1;\n> >         for (i = 0; i < nr_parent_irqs; i++) {\n> >                 rc = imsic_get_parent_hartid(fwnode, i, &hartid);\n> >                 if (rc) {\n> > @@ -919,15 +918,6 @@ int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)\n> >                 local->msi_pa = mmios[index].start + reloff;\n> >                 local->msi_va = mmios_va[index] + reloff;\n> >\n> > -               /*\n> > -                * KVM uses global->nr_guest_files to determine the available guest\n> > -                * interrupt files on each CPU. Take the minimum number of guest\n> > -                * interrupt files across all CPUs to avoid KVM incorrectly allocating\n> > -                * an unexisted or unmapped guest interrupt file on some CPUs.\n> > -                */\n> > -               nr_guest_files = (resource_size(&mmios[index]) - reloff) / IMSIC_MMIO_PAGE_SZ - 1;\n> > -               global->nr_guest_files = min(global->nr_guest_files, nr_guest_files);\n> > -\n> >                 nr_handlers++;\n> >         }\n> >\n> > diff --git a/include/linux/irqchip/riscv-imsic.h b/include/linux/irqchip/riscv-imsic.h\n> > index 4b348836de7a..7f3ff5c5ea53 100644\n> > --- a/include/linux/irqchip/riscv-imsic.h\n> > +++ b/include/linux/irqchip/riscv-imsic.h\n> > @@ -68,9 +68,6 @@ struct imsic_global_config {\n> >         /* Number of guest interrupt identities */\n> >         u32                                     nr_guest_ids;\n> >\n> > -       /* Number of guest interrupt files per core */\n> > -       u32                                     nr_guest_files;\n> > -\n> >         /* Per-CPU IMSIC addresses */\n> >         struct imsic_local_config __percpu      *local;\n> >  };\n> > --\n> > 2.40.1\n> >\n> \n> \n> --\n> Best Regards\n>  Guo Ren\n> \n> -- \n> kvm-riscv mailing list\n> kvm-riscv@lists.infradead.org\n> http://lists.infradead.org/mailman/listinfo/kvm-riscv","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=CdxyUbRa;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=aCrUbWT9;\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 4g1NDy2Rcbz1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 23 Apr 2026 14:20:50 +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 1wFlYW-0000000B1LC-1dQJ;\n\tThu, 23 Apr 2026 04:20:48 +0000","from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1wFlYU-0000000B1KX-11Bo\n\tfor kvm-riscv@lists.infradead.org;\n\tThu, 23 Apr 2026 04:20:47 +0000","by mail-pf1-x42f.google.com with SMTP id\n d2e1a72fcca58-8296d553142so3607052b3a.3\n        for <kvm-riscv@lists.infradead.org>;\n Wed, 22 Apr 2026 21:20:45 -0700 (PDT)","from localhost ([2001:19f0:8001:1b2d:5400:5ff:fefa:a95d])\n        by smtp.gmail.com with ESMTPSA id\n d2e1a72fcca58-82f8ebb3829sm19490565b3a.31.2026.04.22.21.20.43\n        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n        Wed, 22 Apr 2026 21:20:43 -0700 (PDT)"],"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:In-Reply-To:MIME-Version:References:\n\tMessage-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=8na/XuYOQnfuZQ79hDau8y1aeTavxtu4Eo8x5XFkj1E=; b=CdxyUbRa1jfjYT\n\t5ocRg2SmLV46BDy1Ybv6t15ZPkugzu4drvzXcXNFbdnvr4ac9pD6jqBS+X5Xw8aaCB7U6Tu+m+HT/\n\t5/pJy1muifki12vOKH10mjAqybNLnRNQs3lqMKUST29UjsyOnvMyrLGJ42ND/JoVaJeNdR0uoFXE0\n\tThh3kmjhbdV/QYug9wL0QVNwlfKSqdyx9/EXdHSYGSXwT3m1du7n9anF1CA19V8OMR+8Nwo2819DI\n\tlDjfMHU2J7mUeUOO0S+Jvf4zqGJCUdxGb8JpxqS9zzB6pphoawMU1uTlYJZDNsy36HKiWj4AD/BZt\n\tH0OKY5z7/ks3NEQFNJng==;","v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=gmail.com; s=20251104; t=1776918045; x=1777522845;\n darn=lists.infradead.org;\n        h=in-reply-to:content-transfer-encoding:content-disposition\n         :mime-version:references:message-id:subject:cc:to:from:date:from:to\n         :cc:subject:date:message-id:reply-to;\n        bh=GfOCDFeuRY0gBaADLpxF7xAt7ukg8gVW7Q9qKSqhzCQ=;\n        b=aCrUbWT9sB93gqm8LmO6ZX/HIH+VTYZYgPtZTMjE34RQDp6RzembGUaPfX6fw25NlC\n         v9paZLl4/DusSB741LTmP6+WCwdPj3oWxvAWufQWqb87dEVgSm81KKC0ozuYu0q8PPP9\n         gOVOPwoOliGBZ+/kCS/JoAlFSg3WV5yvdXmAR+GHyE91xWsHv+uFLMxoyeIy/rAOd8M2\n         1k2jVxE5E5fQCh0P1EUWar1pCBJq9EozZ9xBYxeYl7zBVMXjG3tqJDMjECiODJkTwPTA\n         lhdY0h9UaRiG+ujlftHV8rD6/tp3b6OQl6eNgxELJ2BVfjHZw3Rw72+1pO/uMnP+53xX\n         1AiA=="],"X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1776918045; x=1777522845;\n        h=in-reply-to:content-transfer-encoding:content-disposition\n         :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg\n         :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;\n        bh=GfOCDFeuRY0gBaADLpxF7xAt7ukg8gVW7Q9qKSqhzCQ=;\n        b=LgjHoNVZ0ZgDqRe5QfqKG3u0uIGLaWNkaTACGf1Z8Zd9Lb2m11qKFdNCSnIFyn2cPL\n         CnT+hk1YPhKKlwmu5SuCBqAldBY/dy+LWPO+J6rOul6WVsWweuKHzfmXDLO6sysVRTG4\n         QSDXZ9yxyNeayrzdwdE+gKJv5ANnd3rbmJhlrQnvos3rA7n2q8hvJYjzqbLDSWrE57Ej\n         OO7d6fApMgBzinUR7yjQMw/YGKZX+6ud+Usfnd+cLDiY6F9VKMw6zl5CRZsANZzMdvQE\n         rMNTWnNNqyTb4dDzsqBZKA/XuWvvRdUyBrIkYzs5eK/efpSyly+IHFiZKaEcHHiN1w99\n         FlEA==","X-Gm-Message-State":"AOJu0YwvBAIJ3jVge2R2EzX0Zix4bbAzwfTEP53qBJcU7aRVTjiSCPXD\n\tFuQiPXFuPYtkJM/m0dv3oQtVvZY15vl1ifjJqFscKyz11ksPP8Cz5cPs","X-Gm-Gg":"AeBDievryNyPRbRRJQGL8madHGLDrTY/mPaW+fFqEq/+h5L3v+ZbckRfVHzMLhv3342\n\tuv40MYHIFHsa9ZZRo/MM40TpnW16+EWPTFurjr4hBRlN1+h2p28ljeSULJNFs0IEvYFWebDxiK+\n\tosdgiTk8XEj86pTwaDv5tR2Ku2IzdVWFxbPbcR2eK078gU/co8puXmDTlxJMEniZlgWw5+qmmwX\n\tCYw5CllZ6oKsB4jBfMUbrQ5kt9e47EO3IxQycAXHcVXXISQEh7ycqO8zsbv4iLzO/7jytAIsfqw\n\tlnCxvvGGx9tX8ZtYK5fl+1Tcp8U1naKa00xmoqV86Mdxzh2Zbc+Y1gNvPnBpBmLEXJAgiQf/esH\n\taIYd5Jfe4c+9GGsT/JFi1viIy2WYif7rq9YRFKBhkqIaF0TBjQPxpuhU1JOCiXZsG3h6Z/3wH7c\n\tTE19HH21d1eCK2G16dP6SPxbRbghf+YqSRMsx6TxVqFNmb","X-Received":"by 2002:a05:6a00:bb84:b0:81f:be3c:9c9e with SMTP id\n d2e1a72fcca58-82f8c8d67d0mr26456125b3a.33.1776918044598;\n        Wed, 22 Apr 2026 21:20:44 -0700 (PDT)","Date":"Thu, 23 Apr 2026 12:20:26 +0800","From":"Inochi Amaoto <inochiama@gmail.com>","To":"Guo Ren <guoren@kernel.org>, fangyu.yu@linux.alibaba.com,\n\tcp0613@linux.alibaba.com, inochiama@gmail.com, me@ziyao.cc,\n gaohan@iscas.ac.cn,\n\tanup@brainfault.org, atish.patra@linux.dev, pjw@kernel.org,\n palmer@dabbelt.com,\n\talex@ghiti.fr, tglx@kernel.org, Albert Ou <aou@eecs.berkeley.edu>","Cc":"kvm-riscv@lists.infradead.org, kvm@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org","Subject":"Re: [PATCH 3/3] irqchip/riscv-imsic: Remove global nr_guest_files\n after KVM AIA per-HART conversion","Message-ID":"<aemaxgRgviykvKPf@inochi.infowork>","References":"<20260421145451.1597930-1-guoren@kernel.org>\n <20260421145451.1597930-4-guoren@kernel.org>\n <CAJF2gTSi_j2LsOSm2MEfz0y38O0MAEEqdYufciGtAhxVOC+U2A@mail.gmail.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"\n <CAJF2gTSi_j2LsOSm2MEfz0y38O0MAEEqdYufciGtAhxVOC+U2A@mail.gmail.com>","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20260422_212046_458434_8A33E049 ","X-CRM114-Status":"GOOD (  43.91  )","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:  On Wed, Apr 22, 2026 at 11:09:30AM +0800, Guo Ren wrote: >\n    Hi all, > > This patch simply removed `nr_guest_files`,\n which is suboptimal.\n    For > v2, I will keep `nr_guest_files` inside `struct imsic_loca [...]\n Content analysis details:   (-2.1 points, 5.0 required)\n  pts rule name              description\n ---- ----------------------\n --------------------------------------------------\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_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_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 -1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n                             [score: 0.0000]\n  0.0 FREEMAIL_FROM          Sender email is commonly abused enduser mail\n provider\n                             [inochiama(at)gmail.com]\n -0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at https://www.dnswl.org/, no\n                             trust\n                             [2607:f8b0:4864:20:0:0:0:42f listed in]\n                             [list.dnswl.org]","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=\"utf-8\"","Content-Transfer-Encoding":"base64","Sender":"\"kvm-riscv\" <kvm-riscv-bounces@lists.infradead.org>","Errors-To":"kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}},{"id":3681347,"web_url":"http://patchwork.ozlabs.org/comment/3681347/","msgid":"<CAJF2gTQLsXBFe8f7nZU=BLDu-rwKws59jctUXu4SgOie7PWeuw@mail.gmail.com>","list_archive_url":null,"date":"2026-04-23T09:07:39","subject":"Re: [PATCH 3/3] irqchip/riscv-imsic: Remove global nr_guest_files\n after KVM AIA per-HART conversion","submitter":{"id":75626,"url":"http://patchwork.ozlabs.org/api/people/75626/","name":"Guo Ren","email":"guoren@kernel.org"},"content":"On Thu, Apr 23, 2026 at 12:20 PM Inochi Amaoto <inochiama@gmail.com> wrote:\n>\n> On Wed, Apr 22, 2026 at 11:09:30AM +0800, Guo Ren wrote:\n> > Hi all,\n> >\n> > This patch simply removed `nr_guest_files`, which is suboptimal. For\n> > v2, I will keep `nr_guest_files` inside `struct imsic_local_config`\n> > (per-HART) and compute the effective HGEI count in\n> > `kvm_riscv_aia_enable()` as:\n> >\n> > min(hgctrl->nr_hgei, lc->nr_guest_files)\n> >\n> > This provides a more accurate and robust per-HART configuration.\n> >\n> > Here are the updated two patches for your review:\n> >\n> >     irqchip/riscv-imsic: Move nr_guest_files to per-HART local config\n> >\n> >     With the recent KVM AIA per-HART HGEI conversion, the global\n> >     nr_guest_files is no longer appropriate. Different HARTs in\n> >     heterogeneous SoCs may have different numbers of guest interrupt\n> >     files.\n> >\n> >     Move `nr_guest_files` from `struct imsic_global_config` to\n> >     `struct imsic_local_config`, and compute it per-CPU in\n> >     imsic_setup_state() based on the actual MMIO guest file region size.\n> >\n> >     Update the related comment to reflect that KVM now uses the\n> >     per-HART value.\n> >\n> >     This eliminates the last global assumption about guest files and\n> >     completes the per-HART conversion series for RISC-V AIA/IMSIC.\n> >\n> >     Signed-off-by: Guo Ren (Alibaba DAMO Academy) <guoren@kernel.org>\n> >\n> > diff --git a/drivers/irqchip/irq-riscv-imsic-state.c\n> > b/drivers/irqchip/irq-riscv-imsic-state.c\n> > index e3ed874d89e7..3d455ef43298 100644\n> > --- a/drivers/irqchip/irq-riscv-imsic-state.c\n> > +++ b/drivers/irqchip/irq-riscv-imsic-state.c\n> > @@ -784,7 +784,7 @@ static int __init imsic_parse_fwnode(struct\n> > fwnode_handle *fwnode,\n> >\n> >  int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)\n> >  {\n> > -       u32 i, j, index, nr_parent_irqs, nr_mmios, nr_guest_files,\n> > nr_handlers = 0;\n> > +       u32 i, j, index, nr_parent_irqs, nr_mmios, nr_handlers = 0;\n> >         struct imsic_global_config *global;\n> >         struct imsic_local_config *local;\n> >         void __iomem **mmios_va = NULL;\n> > @@ -878,7 +878,6 @@ int __init imsic_setup_state(struct fwnode_handle\n> > *fwnode, void *opaque)\n> >         }\n> >\n> >         /* Configure handlers for target CPUs */\n> > -       global->nr_guest_files = BIT(global->guest_index_bits) - 1;\n> >         for (i = 0; i < nr_parent_irqs; i++) {\n> >                 rc = imsic_get_parent_hartid(fwnode, i, &hartid);\n> >                 if (rc) {\n> > @@ -920,13 +919,13 @@ int __init imsic_setup_state(struct\n> > fwnode_handle *fwnode, void *opaque)\n> >                 local->msi_va = mmios_va[index] + reloff;\n> >\n> >                 /*\n> > -                * KVM uses global->nr_guest_files to determine the\n> > available guest\n> > +                * KVM uses local->nr_guest_files to determine the\n> > available guest\n> >                  * interrupt files on each CPU. Take the minimum number of guest\n> >                  * interrupt files across all CPUs to avoid KVM\n> > incorrectly allocating\n> >                  * an unexisted or unmapped guest interrupt file on some CPUs.\n> >                  */\n>\n> > -               nr_guest_files = (resource_size(&mmios[index]) -\n> > reloff) / IMSIC_MMIO_PAGE_SZ - 1;\n> > -               global->nr_guest_files = min(global->nr_guest_files,\n> > nr_guest_files);\n> > +               local->nr_guest_files =\n> > +                       (resource_size(&mmios[index]) - reloff) /\n> > IMSIC_MMIO_PAGE_SZ - 1;\n> >\n>\n> The min is still required, otherwise the local->nr_guest_files can be\n> bigger than BIT(global->guest_index_bits) - 1, which is the max number\n> of the guest interrupt files that a hart can have. This condition is\n> true if the IMSIC group has more than one harts.\nYes, you are correct. Thanks for pointing it out.\n\n\n>\n> Regards,\n> Inochi\n>\n> >                 nr_handlers++;\n> >         }\n> > diff --git a/include/linux/irqchip/riscv-imsic.h\n> > b/include/linux/irqchip/riscv-imsic.h\n> > index 4b348836de7a..13e8bd7ff4b4 100644\n> > --- a/include/linux/irqchip/riscv-imsic.h\n> > +++ b/include/linux/irqchip/riscv-imsic.h\n> > @@ -40,6 +40,9 @@\n> >  struct imsic_local_config {\n> >         phys_addr_t                             msi_pa;\n> >         void __iomem                            *msi_va;\n> > +\n> > +       /* Number of guest interrupt files per core */\n> > +       u32                                     nr_guest_files;\n> >  };\n> >\n> >  struct imsic_global_config {\n> > @@ -68,9 +71,6 @@ struct imsic_global_config {\n> >         /* Number of guest interrupt identities */\n> >         u32                                     nr_guest_ids;\n> >\n> > -       /* Number of guest interrupt files per core */\n> > -       u32                                     nr_guest_files;\n> > -\n> >         /* Per-CPU IMSIC addresses */\n> >         struct imsic_local_config __percpu      *local;\n> >  };\n> >\n> > ------------------------\n> > The other one:\n> >\n> >     RISC-V: KVM: AIA: Use per-HART IMSIC guest files to compute final HGEI count\n> >\n> >     Now that `nr_guest_files` has been moved to `struct imsic_local_config`\n> >     and is computed per-HART, KVM must respect the actual number of guest\n> >     interrupt files available on each HART when setting up HGEI.\n> >\n> >     In `kvm_riscv_aia_enable()`:\n> >\n> >      - Retrieve the per-CPU IMSIC local config\n> >      - Take `min(hgctrl->nr_hgei, lc->nr_guest_files)` as the final usable\n> >        HGEI count for this HART\n> >      - Use the result to initialize `free_bitmap`\n> >\n> >     This ensures correct HGEI allocation on heterogeneous RISC-V SoCs\n> >     where different cores may have different IMSIC guest file counts, and\n> >     completes the per-HART conversion series.\n> >\n> >     Signed-off-by: Guo Ren (Alibaba DAMO Academy) <guoren@kernel.org>\n> >\n> > diff --git a/arch/riscv/kvm/aia.c b/arch/riscv/kvm/aia.c\n> > index 70ff1d25dd99..a5f4b7fe1dce 100644\n> > --- a/arch/riscv/kvm/aia.c\n> > +++ b/arch/riscv/kvm/aia.c\n> > @@ -534,6 +534,9 @@ static void aia_hgei_exit(void)\n> >  void kvm_riscv_aia_enable(void)\n> >  {\n> >         struct aia_hgei_control *hgctrl;\n> > +       const struct imsic_global_config *gc;\n> > +       const struct imsic_local_config *lc;\n> > +       unsigned int nr_hgei;\n> >\n> >         if (!kvm_riscv_aia_available())\n> >                 return;\n> > @@ -547,8 +550,13 @@ void kvm_riscv_aia_enable(void)\n> >         if (hgctrl->nr_hgei)\n> >                 hgctrl->nr_hgei--;\n> >\n> > -       if (hgctrl->nr_hgei) {\n> > -               hgctrl->free_bitmap = BIT(hgctrl->nr_hgei + 1) - 1;\n> > +       gc = imsic_get_global_config();\n> > +       lc = (gc) ? this_cpu_ptr(gc->local) : NULL;\n> > +       if (lc)\n> > +               nr_hgei = min(hgctrl->nr_hgei, lc->nr_guest_files);\n> > +\n> > +       if (nr_hgei) {\n> > +               hgctrl->free_bitmap = BIT(nr_hgei + 1) - 1;\n> >                 hgctrl->free_bitmap &= ~BIT(0);\n> >         } else {\n> >                 hgctrl->free_bitmap = 0;\n> >\n> >\n> > On Tue, Apr 21, 2026 at 10:55 PM <guoren@kernel.org> wrote:\n> > >\n> > > From: \"Guo Ren (Alibaba DAMO Academy)\" <guoren@kernel.org>\n> > >\n> > > With the recent KVM AIA changes, HGEI line management is now fully\n> > > per-CPU (via struct aia_hgei_control::nr_hgei) and the global\n> > > kvm_riscv_aia_nr_hgei has been replaced by a simple enabled flag.\n> > > The IMSIC driver no longer needs to compute and enforce a global\n> > > minimum number of guest interrupt files across all HARTs.\n> > >\n> > > Remove:\n> > >  - `u32 nr_guest_files` from `struct imsic_global_config`\n> > >  - the initial `BIT(global->guest_index_bits) - 1` assignment\n> > >  - the entire per-CPU MMIO-based min() calculation and its comment\n> > >    (which was specifically there to protect old KVM)\n> > >\n> > > The per-HART guest file count is already handled locally in\n> > > `imsic_local_config` during the parent IRQ loop, so this global\n> > > field was redundant.\n> > >\n> > > This completes the cleanup series, eliminates the last global\n> > > assumption about guest files, and improves support for heterogeneous\n> > > (big.LITTLE / multi-vendor) RISC-V platforms.\n> > >\n> > > Signed-off-by: Guo Ren (Alibaba DAMO Academy) <guoren@kernel.org>\n> > > ---\n> > >  drivers/irqchip/irq-riscv-imsic-state.c | 12 +-----------\n> > >  include/linux/irqchip/riscv-imsic.h     |  3 ---\n> > >  2 files changed, 1 insertion(+), 14 deletions(-)\n> > >\n> > > diff --git a/drivers/irqchip/irq-riscv-imsic-state.c b/drivers/irqchip/irq-riscv-imsic-state.c\n> > > index e3ed874d89e7..fef27247a34f 100644\n> > > --- a/drivers/irqchip/irq-riscv-imsic-state.c\n> > > +++ b/drivers/irqchip/irq-riscv-imsic-state.c\n> > > @@ -784,7 +784,7 @@ static int __init imsic_parse_fwnode(struct fwnode_handle *fwnode,\n> > >\n> > >  int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)\n> > >  {\n> > > -       u32 i, j, index, nr_parent_irqs, nr_mmios, nr_guest_files, nr_handlers = 0;\n> > > +       u32 i, j, index, nr_parent_irqs, nr_mmios, nr_handlers = 0;\n> > >         struct imsic_global_config *global;\n> > >         struct imsic_local_config *local;\n> > >         void __iomem **mmios_va = NULL;\n> > > @@ -878,7 +878,6 @@ int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)\n> > >         }\n> > >\n> > >         /* Configure handlers for target CPUs */\n> > > -       global->nr_guest_files = BIT(global->guest_index_bits) - 1;\n> > >         for (i = 0; i < nr_parent_irqs; i++) {\n> > >                 rc = imsic_get_parent_hartid(fwnode, i, &hartid);\n> > >                 if (rc) {\n> > > @@ -919,15 +918,6 @@ int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)\n> > >                 local->msi_pa = mmios[index].start + reloff;\n> > >                 local->msi_va = mmios_va[index] + reloff;\n> > >\n> > > -               /*\n> > > -                * KVM uses global->nr_guest_files to determine the available guest\n> > > -                * interrupt files on each CPU. Take the minimum number of guest\n> > > -                * interrupt files across all CPUs to avoid KVM incorrectly allocating\n> > > -                * an unexisted or unmapped guest interrupt file on some CPUs.\n> > > -                */\n> > > -               nr_guest_files = (resource_size(&mmios[index]) - reloff) / IMSIC_MMIO_PAGE_SZ - 1;\n> > > -               global->nr_guest_files = min(global->nr_guest_files, nr_guest_files);\n> > > -\n> > >                 nr_handlers++;\n> > >         }\n> > >\n> > > diff --git a/include/linux/irqchip/riscv-imsic.h b/include/linux/irqchip/riscv-imsic.h\n> > > index 4b348836de7a..7f3ff5c5ea53 100644\n> > > --- a/include/linux/irqchip/riscv-imsic.h\n> > > +++ b/include/linux/irqchip/riscv-imsic.h\n> > > @@ -68,9 +68,6 @@ struct imsic_global_config {\n> > >         /* Number of guest interrupt identities */\n> > >         u32                                     nr_guest_ids;\n> > >\n> > > -       /* Number of guest interrupt files per core */\n> > > -       u32                                     nr_guest_files;\n> > > -\n> > >         /* Per-CPU IMSIC addresses */\n> > >         struct imsic_local_config __percpu      *local;\n> > >  };\n> > > --\n> > > 2.40.1\n> > >\n> >\n> >\n> > --\n> > Best Regards\n> >  Guo Ren\n> >\n> > --\n> > kvm-riscv mailing list\n> > kvm-riscv@lists.infradead.org\n> > http://lists.infradead.org/mailman/listinfo/kvm-riscv","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=hHahcn0C;\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=ueAgs/Ru;\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 4g1VcH3CWcz1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 23 Apr 2026 19:07:59 +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 1wFq2P-0000000BJB4-2Ln8;\n\tThu, 23 Apr 2026 09:07:57 +0000","from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1wFq2N-0000000BJAi-2tPH\n\tfor kvm-riscv@lists.infradead.org;\n\tThu, 23 Apr 2026 09:07:55 +0000","from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58])\n\tby tor.source.kernel.org (Postfix) with ESMTP id A031760125\n\tfor <kvm-riscv@lists.infradead.org>; Thu, 23 Apr 2026 09:07:54 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPSA id 52A6BC4AF0B\n\tfor <kvm-riscv@lists.infradead.org>; Thu, 23 Apr 2026 09:07:54 +0000 (UTC)","by mail-wr1-f41.google.com with SMTP id\n ffacd0b85a97d-43d77f6092eso4398057f8f.2\n        for <kvm-riscv@lists.infradead.org>;\n Thu, 23 Apr 2026 02:07:54 -0700 (PDT)"],"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:Cc:To:Subject:Message-ID:Date:From:\n\tIn-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=Pd2tP/gINoLysrlStCgy97AfmXlabDa+V1ApyHXKTVw=; b=hHahcn0CqlEfgN\n\t0PfieMEpnC/TtKX02zjsvWiDqTuL+yPCDzQAUPAmVkdGHlO0DSG7WqPeOxpTL6gNqb54BXS0JEr64\n\ttfLgyegXRMI9pqZvL3fzOjts2IeQipNf8crc7ofez6MQCZDMF14GasLJWCJvkWsQu4YgSHqTaLmbe\n\txsrFT37P7nUPqVtO749LfdWR/EW6/L+H0kShGuHhm0AlYr+5aNiPO4mv1DjbQpGijwT6C9807/m82\n\t/NvurrqyC4+MdS/Yiyq5Tvzl/NwkZmtMxg81maEfil32oZ/5rZwc1dgxc+gKt8BwZPRItCKl/ykAv\n\tm6aZ3fxKIBKYewboJ0Pg==;","v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1776935274;\n\tbh=R/4a0T7uLum9LdZSnR8FdouX4t68vhg5pTYrBNn98A0=;\n\th=References:In-Reply-To:From:Date:Subject:To:Cc:From;\n\tb=ueAgs/RuwUZ2dTLbvu350jgL0svuI22YW0si7NOXae92UPqQoOIG9BlgCPahsg4Zg\n\t 0M+Dnf0ybnPOKLek0eSefm07AJxKOZtGpdbUj8KE0CECd99MLp0nNLsuqUmdfuRRDN\n\t eP9EfvauWvtDc7xygRIpnU8pVJXExzzWUt5Vm5lR5jFQBjeuTezHJtdOdt3OOKL8s8\n\t jKkXHrF8PxkTOhQBLCgS0ycAAeeQSfkr3JhQcY+URS9rrU+VGUqMcu/g5xkfYOijNf\n\t onGOC6OSPPT5P9Vmlyto0hginMxzvkcnpLBdDk7KvX5+4M5gk1mabATLxE29znOMoq\n\t jnvz+lsri5j6w=="],"X-Forwarded-Encrypted":"i=1;\n AFNElJ9c5xqCTaEy7RZdteC2eLbkgGs8aahDkcm7vRYVpQzIHeyWl+FEAYkgp5dmfDpCLGZAKp3RwPiV3lQ=@lists.infradead.org","X-Gm-Message-State":"AOJu0YwZC+FwwpHEM/lGierh9/xzDVIAdHicLmjt+Ep/oFYyaPWxnbYV\n\tZPtWJ3WSiEtMHSAjHpBAIup2PiAjYEn2fuNpKfitHVp0VN+bJuD6QsZaHvuYzhAsO1k1AVYPnCE\n\twSqmeZC1jumnjAlI7V25BTZxMlUYm6Ck=","X-Received":"by 2002:a05:6000:22c5:b0:43d:4b00:9ee7 with SMTP id\n ffacd0b85a97d-43fe3e10b0dmr40138889f8f.33.1776935272715; Thu, 23 Apr 2026\n 02:07:52 -0700 (PDT)","MIME-Version":"1.0","References":"<20260421145451.1597930-1-guoren@kernel.org>\n <20260421145451.1597930-4-guoren@kernel.org>\n <CAJF2gTSi_j2LsOSm2MEfz0y38O0MAEEqdYufciGtAhxVOC+U2A@mail.gmail.com>\n <aemaxgRgviykvKPf@inochi.infowork>","In-Reply-To":"<aemaxgRgviykvKPf@inochi.infowork>","From":"Guo Ren <guoren@kernel.org>","Date":"Thu, 23 Apr 2026 17:07:39 +0800","X-Gmail-Original-Message-ID":"\n <CAJF2gTQLsXBFe8f7nZU=BLDu-rwKws59jctUXu4SgOie7PWeuw@mail.gmail.com>","X-Gm-Features":"AQROBzBdGW2Bb_t1iHA0zvIBQEkHLDfsJh2uc_pEVUSWIqbxCFTlr6XqBYbc6L0","Message-ID":"\n <CAJF2gTQLsXBFe8f7nZU=BLDu-rwKws59jctUXu4SgOie7PWeuw@mail.gmail.com>","Subject":"Re: [PATCH 3/3] irqchip/riscv-imsic: Remove global nr_guest_files\n after KVM AIA per-HART conversion","To":"Inochi Amaoto <inochiama@gmail.com>","Cc":"fangyu.yu@linux.alibaba.com, cp0613@linux.alibaba.com, me@ziyao.cc,\n\tgaohan@iscas.ac.cn, anup@brainfault.org, atish.patra@linux.dev,\n\tpjw@kernel.org, palmer@dabbelt.com, alex@ghiti.fr, tglx@kernel.org,\n\tAlbert Ou <aou@eecs.berkeley.edu>, kvm-riscv@lists.infradead.org,\n kvm@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org","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=\"utf-8\"","Content-Transfer-Encoding":"base64","Sender":"\"kvm-riscv\" <kvm-riscv-bounces@lists.infradead.org>","Errors-To":"kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}}]