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