[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] xen/arm: gic: Introduce GIC_PRI_{IRQ/IPI}_ALL
Hi Julien, On 3/2/22 10:40, Julien Grall wrote: > Hi Michal, > > On 02/03/2022 09:02, Michal Orzel wrote: >> Introduce macros GIC_PRI_IRQ_ALL and GIC_PRI_IPI_ALL to be used in all >> the places where we want to set default priority for all the offsets >> in interrupt priority register. This will improve readability and >> allow to get rid of introducing variables just to store this value. >> >> Take the opportunity to mark GIC_PRI_{IRQ/IPI} as unsigned values >> to suppress static analyzer warnings as they are used in expressions >> exceeding integer range (shifting into signed bit). Modify also other >> priority related macros to be coherent. >> >> Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx> >> --- >> xen/arch/arm/gic-v2.c | 12 +++--------- >> xen/arch/arm/gic-v3.c | 16 +++------------- >> xen/arch/arm/include/asm/gic.h | 12 ++++++++---- >> 3 files changed, 14 insertions(+), 26 deletions(-) >> >> diff --git a/xen/arch/arm/gic-v2.c b/xen/arch/arm/gic-v2.c >> index b2adc8ec9a..2cc2f6bc18 100644 >> --- a/xen/arch/arm/gic-v2.c >> +++ b/xen/arch/arm/gic-v2.c >> @@ -373,9 +373,7 @@ static void __init gicv2_dist_init(void) >> /* Default priority for global interrupts */ >> for ( i = 32; i < nr_lines; i += 4 ) >> - writel_gicd(GIC_PRI_IRQ << 24 | GIC_PRI_IRQ << 16 | >> - GIC_PRI_IRQ << 8 | GIC_PRI_IRQ, >> - GICD_IPRIORITYR + (i / 4) * 4); >> + writel_gicd(GIC_PRI_IRQ_ALL, GICD_IPRIORITYR + (i / 4) * 4); >> /* Disable all global interrupts */ >> for ( i = 32; i < nr_lines; i += 32 ) >> @@ -403,15 +401,11 @@ static void gicv2_cpu_init(void) >> /* Set SGI priorities */ >> for ( i = 0; i < 16; i += 4 ) >> - writel_gicd(GIC_PRI_IPI << 24 | GIC_PRI_IPI << 16 | >> - GIC_PRI_IPI << 8 | GIC_PRI_IPI, >> - GICD_IPRIORITYR + (i / 4) * 4); >> + writel_gicd(GIC_PRI_IPI_ALL, GICD_IPRIORITYR + (i / 4) * 4); >> /* Set PPI priorities */ >> for ( i = 16; i < 32; i += 4 ) >> - writel_gicd(GIC_PRI_IRQ << 24 | GIC_PRI_IRQ << 16 | >> - GIC_PRI_IRQ << 8 | GIC_PRI_IRQ, >> - GICD_IPRIORITYR + (i / 4) * 4); >> + writel_gicd(GIC_PRI_IRQ_ALL, GICD_IPRIORITYR + (i / 4) * 4); >> /* Local settings: interface controller */ >> /* Don't mask by priority */ >> diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c >> index 9a3a175ad7..3c472ed768 100644 >> --- a/xen/arch/arm/gic-v3.c >> +++ b/xen/arch/arm/gic-v3.c >> @@ -594,7 +594,6 @@ static void gicv3_set_irq_priority(struct irq_desc *desc, >> static void __init gicv3_dist_init(void) >> { >> uint32_t type; >> - uint32_t priority; >> uint64_t affinity; >> unsigned int nr_lines; >> int i; >> @@ -621,11 +620,7 @@ static void __init gicv3_dist_init(void) >> /* Default priority for global interrupts */ >> for ( i = NR_GIC_LOCAL_IRQS; i < nr_lines; i += 4 ) >> - { >> - priority = (GIC_PRI_IRQ << 24 | GIC_PRI_IRQ << 16 | >> - GIC_PRI_IRQ << 8 | GIC_PRI_IRQ); >> - writel_relaxed(priority, GICD + GICD_IPRIORITYR + (i / 4) * 4); >> - } >> + writel_relaxed(GIC_PRI_IRQ_ALL, GICD + GICD_IPRIORITYR + (i / 4) * >> 4); >> /* Disable/deactivate all global interrupts */ >> for ( i = NR_GIC_LOCAL_IRQS; i < nr_lines; i += 32 ) >> @@ -806,7 +801,6 @@ static int __init gicv3_populate_rdist(void) >> static int gicv3_cpu_init(void) >> { >> int i, ret; >> - uint32_t priority; >> /* Register ourselves with the rest of the world */ >> if ( gicv3_populate_rdist() ) >> @@ -826,16 +820,12 @@ static int gicv3_cpu_init(void) >> } >> /* Set priority on PPI and SGI interrupts */ >> - priority = (GIC_PRI_IPI << 24 | GIC_PRI_IPI << 16 | GIC_PRI_IPI << 8 | >> - GIC_PRI_IPI); >> for (i = 0; i < NR_GIC_SGI; i += 4) >> - writel_relaxed(priority, >> + writel_relaxed(GIC_PRI_IPI_ALL, >> GICD_RDIST_SGI_BASE + GICR_IPRIORITYR0 + (i / 4) * 4); >> - priority = (GIC_PRI_IRQ << 24 | GIC_PRI_IRQ << 16 | GIC_PRI_IRQ << 8 | >> - GIC_PRI_IRQ); >> for (i = NR_GIC_SGI; i < NR_GIC_LOCAL_IRQS; i += 4) >> - writel_relaxed(priority, >> + writel_relaxed(GIC_PRI_IRQ_ALL, >> GICD_RDIST_SGI_BASE + GICR_IPRIORITYR0 + (i / 4) * 4); >> /* >> diff --git a/xen/arch/arm/include/asm/gic.h b/xen/arch/arm/include/asm/gic.h >> index c7f0c343d1..69ceac36b1 100644 >> --- a/xen/arch/arm/include/asm/gic.h >> +++ b/xen/arch/arm/include/asm/gic.h >> @@ -143,10 +143,14 @@ >> * >> * A GIC must support a mimimum of 16 priority levels. >> */ >> -#define GIC_PRI_LOWEST 0xf0 >> -#define GIC_PRI_IRQ 0xa0 >> -#define GIC_PRI_IPI 0x90 /* IPIs must preempt normal interrupts */ >> -#define GIC_PRI_HIGHEST 0x80 /* Higher priorities belong to Secure-World >> */ >> +#define GIC_PRI_LOWEST 0xf0U >> +#define GIC_PRI_IRQ 0xa0U >> +#define GIC_PRI_IRQ_ALL ((GIC_PRI_IRQ << 24) | (GIC_PRI_IRQ << 16) |\ >> + (GIC_PRI_IRQ << 8) | GIC_PRI_IRQ) >> +#define GIC_PRI_IPI 0x90U /* IPIs must preempt normal interrupts */ >> +#define GIC_PRI_IPI_ALL ((GIC_PRI_IPI << 24) | (GIC_PRI_IPI << 16) |\ >> + (GIC_PRI_IPI << 8) | GIC_PRI_IPI) > This is matter of taste. I think it would read better to keep > GIC_PRI_{LOWEST, IRQ, IPI, HIGHEST} defined together and then define *_ALL > separately. > Ok, I will do this in v2. >> +#define GIC_PRI_HIGHEST 0x80U /* Higher priorities belong to >> Secure-World */ > > NIT: While you are there, I would suggest to add a newline here. So we > separate priority definitions from handy helpers. > Ok. >> #define GIC_PRI_TO_GUEST(pri) (pri >> 3) /* GICH_LR and GICH_VMCR only >> support >> 5 bits for guest irq priority >> */ > > Other than that. The patch itself looks good to me. So: > > Acked-by: Julien Grall <jgrall@xxxxxxxxxx> > > Cheers, > Cheers, Michal
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |