Lines Matching refs:work
29 static bool irq_work_claim(struct irq_work *work) in irq_work_claim() argument
37 flags = work->flags & ~IRQ_WORK_PENDING; in irq_work_claim()
40 oflags = cmpxchg(&work->flags, flags, nflags); in irq_work_claim()
66 bool irq_work_queue_on(struct irq_work *work, int cpu) in irq_work_queue_on() argument
75 if (!irq_work_claim(work)) in irq_work_queue_on()
78 if (llist_add(&work->llnode, &per_cpu(raised_list, cpu))) in irq_work_queue_on()
87 bool irq_work_queue(struct irq_work *work) in irq_work_queue() argument
90 if (!irq_work_claim(work)) in irq_work_queue()
97 if (work->flags & IRQ_WORK_LAZY) { in irq_work_queue()
98 if (llist_add(&work->llnode, this_cpu_ptr(&lazy_list)) && in irq_work_queue()
102 if (llist_add(&work->llnode, this_cpu_ptr(&raised_list))) in irq_work_queue()
132 struct irq_work *work; in irq_work_run_list() local
142 work = llist_entry(llnode, struct irq_work, llnode); in irq_work_run_list()
153 flags = work->flags & ~IRQ_WORK_PENDING; in irq_work_run_list()
154 xchg(&work->flags, flags); in irq_work_run_list()
156 work->func(work); in irq_work_run_list()
161 (void)cmpxchg(&work->flags, flags, flags & ~IRQ_WORK_BUSY); in irq_work_run_list()
189 void irq_work_sync(struct irq_work *work) in irq_work_sync() argument
193 while (work->flags & IRQ_WORK_BUSY) in irq_work_sync()