当前位置: 技术问答>linux和unix
为什么内核模块在中断处理中(INT3),使用current->tgid,机子就会死掉[suse11 linux-2.6.27.45-0.1]
来源: 互联网 发布时间:2016-09-08
本文导语: 发生的环境是: suse11, 内核版本:linux-2.6.27.45-0.1 Linux linux-suse11 2.6.27.45-0.1-default #1 x86_64 x86_64 x86_64 GNU/Linux 内核是64位的。 然后自己编写了一个内核模块,替换了系统原来的中断 编写自己的中断处理函数,但...
发生的环境是:
suse11, 内核版本:linux-2.6.27.45-0.1
Linux linux-suse11 2.6.27.45-0.1-default #1 x86_64 x86_64 x86_64 GNU/Linux
内核是64位的。
然后自己编写了一个内核模块,替换了系统原来的中断
编写自己的中断处理函数,但在中断处理过程中,使用current->tgid机子就死掉,不知道是为什么?
有没有兄弟碰到类似的问题。谢谢!
suse11, 内核版本:linux-2.6.27.45-0.1
Linux linux-suse11 2.6.27.45-0.1-default #1 x86_64 x86_64 x86_64 GNU/Linux
内核是64位的。
然后自己编写了一个内核模块,替换了系统原来的中断
编写自己的中断处理函数,但在中断处理过程中,使用current->tgid机子就死掉,不知道是为什么?
有没有兄弟碰到类似的问题。谢谢!
|
1、你确定是这句话造成死机?前后打一些log看看
2、试一下别的中断看看,是不是INT3比较特殊
3、试着打印current本身看看是否死机
4、原有中断怎么处理?用到current了么?
5、中断使用被中断进程的内核栈,确认不是因为栈溢出死机
6、死掉是什么表现?
7、你是如何使用current->tgid的?
2、试一下别的中断看看,是不是INT3比较特殊
3、试着打印current本身看看是否死机
4、原有中断怎么处理?用到current了么?
5、中断使用被中断进程的内核栈,确认不是因为栈溢出死机
6、死掉是什么表现?
7、你是如何使用current->tgid的?
|
很有可能是栈溢出,以前也遇到过内核代码中有大的局部数组,把task_struct给破坏掉了,所以你再用current->tgid的时候就有问题了
|
http://www.pubbs.net/200910/kernel/41830-can-current-macro-be-accessed-from-interrupt-context.html
Can current macro be accessed from interrupt context?
Can current macro be accessed from interrupt context?