irq_work: Optimize irq_work_single()

Trade one atomic op for a full memory barrier.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
This commit is contained in:
Peter Zijlstra
2020-06-18 22:28:37 +02:00
parent 545b8c8df4
commit 2914b0ba61
2 changed files with 24 additions and 19 deletions

View File

@@ -107,14 +107,14 @@ do { \
current->irq_config = 0; \
} while (0)
# define lockdep_irq_work_enter(__work) \
# define lockdep_irq_work_enter(_flags) \
do { \
if (!(atomic_read(&__work->node.a_flags) & IRQ_WORK_HARD_IRQ))\
if (!((_flags) & IRQ_WORK_HARD_IRQ)) \
current->irq_config = 1; \
} while (0)
# define lockdep_irq_work_exit(__work) \
# define lockdep_irq_work_exit(_flags) \
do { \
if (!(atomic_read(&__work->node.a_flags) & IRQ_WORK_HARD_IRQ))\
if (!((_flags) & IRQ_WORK_HARD_IRQ)) \
current->irq_config = 0; \
} while (0)