]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
s390/irq/idle: Remove psw bits early
authorHeiko Carstens <hca@linux.ibm.com>
Wed, 18 Feb 2026 14:20:09 +0000 (15:20 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Wed, 25 Feb 2026 15:46:07 +0000 (16:46 +0100)
Remove wait, io, external interrupt bits early in do_io_irq()/do_ext_irq()
when previous context was idle. This saves one conditional branch and is
closer to the original old assembly code.

Reviewed-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/kernel/irq.c

index d10a17e6531dae0d42fac6cd7ffef77f6cb2b131..7fdf960191d371ad5ee5d4ca1fde1d28aa28a537 100644 (file)
@@ -147,8 +147,10 @@ void noinstr do_io_irq(struct pt_regs *regs)
        bool from_idle;
 
        from_idle = test_and_clear_cpu_flag(CIF_ENABLED_WAIT);
-       if (from_idle)
+       if (from_idle) {
                update_timer_idle();
+               regs->psw.mask &= ~(PSW_MASK_EXT | PSW_MASK_IO | PSW_MASK_WAIT);
+       }
 
        irq_enter_rcu();
 
@@ -174,9 +176,6 @@ void noinstr do_io_irq(struct pt_regs *regs)
 
        set_irq_regs(old_regs);
        irqentry_exit(regs, state);
-
-       if (from_idle)
-               regs->psw.mask &= ~(PSW_MASK_EXT | PSW_MASK_IO | PSW_MASK_WAIT);
 }
 
 void noinstr do_ext_irq(struct pt_regs *regs)
@@ -186,8 +185,10 @@ void noinstr do_ext_irq(struct pt_regs *regs)
        bool from_idle;
 
        from_idle = test_and_clear_cpu_flag(CIF_ENABLED_WAIT);
-       if (from_idle)
+       if (from_idle) {
                update_timer_idle();
+               regs->psw.mask &= ~(PSW_MASK_EXT | PSW_MASK_IO | PSW_MASK_WAIT);
+       }
 
        irq_enter_rcu();
 
@@ -209,9 +210,6 @@ void noinstr do_ext_irq(struct pt_regs *regs)
        irq_exit_rcu();
        set_irq_regs(old_regs);
        irqentry_exit(regs, state);
-
-       if (from_idle)
-               regs->psw.mask &= ~(PSW_MASK_EXT | PSW_MASK_IO | PSW_MASK_WAIT);
 }
 
 static void show_msi_interrupt(struct seq_file *p, int irq)