为什么do_softirq要Reset active bitmask before enabling irqs
时间: 2023-12-06 11:41:43 浏览: 74
在 Linux 内核中,softirq 是一种特殊的中断处理程序,它在内核空间中运行,用于处理各种异步事件,如网络数据包接收、定时器事件等。当发生这些事件时,内核会在处理硬件中断后立即调度软中断处理程序来处理这些事件。
在 softirq 处理期间,内核不允许硬件中断被处理,以避免竞争条件和死锁等问题。因此,在进入 softirq 处理程序之前,内核会禁用硬件中断。但是,在禁用硬件中断之前,内核会将 active bitmask(表示当前正在处理的软中断)的相应位设置为 1,以标记需要处理的 softirq。
如果在禁用硬件中断之前未对 active bitmask 进行重置,则可能会导致以下问题:
1. 未及时处理已经激活的 softirq,导致处理延迟;
2. 在处理软中断期间,新的硬件中断可能会被忽略,导致系统问题。
因此,在禁用硬件中断之前,应该重置 active bitmask,以确保所有激活的 softirq 都能及时得到处理。
相关问题
__do_softirq为什么要set_softirq_pending
在 Linux 内核中,__do_softirq 函数用于处理软中断。当一个软中断被触发后,它会被加入到软中断队列中,等待 __do_softirq 处理。而 set_softirq_pending 函数则用于将指定的软中断标记为待处理状态,并将其加入到软中断队列中。
set_softirq_pending 的作用是将软中断设置为待处理状态,从而确保 __do_softirq 能够及时处理这个软中断。如果没有将软中断设置为待处理状态,那么 __do_softirq 可能会错过这个软中断,从而导致系统出现问题。
因此,set_softirq_pending 是确保软中断能够被及时处理的重要函数。
__do_softirq
__do_softirq是Linux内核中的一个函数,它的作用是在软中断处理程序中执行软中断处理程序的实际工作。软中断是一种异步处理机制,用于处理内核中的一些事件,如网络数据包接收、定时器、文件系统缓存刷新等。当软中断被触发时,CPU会暂停当前正在执行的任务,转而执行软中断处理程序,即__do_softirq函数。该函数会依次执行各个软中断处理程序,并在每个处理程序执行完毕后检查是否有新的软中断需要处理。处理完成后,CPU会返回原先的任务继续执行。
阅读全文