Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

irq_work: Introduce arch_irq_work_has_interrupt()

The nohz full code needs irq work to trigger its own interrupt so that
the subsystem can work even when the tick is stopped.

Lets introduce arch_irq_work_has_interrupt() that archs can override to
tell about their support for this ability.

Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>

authored by

Peter Zijlstra and committed by
Frederic Weisbecker
c5c38ef3 a80e49e2

+42 -1
+1
arch/alpha/include/asm/Kbuild
··· 4 4 generic-y += cputime.h 5 5 generic-y += exec.h 6 6 generic-y += hash.h 7 + generic-y += irq_work.h 7 8 generic-y += mcs_spinlock.h 8 9 generic-y += preempt.h 9 10 generic-y += scatterlist.h
+1
arch/arc/include/asm/Kbuild
··· 18 18 generic-y += ioctls.h 19 19 generic-y += ipcbuf.h 20 20 generic-y += irq_regs.h 21 + generic-y += irq_work.h 21 22 generic-y += kmap_types.h 22 23 generic-y += kvm_para.h 23 24 generic-y += local.h
+1
arch/arm/include/asm/Kbuild
··· 11 11 generic-y += ioctl.h 12 12 generic-y += ipcbuf.h 13 13 generic-y += irq_regs.h 14 + generic-y += irq_work.h 14 15 generic-y += kdebug.h 15 16 generic-y += local.h 16 17 generic-y += local64.h
+2 -1
arch/arm64/include/asm/Kbuild
··· 9 9 generic-y += delay.h 10 10 generic-y += div64.h 11 11 generic-y += dma.h 12 - generic-y += emergency-restart.h 13 12 generic-y += early_ioremap.h 13 + generic-y += emergency-restart.h 14 14 generic-y += errno.h 15 15 generic-y += ftrace.h 16 16 generic-y += hash.h ··· 19 19 generic-y += ioctls.h 20 20 generic-y += ipcbuf.h 21 21 generic-y += irq_regs.h 22 + generic-y += irq_work.h 22 23 generic-y += kdebug.h 23 24 generic-y += kmap_types.h 24 25 generic-y += kvm_para.h
+1
arch/avr32/include/asm/Kbuild
··· 9 9 generic-y += futex.h 10 10 generic-y += hash.h 11 11 generic-y += irq_regs.h 12 + generic-y += irq_work.h 12 13 generic-y += local.h 13 14 generic-y += local64.h 14 15 generic-y += mcs_spinlock.h
+1
arch/blackfin/include/asm/Kbuild
··· 15 15 generic-y += ioctl.h 16 16 generic-y += ipcbuf.h 17 17 generic-y += irq_regs.h 18 + generic-y += irq_work.h 18 19 generic-y += kdebug.h 19 20 generic-y += kmap_types.h 20 21 generic-y += kvm_para.h
+1
arch/c6x/include/asm/Kbuild
··· 22 22 generic-y += ioctls.h 23 23 generic-y += ipcbuf.h 24 24 generic-y += irq_regs.h 25 + generic-y += irq_work.h 25 26 generic-y += kdebug.h 26 27 generic-y += kmap_types.h 27 28 generic-y += local.h
+1
arch/cris/include/asm/Kbuild
··· 8 8 generic-y += cputime.h 9 9 generic-y += exec.h 10 10 generic-y += hash.h 11 + generic-y += irq_work.h 11 12 generic-y += kvm_para.h 12 13 generic-y += linkage.h 13 14 generic-y += mcs_spinlock.h
+1
arch/frv/include/asm/Kbuild
··· 3 3 generic-y += cputime.h 4 4 generic-y += exec.h 5 5 generic-y += hash.h 6 + generic-y += irq_work.h 6 7 generic-y += mcs_spinlock.h 7 8 generic-y += preempt.h 8 9 generic-y += scatterlist.h
+1
arch/hexagon/include/asm/Kbuild
··· 23 23 generic-y += iomap.h 24 24 generic-y += ipcbuf.h 25 25 generic-y += irq_regs.h 26 + generic-y += irq_work.h 26 27 generic-y += kdebug.h 27 28 generic-y += kmap_types.h 28 29 generic-y += local.h
+1
arch/ia64/include/asm/Kbuild
··· 2 2 generic-y += clkdev.h 3 3 generic-y += exec.h 4 4 generic-y += hash.h 5 + generic-y += irq_work.h 5 6 generic-y += kvm_para.h 6 7 generic-y += mcs_spinlock.h 7 8 generic-y += preempt.h
+1
arch/m32r/include/asm/Kbuild
··· 3 3 generic-y += cputime.h 4 4 generic-y += exec.h 5 5 generic-y += hash.h 6 + generic-y += irq_work.h 6 7 generic-y += mcs_spinlock.h 7 8 generic-y += module.h 8 9 generic-y += preempt.h
+1
arch/m68k/include/asm/Kbuild
··· 11 11 generic-y += ioctl.h 12 12 generic-y += ipcbuf.h 13 13 generic-y += irq_regs.h 14 + generic-y += irq_work.h 14 15 generic-y += kdebug.h 15 16 generic-y += kmap_types.h 16 17 generic-y += kvm_para.h
+1
arch/metag/include/asm/Kbuild
··· 19 19 generic-y += ioctls.h 20 20 generic-y += ipcbuf.h 21 21 generic-y += irq_regs.h 22 + generic-y += irq_work.h 22 23 generic-y += kdebug.h 23 24 generic-y += kmap_types.h 24 25 generic-y += kvm_para.h
+1
arch/microblaze/include/asm/Kbuild
··· 5 5 generic-y += device.h 6 6 generic-y += exec.h 7 7 generic-y += hash.h 8 + generic-y += irq_work.h 8 9 generic-y += mcs_spinlock.h 9 10 generic-y += preempt.h 10 11 generic-y += scatterlist.h
+1
arch/mips/include/asm/Kbuild
··· 3 3 generic-y += current.h 4 4 generic-y += emergency-restart.h 5 5 generic-y += hash.h 6 + generic-y += irq_work.h 6 7 generic-y += local64.h 7 8 generic-y += mcs_spinlock.h 8 9 generic-y += mutex.h
+1
arch/mn10300/include/asm/Kbuild
··· 4 4 generic-y += cputime.h 5 5 generic-y += exec.h 6 6 generic-y += hash.h 7 + generic-y += irq_work.h 7 8 generic-y += mcs_spinlock.h 8 9 generic-y += preempt.h 9 10 generic-y += scatterlist.h
+1
arch/openrisc/include/asm/Kbuild
··· 31 31 generic-y += ioctls.h 32 32 generic-y += ipcbuf.h 33 33 generic-y += irq_regs.h 34 + generic-y += irq_work.h 34 35 generic-y += kdebug.h 35 36 generic-y += kmap_types.h 36 37 generic-y += kvm_para.h
+1
arch/parisc/include/asm/Kbuild
··· 10 10 generic-y += hash.h 11 11 generic-y += hw_irq.h 12 12 generic-y += irq_regs.h 13 + generic-y += irq_work.h 13 14 generic-y += kdebug.h 14 15 generic-y += kvm_para.h 15 16 generic-y += local.h
+1
arch/powerpc/include/asm/Kbuild
··· 1 1 2 2 generic-y += clkdev.h 3 3 generic-y += hash.h 4 + generic-y += irq_work.h 4 5 generic-y += mcs_spinlock.h 5 6 generic-y += preempt.h 6 7 generic-y += rwsem.h
+1
arch/s390/include/asm/Kbuild
··· 2 2 3 3 generic-y += clkdev.h 4 4 generic-y += hash.h 5 + generic-y += irq_work.h 5 6 generic-y += mcs_spinlock.h 6 7 generic-y += preempt.h 7 8 generic-y += scatterlist.h
+1
arch/score/include/asm/Kbuild
··· 6 6 generic-y += clkdev.h 7 7 generic-y += cputime.h 8 8 generic-y += hash.h 9 + generic-y += irq_work.h 9 10 generic-y += mcs_spinlock.h 10 11 generic-y += preempt.h 11 12 generic-y += scatterlist.h
+1
arch/sh/include/asm/Kbuild
··· 12 12 generic-y += ioctl.h 13 13 generic-y += ipcbuf.h 14 14 generic-y += irq_regs.h 15 + generic-y += irq_work.h 15 16 generic-y += kvm_para.h 16 17 generic-y += local.h 17 18 generic-y += local64.h
+1
arch/sparc/include/asm/Kbuild
··· 8 8 generic-y += exec.h 9 9 generic-y += hash.h 10 10 generic-y += irq_regs.h 11 + generic-y += irq_work.h 11 12 generic-y += linkage.h 12 13 generic-y += local.h 13 14 generic-y += local64.h
+1
arch/tile/include/asm/Kbuild
··· 17 17 generic-y += ioctls.h 18 18 generic-y += ipcbuf.h 19 19 generic-y += irq_regs.h 20 + generic-y += irq_work.h 20 21 generic-y += local.h 21 22 generic-y += local64.h 22 23 generic-y += mcs_spinlock.h
+1
arch/um/include/asm/Kbuild
··· 14 14 generic-y += hw_irq.h 15 15 generic-y += io.h 16 16 generic-y += irq_regs.h 17 + generic-y += irq_work.h 17 18 generic-y += kdebug.h 18 19 generic-y += mcs_spinlock.h 19 20 generic-y += mutex.h
+1
arch/unicore32/include/asm/Kbuild
··· 22 22 generic-y += ioctls.h 23 23 generic-y += ipcbuf.h 24 24 generic-y += irq_regs.h 25 + generic-y += irq_work.h 25 26 generic-y += kdebug.h 26 27 generic-y += kmap_types.h 27 28 generic-y += local.h
+1
arch/x86/include/asm/Kbuild
··· 7 7 generic-y += clkdev.h 8 8 generic-y += cputime.h 9 9 generic-y += early_ioremap.h 10 + generic-y += irq_work.h 10 11 generic-y += mcs_spinlock.h 11 12 generic-y += scatterlist.h
+1
arch/xtensa/include/asm/Kbuild
··· 12 12 generic-y += hash.h 13 13 generic-y += ioctl.h 14 14 generic-y += irq_regs.h 15 + generic-y += irq_work.h 15 16 generic-y += kdebug.h 16 17 generic-y += kmap_types.h 17 18 generic-y += kvm_para.h
+10
include/asm-generic/irq_work.h
··· 1 + #ifndef __ASM_IRQ_WORK_H 2 + #define __ASM_IRQ_WORK_H 3 + 4 + static inline bool arch_irq_work_has_interrupt(void) 5 + { 6 + return false; 7 + } 8 + 9 + #endif /* __ASM_IRQ_WORK_H */ 10 +
+2
include/linux/irq_work.h
··· 42 42 void irq_work_sync(struct irq_work *work); 43 43 44 44 #ifdef CONFIG_IRQ_WORK 45 + #include <asm/irq_work.h> 46 + 45 47 bool irq_work_needs_cpu(void); 46 48 #else 47 49 static inline bool irq_work_needs_cpu(void) { return false; }