Commit c5c38ef3 authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Frederic Weisbecker

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: default avatarPeter 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: default avatarFrederic Weisbecker <fweisbec@gmail.com>
parent a80e49e2
...@@ -4,6 +4,7 @@ generic-y += clkdev.h ...@@ -4,6 +4,7 @@ generic-y += clkdev.h
generic-y += cputime.h generic-y += cputime.h
generic-y += exec.h generic-y += exec.h
generic-y += hash.h generic-y += hash.h
generic-y += irq_work.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
generic-y += preempt.h generic-y += preempt.h
generic-y += scatterlist.h generic-y += scatterlist.h
......
...@@ -18,6 +18,7 @@ generic-y += ioctl.h ...@@ -18,6 +18,7 @@ generic-y += ioctl.h
generic-y += ioctls.h generic-y += ioctls.h
generic-y += ipcbuf.h generic-y += ipcbuf.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += kmap_types.h generic-y += kmap_types.h
generic-y += kvm_para.h generic-y += kvm_para.h
generic-y += local.h generic-y += local.h
......
...@@ -11,6 +11,7 @@ generic-y += hash.h ...@@ -11,6 +11,7 @@ generic-y += hash.h
generic-y += ioctl.h generic-y += ioctl.h
generic-y += ipcbuf.h generic-y += ipcbuf.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += kdebug.h generic-y += kdebug.h
generic-y += local.h generic-y += local.h
generic-y += local64.h generic-y += local64.h
......
...@@ -9,8 +9,8 @@ generic-y += current.h ...@@ -9,8 +9,8 @@ generic-y += current.h
generic-y += delay.h generic-y += delay.h
generic-y += div64.h generic-y += div64.h
generic-y += dma.h generic-y += dma.h
generic-y += emergency-restart.h
generic-y += early_ioremap.h generic-y += early_ioremap.h
generic-y += emergency-restart.h
generic-y += errno.h generic-y += errno.h
generic-y += ftrace.h generic-y += ftrace.h
generic-y += hash.h generic-y += hash.h
...@@ -19,6 +19,7 @@ generic-y += ioctl.h ...@@ -19,6 +19,7 @@ generic-y += ioctl.h
generic-y += ioctls.h generic-y += ioctls.h
generic-y += ipcbuf.h generic-y += ipcbuf.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += kdebug.h generic-y += kdebug.h
generic-y += kmap_types.h generic-y += kmap_types.h
generic-y += kvm_para.h generic-y += kvm_para.h
......
...@@ -9,6 +9,7 @@ generic-y += exec.h ...@@ -9,6 +9,7 @@ generic-y += exec.h
generic-y += futex.h generic-y += futex.h
generic-y += hash.h generic-y += hash.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += local.h generic-y += local.h
generic-y += local64.h generic-y += local64.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
......
...@@ -15,6 +15,7 @@ generic-y += hw_irq.h ...@@ -15,6 +15,7 @@ generic-y += hw_irq.h
generic-y += ioctl.h generic-y += ioctl.h
generic-y += ipcbuf.h generic-y += ipcbuf.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += kdebug.h generic-y += kdebug.h
generic-y += kmap_types.h generic-y += kmap_types.h
generic-y += kvm_para.h generic-y += kvm_para.h
......
...@@ -22,6 +22,7 @@ generic-y += ioctl.h ...@@ -22,6 +22,7 @@ generic-y += ioctl.h
generic-y += ioctls.h generic-y += ioctls.h
generic-y += ipcbuf.h generic-y += ipcbuf.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += kdebug.h generic-y += kdebug.h
generic-y += kmap_types.h generic-y += kmap_types.h
generic-y += local.h generic-y += local.h
......
...@@ -8,6 +8,7 @@ generic-y += clkdev.h ...@@ -8,6 +8,7 @@ generic-y += clkdev.h
generic-y += cputime.h generic-y += cputime.h
generic-y += exec.h generic-y += exec.h
generic-y += hash.h generic-y += hash.h
generic-y += irq_work.h
generic-y += kvm_para.h generic-y += kvm_para.h
generic-y += linkage.h generic-y += linkage.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
......
...@@ -3,6 +3,7 @@ generic-y += clkdev.h ...@@ -3,6 +3,7 @@ generic-y += clkdev.h
generic-y += cputime.h generic-y += cputime.h
generic-y += exec.h generic-y += exec.h
generic-y += hash.h generic-y += hash.h
generic-y += irq_work.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
generic-y += preempt.h generic-y += preempt.h
generic-y += scatterlist.h generic-y += scatterlist.h
......
...@@ -23,6 +23,7 @@ generic-y += ioctls.h ...@@ -23,6 +23,7 @@ generic-y += ioctls.h
generic-y += iomap.h generic-y += iomap.h
generic-y += ipcbuf.h generic-y += ipcbuf.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += kdebug.h generic-y += kdebug.h
generic-y += kmap_types.h generic-y += kmap_types.h
generic-y += local.h generic-y += local.h
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
generic-y += clkdev.h generic-y += clkdev.h
generic-y += exec.h generic-y += exec.h
generic-y += hash.h generic-y += hash.h
generic-y += irq_work.h
generic-y += kvm_para.h generic-y += kvm_para.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
generic-y += preempt.h generic-y += preempt.h
......
...@@ -3,6 +3,7 @@ generic-y += clkdev.h ...@@ -3,6 +3,7 @@ generic-y += clkdev.h
generic-y += cputime.h generic-y += cputime.h
generic-y += exec.h generic-y += exec.h
generic-y += hash.h generic-y += hash.h
generic-y += irq_work.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
generic-y += module.h generic-y += module.h
generic-y += preempt.h generic-y += preempt.h
......
...@@ -11,6 +11,7 @@ generic-y += hw_irq.h ...@@ -11,6 +11,7 @@ generic-y += hw_irq.h
generic-y += ioctl.h generic-y += ioctl.h
generic-y += ipcbuf.h generic-y += ipcbuf.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += kdebug.h generic-y += kdebug.h
generic-y += kmap_types.h generic-y += kmap_types.h
generic-y += kvm_para.h generic-y += kvm_para.h
......
...@@ -19,6 +19,7 @@ generic-y += ioctl.h ...@@ -19,6 +19,7 @@ generic-y += ioctl.h
generic-y += ioctls.h generic-y += ioctls.h
generic-y += ipcbuf.h generic-y += ipcbuf.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += kdebug.h generic-y += kdebug.h
generic-y += kmap_types.h generic-y += kmap_types.h
generic-y += kvm_para.h generic-y += kvm_para.h
......
...@@ -5,6 +5,7 @@ generic-y += cputime.h ...@@ -5,6 +5,7 @@ generic-y += cputime.h
generic-y += device.h generic-y += device.h
generic-y += exec.h generic-y += exec.h
generic-y += hash.h generic-y += hash.h
generic-y += irq_work.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
generic-y += preempt.h generic-y += preempt.h
generic-y += scatterlist.h generic-y += scatterlist.h
......
...@@ -3,6 +3,7 @@ generic-y += cputime.h ...@@ -3,6 +3,7 @@ generic-y += cputime.h
generic-y += current.h generic-y += current.h
generic-y += emergency-restart.h generic-y += emergency-restart.h
generic-y += hash.h generic-y += hash.h
generic-y += irq_work.h
generic-y += local64.h generic-y += local64.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
generic-y += mutex.h generic-y += mutex.h
......
...@@ -4,6 +4,7 @@ generic-y += clkdev.h ...@@ -4,6 +4,7 @@ generic-y += clkdev.h
generic-y += cputime.h generic-y += cputime.h
generic-y += exec.h generic-y += exec.h
generic-y += hash.h generic-y += hash.h
generic-y += irq_work.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
generic-y += preempt.h generic-y += preempt.h
generic-y += scatterlist.h generic-y += scatterlist.h
......
...@@ -31,6 +31,7 @@ generic-y += ioctl.h ...@@ -31,6 +31,7 @@ generic-y += ioctl.h
generic-y += ioctls.h generic-y += ioctls.h
generic-y += ipcbuf.h generic-y += ipcbuf.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += kdebug.h generic-y += kdebug.h
generic-y += kmap_types.h generic-y += kmap_types.h
generic-y += kvm_para.h generic-y += kvm_para.h
......
...@@ -10,6 +10,7 @@ generic-y += exec.h ...@@ -10,6 +10,7 @@ generic-y += exec.h
generic-y += hash.h generic-y += hash.h
generic-y += hw_irq.h generic-y += hw_irq.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += kdebug.h generic-y += kdebug.h
generic-y += kvm_para.h generic-y += kvm_para.h
generic-y += local.h generic-y += local.h
......
generic-y += clkdev.h generic-y += clkdev.h
generic-y += hash.h generic-y += hash.h
generic-y += irq_work.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
generic-y += preempt.h generic-y += preempt.h
generic-y += rwsem.h generic-y += rwsem.h
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
generic-y += clkdev.h generic-y += clkdev.h
generic-y += hash.h generic-y += hash.h
generic-y += irq_work.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
generic-y += preempt.h generic-y += preempt.h
generic-y += scatterlist.h generic-y += scatterlist.h
......
...@@ -6,6 +6,7 @@ generic-y += barrier.h ...@@ -6,6 +6,7 @@ generic-y += barrier.h
generic-y += clkdev.h generic-y += clkdev.h
generic-y += cputime.h generic-y += cputime.h
generic-y += hash.h generic-y += hash.h
generic-y += irq_work.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
generic-y += preempt.h generic-y += preempt.h
generic-y += scatterlist.h generic-y += scatterlist.h
......
...@@ -12,6 +12,7 @@ generic-y += hash.h ...@@ -12,6 +12,7 @@ generic-y += hash.h
generic-y += ioctl.h generic-y += ioctl.h
generic-y += ipcbuf.h generic-y += ipcbuf.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += kvm_para.h generic-y += kvm_para.h
generic-y += local.h generic-y += local.h
generic-y += local64.h generic-y += local64.h
......
...@@ -8,6 +8,7 @@ generic-y += emergency-restart.h ...@@ -8,6 +8,7 @@ generic-y += emergency-restart.h
generic-y += exec.h generic-y += exec.h
generic-y += hash.h generic-y += hash.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += linkage.h generic-y += linkage.h
generic-y += local.h generic-y += local.h
generic-y += local64.h generic-y += local64.h
......
...@@ -17,6 +17,7 @@ generic-y += ioctl.h ...@@ -17,6 +17,7 @@ generic-y += ioctl.h
generic-y += ioctls.h generic-y += ioctls.h
generic-y += ipcbuf.h generic-y += ipcbuf.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += local.h generic-y += local.h
generic-y += local64.h generic-y += local64.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
......
...@@ -14,6 +14,7 @@ generic-y += hash.h ...@@ -14,6 +14,7 @@ generic-y += hash.h
generic-y += hw_irq.h generic-y += hw_irq.h
generic-y += io.h generic-y += io.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += kdebug.h generic-y += kdebug.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
generic-y += mutex.h generic-y += mutex.h
......
...@@ -22,6 +22,7 @@ generic-y += ioctl.h ...@@ -22,6 +22,7 @@ generic-y += ioctl.h
generic-y += ioctls.h generic-y += ioctls.h
generic-y += ipcbuf.h generic-y += ipcbuf.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += kdebug.h generic-y += kdebug.h
generic-y += kmap_types.h generic-y += kmap_types.h
generic-y += local.h generic-y += local.h
......
...@@ -7,5 +7,6 @@ genhdr-y += unistd_x32.h ...@@ -7,5 +7,6 @@ genhdr-y += unistd_x32.h
generic-y += clkdev.h generic-y += clkdev.h
generic-y += cputime.h generic-y += cputime.h
generic-y += early_ioremap.h generic-y += early_ioremap.h
generic-y += irq_work.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
generic-y += scatterlist.h generic-y += scatterlist.h
...@@ -12,6 +12,7 @@ generic-y += hardirq.h ...@@ -12,6 +12,7 @@ generic-y += hardirq.h
generic-y += hash.h generic-y += hash.h
generic-y += ioctl.h generic-y += ioctl.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += irq_work.h
generic-y += kdebug.h generic-y += kdebug.h
generic-y += kmap_types.h generic-y += kmap_types.h
generic-y += kvm_para.h generic-y += kvm_para.h
......
#ifndef __ASM_IRQ_WORK_H
#define __ASM_IRQ_WORK_H
static inline bool arch_irq_work_has_interrupt(void)
{
return false;
}
#endif /* __ASM_IRQ_WORK_H */
...@@ -42,6 +42,8 @@ void irq_work_run(void); ...@@ -42,6 +42,8 @@ void irq_work_run(void);
void irq_work_sync(struct irq_work *work); void irq_work_sync(struct irq_work *work);
#ifdef CONFIG_IRQ_WORK #ifdef CONFIG_IRQ_WORK
#include <asm/irq_work.h>
bool irq_work_needs_cpu(void); bool irq_work_needs_cpu(void);
#else #else
static inline bool irq_work_needs_cpu(void) { return false; } static inline bool irq_work_needs_cpu(void) { return false; }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment