Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 如何将值从irq处理程序传递给linux内核tasklet?_Linux Kernel_Interrupt_Tasklet - Fatal编程技术网

Linux kernel 如何将值从irq处理程序传递给linux内核tasklet?

Linux kernel 如何将值从irq处理程序传递给linux内核tasklet?,linux-kernel,interrupt,tasklet,Linux Kernel,Interrupt,Tasklet,我有一个Linux驱动程序,其中有许多中断需要由单个tasklet函数处理 我想为它们注册相同的tasklet,但根据在上接收到它的irq更改其行为。我能做这个吗 你知道有其他的解决方案吗 请不要建议在declare\u TASKLET()期间声明参数。我已经知道这不起作用,因为该值是静态的,没有通过irq处理程序传递。我通过使用工作队列解决了这个问题 每个中断处理程序接收一个不同的数据结构实例,即在请求\u irq()期间注册的实例 该结构包含一个工作结构作为其字段之一 为每个irq定义多个工

我有一个Linux驱动程序,其中有许多中断需要由单个tasklet函数处理

我想为它们注册相同的tasklet,但根据在上接收到它的irq更改其行为。我能做这个吗

你知道有其他的解决方案吗


请不要建议在
declare\u TASKLET()期间声明参数。
我已经知道这不起作用,因为该值是静态的,没有通过irq处理程序传递。

我通过使用工作队列解决了这个问题

每个中断处理程序接收一个不同的数据结构实例,即在请求\u irq()期间注册的实例

该结构包含一个工作结构作为其字段之一

为每个irq定义多个工作结构

通过从irq处理程序调用INIT_WORK()调用workqueue函数,并将WORK struct字段作为参数传递,这是原始结构的一部分

然后,workqueue函数使用

container_of(work_struct_ptr, struct your_original_struct, work_struct_fieldname);
获取特定工作队列调用的数据实例

总之,通过这种方式,您可以有多个中断行,由相同的中断处理程序、相同的工作队列函数提供服务,但工作在不同的数据结构上

希望这有帮助