OSDN Git Service

irq_work, smp: Allow irq_work on call_single_queue
authorPeter Zijlstra <peterz@infradead.org>
Tue, 26 May 2020 16:11:02 +0000 (18:11 +0200)
committerIngo Molnar <mingo@kernel.org>
Thu, 28 May 2020 08:54:15 +0000 (10:54 +0200)
commit4b44a21dd640b692d4e9b12d3e37c24825f90baa
tree5dea8495f643a9152ce6ada83d8f5f6466f1d898
parentb2a02fc43a1f40ef4eb2fb2b06357382608d4d84
irq_work, smp: Allow irq_work on call_single_queue

Currently irq_work_queue_on() will issue an unconditional
arch_send_call_function_single_ipi() and has the handler do
irq_work_run().

This is unfortunate in that it makes the IPI handler look at a second
cacheline and it misses the opportunity to avoid the IPI. Instead note
that struct irq_work and struct __call_single_data are very similar in
layout, so use a few bits in the flags word to encode a type and stick
the irq_work on the call_single_queue list.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/20200526161908.011635912@infradead.org
include/linux/irq_work.h
include/linux/smp.h
kernel/irq_work.c
kernel/smp.c