【问题标题】:Does cmpxchg call provided by linux ever crash?linux提供的cmpxchg调用会崩溃吗?
【发布时间】:2013-04-20 14:00:17
【问题描述】:

我正在使用 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>

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

【问题讨论】:

    标签: linux assembly linux-kernel x86 kernel


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-05-15
      • 2020-10-28
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-13
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多