据说 Softirqs/tasklets 在中断上下文中执行我有以下关于中断上下文底部的问题。
Q1)如果我们尝试让 tasklet 进入休眠状态(中断上下文下半部分)会发生什么(考虑 tasklet 是由中断处理程序调度的)。
[我的理解] 据我所知,当调用 tasklet_schedule 时从中断处理程序中出来时,它将获得 tasklet_vec 结构指针,如果当前没有其他中断/高优先级 softirq 在进行中,它将调度 ksoftirqd,它将运行处理程序(tasklet 处理程序),如果那个 tasklet 很高处理程序使用 sleep ,在这种情况下,ksoftirqd 将移动到 wait_queue,除非并且直到另一个 tasklet_schdule 被调用,我中断的 tasklet 处理程序将继续在那个点上继续。
我们说“中断上下文代码不能休眠”(如果我在中断处理程序中使用休眠会产生什么后果,考虑到我没有使用 spint 锁或者我没有禁用定时器中断)
(理解有误请指正)
最佳答案
Sleep 仅在进程上下文中有效,在中断上下文中无效。在中断上下文中,“当前”不是有效任务,因此我们可以将其置于 sleep 状态,稍后再将其唤醒。如果你想 sleep ,请使用线程
关于linux - 中断上下文下半部分(Softirq 或 tasklet),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22954960/