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

linux提供的cmpxchg调用是否曾经崩溃?,linux,assembly,linux-kernel,x86,kernel,Linux,Assembly,Linux Kernel,X86,Kernel,我正在使用linux内核(SLES11-SP2)提供的cmpxchg() 这是恐慌。 其崩溃的确切点与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

我正在使用linux内核(SLES11-SP2)提供的cmpxchg() 这是恐慌。 其崩溃的确切点与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>
if(cmpxchg(var,old,new)=old)
2002年:48 89 d8 mov%rbx,%rax
2005:f0 4d 0f b1 34 24锁cmpxchg%r14,(%r12)
200b:4839c3cmp%rax%rbx
200e:7427JE2037
关于如何进行调试有什么线索吗?这是由于锁定变量时的竞争条件造成的吗?
或者我需要将此作为错误发布到内核上吗?

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