#include <linux/kernel.h>
#include <linux/export.h>
#include <linux/irq_work.h>
#include <linux/percpu.h>
#include <linux/hardirq.h>
#include <linux/irqflags.h>
#include <linux/notifier.h>
#include <asm/processor.h>
static DEFINE_PER_CPU(struct llist_head, raised_list);
static DEFINE_PER_CPU(struct llist_head, lazy_list);
static bool irq_work_claim(struct irq_work *work)
unsigned long flags, oflags, nflags;
flags = work->flags & ~IRQ_WORK_PENDING;
nflags = flags | IRQ_WORK_CLAIMED;
oflags = cmpxchg(&work->flags, flags, nflags);
if (oflags & IRQ_WORK_PENDING)
void __weak arch_irq_work_raise(void)
static void __irq_work_queue_local(struct irq_work *work)