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

时间:2013-04-26 11:47:56

标签: linux assembly linux-kernel x86 kernel

我正在使用linux内核提供的cmpxchg()(SLES11-SP2) 它很恐慌。 崩溃的确切点在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>

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

1 个答案:

答案 0 :(得分:2)

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