jjzjj

android - 如何在 linux 内核中定义和触发我自己的新 softirq?

我想在linux内核中创建我自己的softirq。这是正确的做法吗:在模块的init中,我想触发softirq,我将添加一个调用:394voidopen_softirq(intnr,void(*action)(structsoftirq_action*))395{396softirq_vec[nr].action=action;397}在我想引发软中断的代码fragment中,我将添加对raise_softirq函数的调用:379voidraise_softirq(unsignedintnr)380{381unsignedlongflags;382383local_irq_save(f

linux - 是否有必要在 softirq 上下文中调用 rcu_read_lock

rcu_read_lock的实现是disablepreempt和barrier。软中断上下文不会被抢占。那么是否有必要在softirq上下文中调用rcu_read_lock。屏障重要吗? 最佳答案 是的,有必要使用rcu_read_lock访问受rcu保护的指针,即使在softirq上下文中也是如此。正如您所指出的,rcu_read_lock和softirqs的一些实现(例如:TINY_RCU)使得它没有损坏的风险,即使您不使用rcu_read_lock。但是,这不是rcuapi的保证,只是因为具体实现的“hack”。这个hack可

linux - 是否有必要在 softirq 上下文中调用 rcu_read_lock

rcu_read_lock的实现是disablepreempt和barrier。软中断上下文不会被抢占。那么是否有必要在softirq上下文中调用rcu_read_lock。屏障重要吗? 最佳答案 是的,有必要使用rcu_read_lock访问受rcu保护的指针,即使在softirq上下文中也是如此。正如您所指出的,rcu_read_lock和softirqs的一些实现(例如:TINY_RCU)使得它没有损坏的风险,即使您不使用rcu_read_lock。但是,这不是rcuapi的保证,只是因为具体实现的“hack”。这个hack可

linux - softirq 和 tasklet 在哪个上下文中?

我知道有processcontext和interruptcontext但是我不明白在执行softirq或者tasklet的时候,它是在哪个context下运行的。我看到有些人使用“bottom-halvescontext”这个术语,如果有这样的术语,与其他术语相比有什么区别。softirq和tasklet的另一个问题是为什么执行期间不允许休眠?谁能帮我找出这些问题,谢谢!! 最佳答案 softirq和tasklet都是一种bottom-halves机制。不允许sleep,因为它们在中断上下文而不是进程上下文下运行。如果允许sleep

linux - softirq 和 tasklet 在哪个上下文中?

我知道有processcontext和interruptcontext但是我不明白在执行softirq或者tasklet的时候,它是在哪个context下运行的。我看到有些人使用“bottom-halvescontext”这个术语,如果有这样的术语,与其他术语相比有什么区别。softirq和tasklet的另一个问题是为什么执行期间不允许休眠?谁能帮我找出这些问题,谢谢!! 最佳答案 softirq和tasklet都是一种bottom-halves机制。不允许sleep,因为它们在中断上下文而不是进程上下文下运行。如果允许sleep

linux - 为什么 softirq 用于高度线程化和高频使用?

是什么让softirq如此特别,以至于我们将它用于高频用途,例如网络驱动程序和block驱动程序。 最佳答案 SoftIrqs通常用于完成已处理中断的排队工作,因为它们非常适合这种需要——它们以第二高的优先级运行,但仍然在启用硬件中断的情况下运行。处理硬件中断是重中之重,因为如果不快速处理它们,就会引入过高的延迟并影响用户体验,或者硬件缓冲区会在中断服务设备之前填满,从而导致数据丢失.服务网络适配器的速度不够快?它会覆盖fifo中的数据,你会丢失数据包。维修硬盘的速度不够快?硬盘驱动器停止排队读取请求,因为它无处放置结果。SoftI