1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __LINUX_SMP_TYPES_H
3 #define __LINUX_SMP_TYPES_H
5 #include <linux/llist.h>
10 IRQ_WORK_PENDING
= 0x01,
12 IRQ_WORK_LAZY
= 0x04, /* No IPI, wait for tick */
13 IRQ_WORK_HARD_IRQ
= 0x08, /* IRQ context on PREEMPT_RT */
15 IRQ_WORK_CLAIMED
= (IRQ_WORK_PENDING
| IRQ_WORK_BUSY
),
17 CSD_TYPE_ASYNC
= 0x00,
19 CSD_TYPE_IRQ_WORK
= 0x20,
22 CSD_FLAG_TYPE_MASK
= 0xF0,
26 * struct __call_single_node is the primary type on
27 * smp.c:call_single_queue.
29 * flush_smp_call_function_queue() only reads the type from
30 * __call_single_node::u_flags as a regular load, the above
31 * (anonymous) enum defines all the bits of this word.
33 * Other bits are not modified until the type is known.
35 * CSD_TYPE_SYNC/ASYNC:
37 * struct llist_node node;
39 * smp_call_func_t func;
45 * struct llist_node node;
47 * void (*func)(struct irq_work *);
52 * struct llist_node node;
58 struct __call_single_node
{
59 struct llist_node llist
;
69 #endif /* __LINUX_SMP_TYPES_H */