linux - linux 提供的 cmpxchg 调用是否会崩溃?

标签 linux assembly linux-kernel x86 kernel

我正在使用 linux 内核 (SLES11-SP2) 提供的 cmpxchg() 令人 panic 。 它崩溃的确切点在 2005 行:

            if (cmpxchg(var, old, new) == old)
2002:       48 89 d8                mov    %rbx,%rax
2005:       f0 4d 0f b1 34 24       lock cmpxchg %r14,(%r12)
200b:       48 39 c3                cmp    %rax,%rbx
200e:       74 27                   je     2037 <atomicPatchFnPtr+0x77>

关于我如何进行调试的任何线索?这是由于锁定变量的竞争条件导致的吗? 或者我是否需要将其作为内核错误发布?

最佳答案

如果传递给它的地址(在此处的 %r12 中)无效,lock cmpxchg 指令可能会导致访问冲突。那可能就是上面那行代码中的变量var。它表明 var 指向一些无效的内存。它不是 cmpxchg 函数中的竞争,但它可能仍然是调用函数中的竞争条件。

关于linux - linux 提供的 cmpxchg 调用是否会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16235688/

相关文章:

c - Linux内核例程的时序测量

linux - 未执行串行驱动程序启动/请求函数

linux - 需要使用不同 linux 服务器的 "sendmail"发送邮件(bash 或 php 脚本)

linux - 从USB串行设备读取二进制流

assembly - 堆栈指针减去 8 位还是 8 个字节?

visual-studio-2010 - 如何在 Visual Studio 中打印断点 "When hit"子句中寄存器的值?

python - 如何选择我在 Linux 上运行的 python 版本?

linux - 使用 awk linux 操作文件

c - execve() 无法在 C 中启动程序

unix - lsof FD 列等于DEL,是什么意思?