• Home
  • Raw
  • Download

Lines Matching refs:work

30 static bool irq_work_claim(struct irq_work *work)  in irq_work_claim()  argument
38 flags = work->flags & ~IRQ_WORK_PENDING; in irq_work_claim()
41 oflags = cmpxchg(&work->flags, flags, nflags); in irq_work_claim()
61 static void __irq_work_queue_local(struct irq_work *work) in __irq_work_queue_local() argument
64 if (work->flags & IRQ_WORK_LAZY) { in __irq_work_queue_local()
65 if (llist_add(&work->llnode, this_cpu_ptr(&lazy_list)) && in __irq_work_queue_local()
69 if (llist_add(&work->llnode, this_cpu_ptr(&raised_list))) in __irq_work_queue_local()
75 bool irq_work_queue(struct irq_work *work) in irq_work_queue() argument
78 if (!irq_work_claim(work)) in irq_work_queue()
83 __irq_work_queue_local(work); in irq_work_queue()
96 bool irq_work_queue_on(struct irq_work *work, int cpu) in irq_work_queue_on() argument
99 return irq_work_queue(work); in irq_work_queue_on()
106 if (!irq_work_claim(work)) in irq_work_queue_on()
113 if (llist_add(&work->llnode, &per_cpu(raised_list, cpu))) in irq_work_queue_on()
116 __irq_work_queue_local(work); in irq_work_queue_on()
144 struct irq_work *work, *tmp; in irq_work_run_list() local
154 llist_for_each_entry_safe(work, tmp, llnode, llnode) { in irq_work_run_list()
162 flags = work->flags & ~IRQ_WORK_PENDING; in irq_work_run_list()
163 xchg(&work->flags, flags); in irq_work_run_list()
165 work->func(work); in irq_work_run_list()
170 (void)cmpxchg(&work->flags, flags, flags & ~IRQ_WORK_BUSY); in irq_work_run_list()
198 void irq_work_sync(struct irq_work *work) in irq_work_sync() argument
202 while (work->flags & IRQ_WORK_BUSY) in irq_work_sync()