[RFC PATCH 18/36] arm64: gicv3: remove GIC_PRIO_PSR_I_SET

Vladimir Murzin vladimir.murzin at arm.com
Wed Jul 22 07:10:40 PDT 2026


On 7/22/26 09:20, Jinjie Ruan wrote:
> 
> On 7/9/2026 8:13 PM, Vladimir Murzin wrote:
>> From: Ada Couprie Diaz <ada.coupriediaz at arm.com>
>>
>> `GIC_PRIO_PSR_I_SET` was used to keep track of sections of the kernel
>> where interrupts always need to reach the CPU and could not be masked
> Did I miss something? I have not seen this usage of GIC_PRIO_PSR_I_SET.
> In the kernel code I have observed, the use of GIC_PRIO_PSR_I_SET is
> always because the interrupt has already been masked by the DAIF.I bit.
> 

It attempts to describe the semantics of GIC_PRIO_PSR_I_SET. We
use it in cases where GIC_PRIO_IRQOFF is not possible. Instead,
we set DAIF.I and program PMR to GIC_PRIO_IRQON | GIC_PRIO_PSR_I_SET.

GIC_PRIO_PSR_I_SET lets us distinguish such cases from plain
GIC_PRIO_IRQON

>> via interrupt priorities, or DAIF bypassed the status of the PMR.
>>
>> This flag unmasked IRQs when OR'd to GIC_PRIO_IRQOFF and ensured that
> Did I miss something? I didn't see the code related to the OR'd to
> GIC_PRIO_IRQOFF.
> 

It describes concept of GIC_PRIO_IRQON | GIC_PRIO_PSR_I_SET, but wrongly
refers to GIC_PRIO_IRQOFF. I'll fix that.

> otherwise, LGTM
> Reviewed-by: Jinjie Ruan <ruanjinjie at huawei.com>
> 
> 

Thanks
Vladimir

>> that IRQs were seen as disabled by the `local_irqs_...` functions,
>> as they would only check the PMR if pseudo-NMIs were enabled.
>>
>> This is not needed anymore as our IRQ masking APIs now know how to handle
>> interrupt priorities properly and in parallel with DAIF : remove it.
>>
>> Signed-off-by: Ada Couprie Diaz <ada.coupriediaz at arm.com>
>> Signed-off-by: Vladimir Murzin <vladimir.murzin at arm.com>
>> ---
>>  arch/arm64/include/asm/ptrace.h         | 2 --
>>  include/linux/irqchip/arm-gic-v3-prio.h | 8 --------
>>  2 files changed, 10 deletions(-)
>>
>> diff --git a/arch/arm64/include/asm/ptrace.h b/arch/arm64/include/asm/ptrace.h
>> index 192eb97cd50b..c630165882e8 100644
>> --- a/arch/arm64/include/asm/ptrace.h
>> +++ b/arch/arm64/include/asm/ptrace.h
>> @@ -24,8 +24,6 @@
>>  #define GIC_PRIO_IRQON		GICV3_PRIO_UNMASKED
>>  #define GIC_PRIO_IRQOFF		GICV3_PRIO_IRQ
>>  
>> -#define GIC_PRIO_PSR_I_SET	GICV3_PRIO_PSR_I_SET
>> -
>>  /* Additional SPSR bits not exposed in the UABI */
>>  #define PSR_MODE_THREAD_BIT	(1 << 0)
>>  #define PSR_IL_BIT		(1 << 20)
>> diff --git a/include/linux/irqchip/arm-gic-v3-prio.h b/include/linux/irqchip/arm-gic-v3-prio.h
>> index 44157c9abb78..464bf1d29453 100644
>> --- a/include/linux/irqchip/arm-gic-v3-prio.h
>> +++ b/include/linux/irqchip/arm-gic-v3-prio.h
>> @@ -20,17 +20,11 @@
>>   * GICV3_PRIO_NMI is the PMR view of the priority of pseudo-NMIs. This can be
>>   * written to the PMR to mask pseudo-NMIs.
>>   *
>> - * On arm64 some code sections either automatically switch back to PSR.I or
>> - * explicitly require to not use priority masking. If bit GICV3_PRIO_PSR_I_SET
>> - * is included in the priority mask, it indicates that PSR.I should be set and
>> - * interrupt disabling temporarily does not rely on IRQ priorities.
>>   */
>>  #define GICV3_PRIO_UNMASKED	0xe0
>>  #define GICV3_PRIO_IRQ		0xc0
>>  #define GICV3_PRIO_NMI		0x80
>>  
>> -#define GICV3_PRIO_PSR_I_SET	(1 << 4)
>> -
>>  #ifndef __ASSEMBLER__
>>  
>>  #define __gicv3_prio_to_ns(p)	(0xff & ((p) << 1))
>> @@ -45,8 +39,6 @@ static_assert(__gicv3_prio_valid_ns(GICV3_PRIO_IRQ));
>>  static_assert(GICV3_PRIO_NMI < GICV3_PRIO_IRQ);
>>  static_assert(GICV3_PRIO_IRQ < GICV3_PRIO_UNMASKED);
>>  
>> -static_assert(GICV3_PRIO_IRQ < (GICV3_PRIO_IRQ | GICV3_PRIO_PSR_I_SET));
>> -
>>  #endif /* __ASSEMBLER */
>>  
>>  #endif /* __LINUX_IRQCHIP_ARM_GIC_V3_PRIO_H */
> 




More information about the linux-arm-kernel mailing list