[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4 01/12] xen/arm: gicv3: refactor obtaining GIC addresses for common operations
Hi Julien, On 28.08.25 15:00, Julien Grall wrote: > Hi Leonid, > > On 27/08/2025 19:24, Leonid Komarianskyi wrote: >> Currently, many common functions perform the same operations to calculate >> GIC register addresses. This patch consolidates the similar code into >> a separate helper function to improve maintainability and reduce >> duplication. >> This refactoring also simplifies the implementation of eSPI support in >> future >> changes. >> >> Signed-off-by: Leonid Komarianskyi <leonid_komarianskyi@xxxxxxxx> >> Reviewed-by: Volodymyr Babchuk <volodymyr_babchuk@xxxxxxxx> >> >> --- >> Changes in V4: >> - no changes >> >> Changes in V3: >> - changed panic() in get_addr_by_offset() to printing warning and >> ASSERT_UNREACHABLE() >> - added verification of return pointer from get_addr_by_offset() in the >> callers >> - moved invocation of get_addr_by_offset() from spinlock guards, since >> it is not necessarry >> - added RB from Volodymyr Babchuk > > Procces remark, here you said the Reviewed-by from Volodymyr was added > in v3. However, given the changes you made this should have been > invalidated (reviewed-by means the person read the code and confirmed it > is correct). > > I see Volodymyr confirmed his reviewed-by on v3. So no issue, but this > should have been clarified in the changelog. > Thank you for your explanation. Just to clarify: would it be okay to leave the RB tag (with appropriate text in the changelog) if I fix some minor nit from another reviewer in the next version, like in this patch? >> >> Changes in V2: >> - no changes >> --- >> xen/arch/arm/gic-v3.c | 114 +++++++++++++++++++++++---------- >> xen/arch/arm/include/asm/irq.h | 1 + >> 2 files changed, 81 insertions(+), 34 deletions(-) >> >> diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c >> index cd3e1acf79..a959fefebe 100644 >> --- a/xen/arch/arm/gic-v3.c >> +++ b/xen/arch/arm/gic-v3.c >> @@ -445,17 +445,67 @@ static void gicv3_dump_state(const struct vcpu *v) >> } >> } >> +static void __iomem *get_addr_by_offset(struct irq_desc *irqd, u32 >> offset) >> +{ >> + switch ( irqd->irq ) >> + { >> + case 0 ... (NR_GIC_LOCAL_IRQS - 1): >> + switch ( offset ) >> + { >> + case GICD_ISENABLER: >> + case GICD_ICENABLER: >> + case GICD_ISPENDR: >> + case GICD_ICPENDR: >> + case GICD_ISACTIVER: >> + case GICD_ICACTIVER: >> + return (GICD_RDIST_SGI_BASE + offset); >> + case GICD_ICFGR: >> + return (GICD_RDIST_SGI_BASE + GICR_ICFGR1); >> + case GICD_IPRIORITYR: >> + return (GICD_RDIST_SGI_BASE + GICR_IPRIORITYR0 + irqd->irq); >> + default: >> + break; >> + } >> + case NR_GIC_LOCAL_IRQS ... SPI_MAX_INTID: >> + switch ( offset ) >> + { >> + case GICD_ISENABLER: >> + case GICD_ICENABLER: >> + case GICD_ISPENDR: >> + case GICD_ICPENDR: >> + case GICD_ISACTIVER: >> + case GICD_ICACTIVER: >> + return (GICD + offset + (irqd->irq / 32) * 4); >> + case GICD_ICFGR: >> + return (GICD + GICD_ICFGR + (irqd->irq / 16) * 4); >> + case GICD_IROUTER: >> + return (GICD + GICD_IROUTER + irqd->irq * 8); >> + case GICD_IPRIORITYR: >> + return (GICD + GICD_IPRIORITYR + irqd->irq); >> + default: >> + break; >> + } >> + default: >> + break; >> + } >> + >> + /* Something went wrong, we shouldn't be able to reach here */ >> + printk(XENLOG_WARNING "GICv3: WARNING: Invalid offset 0x%x for >> IRQ#%d", > > NIT: I am not expecting the interrupt to be < 0. So it would be > preferable to use %u. > > Acked-by: Julien Grall <jgrall@xxxxxxxxxx> > > Cheers, > Thank you for your AB. I will fix the nit in V5. Best regards, Leonid
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |