为什么中断处理程序入口代码检查进位标志?

时间:2011-06-16 18:56:58

标签: linux-kernel interrupt

我正在尝试在VM中生成一个中断,并编写了一个简单的中断处理程序但是当我尝试测试这个中断生成和处理时,内核由于页面错误而崩溃。现在我调试了这个问题并发现在'entry_64.S'文件中调用'error_entry'将寄存器压入堆栈并检查GS代码如下:

    xorl %ebx,%ebx
    testl $3,CS+8(%rsp)
    je error_kernelspace
 error_swapgs:
    SWAPGS

当处理中断时,CPU会将EFLAGS推送到(rsp)+ CS + 8位置。因此在上面的代码'testl'指令中检查是否在中断时设置了标志的进位标志,以检测中断是在内核模式还是用户模式。

有人可以解释为什么在这里检查Carry旗帜吗?

1 个答案:

答案 0 :(得分:1)

实际上,我认为它正在检查CS是否对应于内核线程,请参阅ret_from_fork处类似构造的注释。