linux - Linux 中的中断处理和挂起中断

标签 linux linux-kernel linux-device-driver interrupt interrupt-handling

关于linux中断处理的基本问题

在我的驱动程序中,我禁用了外围设备的中断线并进行了一些处理,在此期间外围设备正在发送中断。当我启用中断线时,我收到了那段时间发生的未决中断。

这个理解正确吗?

如果是,我如何丢弃在中断禁用期间出现的那些中断。

我可以使用一些延迟来解决一些问题,寻找 linux API 或干净的方法来执行此操作。

在启用中断之前我们可以设置 desc = irq_to_desc(客户端->irq); desc->istate &= ~IRQS_PENDING; 并启用中断线,它将清除所有挂起的中断,但代码表明我们永远不应该修改这些变量。

谢谢

最佳答案

可能是我不明白,但我认为你必须做的是:

  • 直接在设备上禁用中断,不使用内核中断处理例程

  • 轮询您的设备,获取所有事件。也许你应该在线程中断处理程序中执行此操作

  • 完成后重新启用设备上的中断

关于linux - Linux 中的中断处理和挂起中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26275431/

相关文章:

c - 与高级语言不同的CPUID用法

linux - 是否可以从内核模块中向 USB 设备发送 SCSI 命令?

linux - 在 Linux 中转储进程的页表条目

c - 谁在驱动代码中调用了 "probe"函数?

linux - 哪个版本的linux内核开始支持sd/sdio version 3.00?

c - 我应该在平台设备上的什么地方存储动态分配的内存(不使用全局变量)?

linux - 检查脚本命令中的错误

python - 如何在 python 中获取 errno 值的错误消息?

JavaScriptCore Hello world 每晚

linux-kernel - Linux 内核 - 内核中的哪些数据 block 物理写入特定磁盘分区?