]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
arm64: ptrace: Replace interrupts_enabled() with regs_irqs_disabled()
authorJinjie Ruan <ruanjinjie@huawei.com>
Fri, 15 Aug 2025 03:06:26 +0000 (11:06 +0800)
committerWill Deacon <will@kernel.org>
Thu, 11 Sep 2025 14:55:34 +0000 (15:55 +0100)
The generic entry code expects architecture code to provide
regs_irqs_disabled(regs) function, but arm64 does not have this and
provides interrupts_enabled(regs), which has the opposite polarity.

In preparation for moving arm64 over to the generic entry code,
relace arm64's interrupts_enabled() with regs_irqs_disabled() and
update its callers under arch/arm64.

For the moment, a definition of interrupts_enabled() is provided for
the GICv3 driver. Once arch/arm implement regs_irqs_disabled(), this
can be removed.

Delete the fast_interrupts_enabled() macro as it is unused and we
don't want any new users to show up.

No functional changes.

Reviewed-by: Ada Couprie Diaz <ada.coupriediaz@arm.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
Suggested-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/include/asm/daifflags.h
arch/arm64/include/asm/ptrace.h
arch/arm64/include/asm/xen/events.h
arch/arm64/kernel/acpi.c
arch/arm64/kernel/debug-monitors.c
arch/arm64/kernel/entry-common.c
arch/arm64/kernel/sdei.c

index fbb5c99eb2f9d6edd49d2829cb0adf00dfd50459..5fca480090434c2c57f06ab9f707d7dc78c152b6 100644 (file)
@@ -128,7 +128,7 @@ static inline void local_daif_inherit(struct pt_regs *regs)
 {
        unsigned long flags = regs->pstate & DAIF_MASK;
 
-       if (interrupts_enabled(regs))
+       if (!regs_irqs_disabled(regs))
                trace_hardirqs_on();
 
        if (system_uses_irq_prio_masking())
index 47ff8654c5ec1e976f9df48e20774d999a040591..8b915d4a9d4b326dd83d6f63fe119c9dbb2a399e 100644 (file)
@@ -214,11 +214,12 @@ static inline void forget_syscall(struct pt_regs *regs)
                (regs)->pmr == GIC_PRIO_IRQON :                         \
                true)
 
-#define interrupts_enabled(regs)                       \
-       (!((regs)->pstate & PSR_I_BIT) && irqs_priority_unmasked(regs))
+static __always_inline bool regs_irqs_disabled(const struct pt_regs *regs)
+{
+       return (regs->pstate & PSR_I_BIT) || !irqs_priority_unmasked(regs);
+}
 
-#define fast_interrupts_enabled(regs) \
-       (!((regs)->pstate & PSR_F_BIT))
+#define interrupts_enabled(regs)       (!regs_irqs_disabled(regs))
 
 static inline unsigned long user_stack_pointer(struct pt_regs *regs)
 {
index 2788e95d0ff022512dfc112460fc5337eca1ad3f..2977b5fe068dbe23c2e5afa1e8f83a8b59e614bd 100644 (file)
@@ -14,7 +14,7 @@ enum ipi_vector {
 
 static inline int xen_irqs_disabled(struct pt_regs *regs)
 {
-       return !interrupts_enabled(regs);
+       return regs_irqs_disabled(regs);
 }
 
 #define xchg_xen_ulong(ptr, val) xchg((ptr), (val))
index 4d529ff7ba513a5b422fedef5720cdb80829e547..3fbce0a9a0fe8f0e0ad9ef3d32f703ba8e2c6567 100644 (file)
@@ -407,7 +407,7 @@ int apei_claim_sea(struct pt_regs *regs)
        return_to_irqs_enabled = !irqs_disabled_flags(arch_local_save_flags());
 
        if (regs)
-               return_to_irqs_enabled = interrupts_enabled(regs);
+               return_to_irqs_enabled = !regs_irqs_disabled(regs);
 
        /*
         * SEA can interrupt SError, mask it and describe this as an NMI so
index 110d9ff54174f738e3324033443044ecee21cf00..85fc162a6f9be777964861ba8aef154de53d7630 100644 (file)
@@ -167,7 +167,7 @@ static void send_user_sigtrap(int si_code)
        if (WARN_ON(!user_mode(regs)))
                return;
 
-       if (interrupts_enabled(regs))
+       if (!regs_irqs_disabled(regs))
                local_irq_enable();
 
        arm64_force_sig_fault(SIGTRAP, si_code, instruction_pointer(regs),
index 2b0c5925502e7073c269d710c75532a394113096..8e798f46ad28281c61ee214a6923150d2e26f3c1 100644 (file)
@@ -74,7 +74,7 @@ static __always_inline void __exit_to_kernel_mode(struct pt_regs *regs)
 {
        lockdep_assert_irqs_disabled();
 
-       if (interrupts_enabled(regs)) {
+       if (!regs_irqs_disabled(regs)) {
                if (regs->exit_rcu) {
                        trace_hardirqs_on_prepare();
                        lockdep_hardirqs_on_prepare();
@@ -662,7 +662,7 @@ static void noinstr el1_interrupt(struct pt_regs *regs,
 {
        write_sysreg(DAIF_PROCCTX_NOIRQ, daif);
 
-       if (IS_ENABLED(CONFIG_ARM64_PSEUDO_NMI) && !interrupts_enabled(regs))
+       if (IS_ENABLED(CONFIG_ARM64_PSEUDO_NMI) && regs_irqs_disabled(regs))
                __el1_pnmi(regs, handler);
        else
                __el1_irq(regs, handler);
index 6f24a0251e183756685654002b15199296d5dc27..95169f7b653198a438cf5ca27d473b54cfc87dce 100644 (file)
@@ -243,7 +243,7 @@ unsigned long __kprobes do_sdei_event(struct pt_regs *regs,
         * If we interrupted the kernel with interrupts masked, we always go
         * back to wherever we came from.
         */
-       if (mode == kernel_mode && !interrupts_enabled(regs))
+       if (mode == kernel_mode && regs_irqs_disabled(regs))
                return SDEI_EV_HANDLED;
 
        /*