kernel:5.10
源码路径:
kernel/irq_work.c
include/linux/irq_work.h
irq_work是linux提供的支持在中断上下文执行回调函数的机制,使能该功能需要开启CONFIG_IRQ_WORK。
如何使用irq_work机制?
1.定义struct irq_work类型的变量my_irq_work,以下两种方式是等效的
static DEFINE_PER_CPU(struct irq_work, my_irq_work) = {
.func = my_irq_work_func,
.flags = ATOMIC_INIT(0),
};
struct irq_work my_irq_work;
init_irq_work(&my_irq_work, my_irq_work_func);
使用DEFINE_PER_CPU可以设置flags的值,init_irq_init则flags默认为0。
2. 请求在中断上下文执行
irq_work_queue(&my_irq_work); //在当前cpu上queue
或irq_work_queue_on(&my_irq_work, cpu) //指定cpu上queue
之后,回调函数my_irq_work_func就会在相应的中断上下文被调用,如IPI中断。
To Do:
如何触发IPI中断,IPI中断执行回调过程;其他执行回调的中断;
irq_work结构体不同flags值的区别;
irq_work是Linux内核提供的一种机制,允许在中断上下文中安全地执行回调函数。用户首先定义structirq_work类型的变量,并初始化。然后通过irq_work_queue()或irq_work_queue_on()将工作放入队列,回调函数将在特定CPU的中断上下文执行,例如IPI中断。文章还提及了如何触发IPI中断以及不同flags值的影响。
135

被折叠的 条评论
为什么被折叠?



