irq_work: Introduce arch_irq_work_has_interrupt()
commit c5c38ef3d7
upstream.
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>
This commit is contained in:
parent
f52d7ef05a
commit
f25a5ec582
|
@ -5,3 +5,4 @@ generic-y += exec.h
|
||||||
generic-y += trace_clock.h
|
generic-y += trace_clock.h
|
||||||
generic-y += preempt.h
|
generic-y += preempt.h
|
||||||
generic-y += hash.h
|
generic-y += hash.h
|
||||||
|
generic-y += irq_work.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
|
||||||
|
|
|
@ -10,6 +10,7 @@ generic-y += exec.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
|
||||||
|
|
|
@ -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 += 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
|
||||||
generic-y += futex.h
|
generic-y += futex.h
|
||||||
generic-y += preempt.h
|
generic-y += preempt.h
|
||||||
generic-y += irq_regs.h
|
generic-y += irq_regs.h
|
||||||
|
generic-y += irq_work.h
|
||||||
generic-y += param.h
|
generic-y += param.h
|
||||||
generic-y += local.h
|
generic-y += local.h
|
||||||
generic-y += local64.h
|
generic-y += local64.h
|
||||||
|
|
|
@ -14,6 +14,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
|
||||||
|
|
|
@ -21,6 +21,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
|
||||||
|
|
|
@ -14,3 +14,4 @@ generic-y += trace_clock.h
|
||||||
generic-y += vga.h
|
generic-y += vga.h
|
||||||
generic-y += xor.h
|
generic-y += xor.h
|
||||||
generic-y += preempt.h
|
generic-y += preempt.h
|
||||||
|
generic-y += irq_work.h
|
||||||
|
|
|
@ -4,3 +4,4 @@ generic-y += exec.h
|
||||||
generic-y += trace_clock.h
|
generic-y += trace_clock.h
|
||||||
generic-y += preempt.h
|
generic-y += preempt.h
|
||||||
generic-y += hash.h
|
generic-y += hash.h
|
||||||
|
generic-y += irq_work.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 += local64.h
|
generic-y += local64.h
|
||||||
|
|
|
@ -3,6 +3,7 @@ generic-y += clkdev.h
|
||||||
generic-y += exec.h
|
generic-y += exec.h
|
||||||
generic-y += kvm_para.h
|
generic-y += kvm_para.h
|
||||||
generic-y += trace_clock.h
|
generic-y += trace_clock.h
|
||||||
|
generic-y += irq_work.h
|
||||||
generic-y += preempt.h
|
generic-y += preempt.h
|
||||||
generic-y += vtime.h
|
generic-y += vtime.h
|
||||||
generic-y += hash.h
|
generic-y += hash.h
|
||||||
|
|
|
@ -5,3 +5,4 @@ generic-y += module.h
|
||||||
generic-y += trace_clock.h
|
generic-y += trace_clock.h
|
||||||
generic-y += preempt.h
|
generic-y += preempt.h
|
||||||
generic-y += hash.h
|
generic-y += hash.h
|
||||||
|
generic-y += irq_work.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
|
||||||
|
|
|
@ -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 += 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
|
||||||
|
|
|
@ -3,6 +3,7 @@ generic-y += barrier.h
|
||||||
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 += trace_clock.h
|
generic-y += trace_clock.h
|
||||||
generic-y += syscalls.h
|
generic-y += syscalls.h
|
||||||
generic-y += preempt.h
|
generic-y += preempt.h
|
||||||
|
|
|
@ -15,3 +15,4 @@ generic-y += preempt.h
|
||||||
generic-y += ucontext.h
|
generic-y += ucontext.h
|
||||||
generic-y += xor.h
|
generic-y += xor.h
|
||||||
generic-y += hash.h
|
generic-y += hash.h
|
||||||
|
generic-y += irq_work.h
|
||||||
|
|
|
@ -5,3 +5,4 @@ generic-y += exec.h
|
||||||
generic-y += hash.h
|
generic-y += hash.h
|
||||||
generic-y += trace_clock.h
|
generic-y += trace_clock.h
|
||||||
generic-y += preempt.h
|
generic-y += preempt.h
|
||||||
|
generic-y += irq_work.h
|
||||||
|
|
|
@ -30,6 +30,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
|
||||||
|
|
|
@ -4,6 +4,7 @@ generic-y += word-at-a-time.h auxvec.h user.h cputime.h emergency-restart.h \
|
||||||
segment.h topology.h vga.h device.h percpu.h hw_irq.h mutex.h \
|
segment.h topology.h vga.h device.h percpu.h hw_irq.h mutex.h \
|
||||||
div64.h irq_regs.h kdebug.h kvm_para.h local64.h local.h param.h \
|
div64.h irq_regs.h kdebug.h kvm_para.h local64.h local.h param.h \
|
||||||
poll.h xor.h clkdev.h exec.h
|
poll.h xor.h clkdev.h exec.h
|
||||||
|
generic-y += irq_work.h
|
||||||
generic-y += trace_clock.h
|
generic-y += trace_clock.h
|
||||||
generic-y += preempt.h
|
generic-y += preempt.h
|
||||||
generic-y += hash.h
|
generic-y += hash.h
|
||||||
|
|
|
@ -5,3 +5,4 @@ generic-y += trace_clock.h
|
||||||
generic-y += preempt.h
|
generic-y += preempt.h
|
||||||
generic-y += vtime.h
|
generic-y += vtime.h
|
||||||
generic-y += hash.h
|
generic-y += hash.h
|
||||||
|
generic-y += irq_work.h
|
||||||
|
|
|
@ -4,3 +4,4 @@ generic-y += clkdev.h
|
||||||
generic-y += trace_clock.h
|
generic-y += trace_clock.h
|
||||||
generic-y += preempt.h
|
generic-y += preempt.h
|
||||||
generic-y += hash.h
|
generic-y += hash.h
|
||||||
|
generic-y += irq_work.h
|
||||||
|
|
|
@ -7,4 +7,5 @@ generic-y += hash.h
|
||||||
generic-y += trace_clock.h
|
generic-y += trace_clock.h
|
||||||
generic-y += xor.h
|
generic-y += xor.h
|
||||||
generic-y += preempt.h
|
generic-y += preempt.h
|
||||||
|
generic-y += irq_work.h
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ generic-y += fcntl.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
|
||||||
|
|
|
@ -10,6 +10,7 @@ generic-y += linkage.h
|
||||||
generic-y += local64.h
|
generic-y += local64.h
|
||||||
generic-y += mutex.h
|
generic-y += mutex.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 += module.h
|
generic-y += module.h
|
||||||
generic-y += serial.h
|
generic-y += serial.h
|
||||||
|
|
|
@ -16,6 +16,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 += msgbuf.h
|
generic-y += msgbuf.h
|
||||||
|
|
|
@ -5,4 +5,5 @@ generic-y += switch_to.h clkdev.h
|
||||||
generic-y += trace_clock.h
|
generic-y += trace_clock.h
|
||||||
generic-y += preempt.h
|
generic-y += preempt.h
|
||||||
generic-y += hash.h
|
generic-y += hash.h
|
||||||
|
generic-y += irq_work.h
|
||||||
generic-y += barrier.h
|
generic-y += barrier.h
|
||||||
|
|
|
@ -21,6 +21,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
|
||||||
|
|
|
@ -5,3 +5,4 @@ genhdr-y += unistd_64.h
|
||||||
genhdr-y += unistd_x32.h
|
genhdr-y += unistd_x32.h
|
||||||
|
|
||||||
generic-y += clkdev.h
|
generic-y += clkdev.h
|
||||||
|
generic-y += irq_work.h
|
||||||
|
|
|
@ -11,6 +11,7 @@ generic-y += fcntl.h
|
||||||
generic-y += hardirq.h
|
generic-y += hardirq.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
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
#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 */
|
||||||
|
|
|
@ -36,6 +36,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; }
|
||||||
|
|
Loading…
Reference in New Issue