linux irq_work

irq_work是Linux内核提供的一种机制,允许在中断上下文中安全地执行回调函数。用户首先定义structirq_work类型的变量,并初始化。然后通过irq_work_queue()或irq_work_queue_on()将工作放入队列,回调函数将在特定CPU的中断上下文执行,例如IPI中断。文章还提及了如何触发IPI中断以及不同flags值的影响。

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值的区别;

Reference

Linux内核机制—irq_work - Hello-World3 - 博客园 (cnblogs.com)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值