首页 > 解决方案 > 在 URB 完成例程中调用 send_sig_info() 是否安全?

问题描述

我们知道 USB URB 完成回调将在 softIRQ 上下文中执行。让我解释一下我尝试使用 send_sig_info() 的背景。所以我目前正在数据采集委员会工作。为此,在 USB 设备端,我有两个模块,FPGA 和 FX3 USB 芯片。FX3 设备固件暴露了 4 个端点。在 4 个 EP 中,2 个用于 FPGA 的寄存器读/写,1 个用于捕获 Interrupt IN EP。

我的项目中有一个要求是在中断 IN EP 上捕获 FPGA 的中断信号(FPGA 在 GPIO 引脚上向 FX3 提供中断,作为响应,FX3 将产生虚拟数据),并且在设备驱动程序内部成功接收到中断信号后,读取 FPGA 中断状态使用批量 urb 注册。所以在中断 IN urb 完成回调中,我打算提交批量 urb 以读取 FPGA 中断寄存器。

现在不解释了,进入重点。在成功读取 FPGA 的中断状态寄存器值后的上述批量 urb 完成回调中,我需要使用信号将该整数值发送给 userapp。这样 userapp 事件引擎将执行正确的操作。

那么在批量 urb 完成回调中调用 send_sig_info() 将数据传递给 userapp 是否安全?

标签: linux-kernelusbinterrupt-handlingsoftirq

解决方案


推荐阅读