linux - 中断上下文下半部分(Softirq 或 tasklet)

标签 linux linux-kernel interrupt-handling

据说 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/

相关文章:

Linux kernel header.S源码,为什么清零BSS时需要_end+3?

c - 来自 gpio int 处理程序的 i2c 传输在 imx6sx cortex m4 侧失败

linux - 使用 OKTA 推送身份验证在 Linux 设备中连接到 AWS-VPN

linux - 能够使用非 sudo 用户覆盖只读文件的 root 权限

c++ - 使用 qt 完成编程时,在 if 语句之外打印变量数据时遇到问题

makefile - 内核模块 makefile 中的 SUBDIRS 变量

linux - 为什么在没有 DMA 的情况下用套接字拼接不能提高性能?

c - 软件和硬件中断的区别

linux - 多个驱动程序可以注册来处理Linux中的同一个设备吗

linux - 如何在nagios中配置https_check URL