Lines Matching refs:work

30 static bool irq_work_claim(struct irq_work *work)  in irq_work_claim()  argument
34 oflags = atomic_fetch_or(IRQ_WORK_CLAIMED | CSD_TYPE_IRQ_WORK, &work->node.a_flags); in irq_work_claim()
53 static void __irq_work_queue_local(struct irq_work *work) in __irq_work_queue_local() argument
56 if (atomic_read(&work->node.a_flags) & IRQ_WORK_LAZY) { in __irq_work_queue_local()
57 if (llist_add(&work->node.llist, this_cpu_ptr(&lazy_list)) && in __irq_work_queue_local()
61 if (llist_add(&work->node.llist, this_cpu_ptr(&raised_list))) in __irq_work_queue_local()
67 bool irq_work_queue(struct irq_work *work) in irq_work_queue() argument
70 if (!irq_work_claim(work)) in irq_work_queue()
75 __irq_work_queue_local(work); in irq_work_queue()
88 bool irq_work_queue_on(struct irq_work *work, int cpu) in irq_work_queue_on() argument
91 return irq_work_queue(work); in irq_work_queue_on()
98 if (!irq_work_claim(work)) in irq_work_queue_on()
101 kasan_record_aux_stack(work); in irq_work_queue_on()
107 __smp_call_single_queue(cpu, &work->node.llist); in irq_work_queue_on()
109 __irq_work_queue_local(work); in irq_work_queue_on()
137 struct irq_work *work = arg; in irq_work_single() local
145 flags = atomic_read(&work->node.a_flags); in irq_work_single()
147 atomic_set(&work->node.a_flags, flags); in irq_work_single()
155 work->func(work); in irq_work_single()
162 (void)atomic_cmpxchg(&work->node.a_flags, flags, flags & ~IRQ_WORK_BUSY); in irq_work_single()
167 struct irq_work *work, *tmp; in irq_work_run_list() local
176 llist_for_each_entry_safe(work, tmp, llnode, node.llist) in irq_work_run_list()
177 irq_work_single(work); in irq_work_run_list()
204 void irq_work_sync(struct irq_work *work) in irq_work_sync() argument
208 while (irq_work_is_busy(work)) in irq_work_sync()