Re: [PATCH V2 2/4] RISC-V: KVM: AIA: Replace global HGEI count with simple enabled bool

Anup Patel <[email protected]>
Newsgroups org.infradead.lists.kvm-riscv,org.infradead.lists.linux-riscv,org.kernel.vger.kvm,org.kernel.vger.linux-kernel
Message-ID <CAAhSdy1pDsRZGorxU9bJ7cs19v3LH40hhoaYvWQUsFo-z_Fjmw@mail.gmail.com>
On Sat, Apr 25, 2026 at 6:29 AM <[email protected]> wrote:
>
> From: "Guo Ren (Alibaba DAMO Academy)" <[email protected]>
>
> Now that HGEI line management is fully per-CPU (via struct
> aia_hgei_control::nr_hgei), the global `kvm_riscv_aia_nr_hgei`
> is no longer needed. Replace it with a simple `bool
> kvm_riscv_aia_hgei_enabled` that only indicates whether HGEI
> support is available at all.

As mentioned in PATCH1, this PATCH is not required.

>
> Signed-off-by: Guo Ren (Alibaba DAMO Academy) <[email protected]>
> ---
>  arch/riscv/include/asm/kvm_aia.h |  2 +-
>  arch/riscv/kvm/aia.c             | 18 ++++++++----------
>  arch/riscv/kvm/aia_device.c      |  4 ++--
>  arch/riscv/kvm/main.c            |  3 +--
>  4 files changed, 12 insertions(+), 15 deletions(-)
>
> diff --git a/arch/riscv/include/asm/kvm_aia.h b/arch/riscv/include/asm/kvm_aia.h
> index b04ecdd1a860..e8749ac6bed7 100644
> --- a/arch/riscv/include/asm/kvm_aia.h
> +++ b/arch/riscv/include/asm/kvm_aia.h
> @@ -79,7 +79,7 @@ struct kvm_vcpu_aia {
>
>  #define irqchip_in_kernel(k)           ((k)->arch.aia.in_kernel)
>
> -extern unsigned int kvm_riscv_aia_nr_hgei;
> +extern bool kvm_riscv_aia_hgei_enabled;
>  extern unsigned int kvm_riscv_aia_max_ids;
>  DECLARE_STATIC_KEY_FALSE(kvm_riscv_aia_available);
>  #define kvm_riscv_aia_available() \
> diff --git a/arch/riscv/kvm/aia.c b/arch/riscv/kvm/aia.c
> index a23729052cfb..70ff1d25dd99 100644
> --- a/arch/riscv/kvm/aia.c
> +++ b/arch/riscv/kvm/aia.c
> @@ -28,7 +28,7 @@ struct aia_hgei_control {
>  static DEFINE_PER_CPU(struct aia_hgei_control, aia_hgei);
>  static int hgei_parent_irq;
>
> -unsigned int kvm_riscv_aia_nr_hgei;
> +bool kvm_riscv_aia_hgei_enabled;
>  unsigned int kvm_riscv_aia_max_ids;
>  DEFINE_STATIC_KEY_FALSE(kvm_riscv_aia_available);
>
> @@ -491,7 +491,7 @@ static int aia_hgei_init(void)
>         struct irq_domain *domain;
>
>         /* Skip SGEI interrupt setup for zero guest external interrupts */
> -       if (!kvm_riscv_aia_nr_hgei)
> +       if (!kvm_riscv_aia_hgei_enabled)
>                 goto skip_sgei_interrupt;
>
>         /* Find INTC irq domain */
> @@ -524,7 +524,7 @@ static int aia_hgei_init(void)
>  static void aia_hgei_exit(void)
>  {
>         /* Do nothing for zero guest external interrupts */
> -       if (!kvm_riscv_aia_nr_hgei)
> +       if (!kvm_riscv_aia_hgei_enabled)
>                 return;
>
>         /* Free per-CPU SGEI interrupt */
> @@ -631,6 +631,7 @@ int kvm_riscv_aia_init(void)
>  {
>         int rc;
>         const struct imsic_global_config *gc;
> +       unsigned int kvm_riscv_aia_nr_hgei;
>
>         if (!riscv_isa_extension_available(NULL, SxAIA))
>                 return -ENODEV;
> @@ -641,21 +642,18 @@ int kvm_riscv_aia_init(void)
>         kvm_riscv_aia_nr_hgei = fls_long(csr_read(CSR_HGEIE));
>         csr_write(CSR_HGEIE, 0);
>         if (kvm_riscv_aia_nr_hgei)
> -               kvm_riscv_aia_nr_hgei--;
> +               kvm_riscv_aia_hgei_enabled = true;
>
>         /*
>          * Number of usable HGEI lines should be minimum of per-HART
>          * IMSIC guest files and number of bits in HGEIE
>          */
> -       if (gc)
> -               kvm_riscv_aia_nr_hgei = min((ulong)kvm_riscv_aia_nr_hgei,
> -                                           gc->nr_guest_files);
> -       else
> -               kvm_riscv_aia_nr_hgei = 0;
> +       if (!gc)
> +               kvm_riscv_aia_hgei_enabled = 0;
>
>         /* Find number of guest MSI IDs */
>         kvm_riscv_aia_max_ids = IMSIC_MAX_ID;
> -       if (gc && kvm_riscv_aia_nr_hgei)
> +       if (gc && kvm_riscv_aia_hgei_enabled)
>                 kvm_riscv_aia_max_ids = gc->nr_guest_ids + 1;
>
>         /* Initialize guest external interrupt line management */
> diff --git a/arch/riscv/kvm/aia_device.c b/arch/riscv/kvm/aia_device.c
> index 3d1e81e2a36b..5b45b1114425 100644
> --- a/arch/riscv/kvm/aia_device.c
> +++ b/arch/riscv/kvm/aia_device.c
> @@ -71,7 +71,7 @@ static int aia_config(struct kvm *kvm, unsigned long type,
>                                  * external interrupts (i.e. non-zero
>                                  * VS-level IMSIC pages).
>                                  */
> -                               if (!kvm_riscv_aia_nr_hgei)
> +                               if (!kvm_riscv_aia_hgei_enabled)
>                                         return -EINVAL;
>                                 break;
>                         default:
> @@ -628,7 +628,7 @@ void kvm_riscv_aia_init_vm(struct kvm *kvm)
>          */
>
>         /* Initialize default values in AIA global context */
> -       aia->mode = (kvm_riscv_aia_nr_hgei) ?
> +       aia->mode = (kvm_riscv_aia_hgei_enabled) ?
>                 KVM_DEV_RISCV_AIA_MODE_AUTO : KVM_DEV_RISCV_AIA_MODE_EMUL;
>         aia->nr_ids = kvm_riscv_aia_max_ids - 1;
>         aia->nr_sources = 0;
> diff --git a/arch/riscv/kvm/main.c b/arch/riscv/kvm/main.c
> index cb8a65273c1f..bcfa139f4871 100644
> --- a/arch/riscv/kvm/main.c
> +++ b/arch/riscv/kvm/main.c
> @@ -169,8 +169,7 @@ static int __init riscv_kvm_init(void)
>         kvm_info("VMID %ld bits available\n", kvm_riscv_gstage_vmid_bits());
>
>         if (kvm_riscv_aia_available())
> -               kvm_info("AIA available with %d guest external interrupts\n",
> -                        kvm_riscv_aia_nr_hgei);
> +               kvm_info("AIA available with guest external interrupts\n");
>
>         kvm_riscv_setup_vendor_features();
>
> --
> 2.43.0
>

Regards,
Anup

-- 
kvm-riscv mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kvm-riscv
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.