Linux 里面在中断里面调用 disable_irq 会发生什么?
时间: 2023-06-20 18:04:32 浏览: 114
在 Linux 中,`disable_irq()` 函数用于禁用指定中断线路。当调用 `disable_irq()` 函数时,内核将禁用指定中断线路,这意味着当中断信号到达时,硬件将不会触发中断处理程序。这可以防止在处理中断时出现意外的中断,从而确保系统的稳定性。
在调用 `disable_irq()` 函数时,内核会执行以下操作:
1. 关闭中断
2. 禁用指定中断线路
3. 如果有等待中断的进程,则设置进程状态为等待状态,等待中断信号的到来
需要注意的是,禁用中断会影响系统的性能,因为它会阻止中断处理程序的执行。因此,应该尽可能地减少禁用中断的使用,并且只在必要时才使用。
相关问题
local_irq_disable irq_disable
local_irq_disable是一个宏定义,用于禁用中断。它的实现代码如下:
```c
#define local_irq_disable() do { raw_local_irq_disable(); } while (0)
#define raw_local_irq_disable() arch_local_irq_disable()
#define arch_local_irq_disable() 与CPU架构有关
```
其中,raw_local_irq_disable()是一个函数,用于具体执行禁用中断的操作。而arch_local_irq_disable()是与CPU架构相关的函数,用于在特定的CPU架构上执行禁用中断的操作。具体的实现代码会根据不同的CPU架构而有所不同。
local_irq_disable的实现代码中,先调用raw_local_irq_disable()函数,然后再调用arch_local_irq_disable()函数。这样的设计是为了将具体的中断禁用操作与CPU架构相关的实现分离开来,提高代码的可移植性。
总结起来,local_irq_disable的实现代码是通过调用raw_local_irq_disable()和arch_local_irq_disable()函数来实现中断的禁用操作。具体的实现代码会根据不同的CPU架构而有所不同。\[1\]\[2\]
#### 引用[.reference_title]
- *1* [local_irq_enable 与 local_irq_disable 不支持嵌套](https://blog.csdn.net/u012385733/article/details/90483495)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [Linux Kernel中local_irq_enable()和local_irq_disable()的实现](https://blog.csdn.net/weixin_42135087/article/details/123174867)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
解释函数pci_free_irq_vectors
函数pci_free_irq_vectors是Linux内核中的PCI设备驱动程序中的一个函数,用于释放PCI设备的中断资源。
该函数的原型定义为:
```
void pci_free_irq_vectors(struct pci_dev *pdev);```
其中,pdev是指向PCI设备结构体的指针。
该函数的作用是,释放PCI设备所占用的所有中断资源,包括中断向量、中断请求线(IRQ)和中断处理程序等。这个函数在设备驱动程序的cleanup函数中被调用,用于在设备被卸载时释放中断资源,避免资源泄漏和冲突。
在调用此函数之前,设备驱动程序需要先调用pci_disable_device()函数来禁用PCI设备的所有功能,并停止设备对中断的响应。然后,再调用pci_free_irq()函数释放每个中断向量对应的IRQ和中断处理程序。最后,调用pci_free_irq_vectors()函数释放所有中断向量,完成中断资源的释放工作。
阅读全文