rw_semaphore的负计数值

时间:2017-01-09 21:15:47

标签: linux-kernel linux-device-driver mutex embedded-linux semaphore

我正在调试内核崩溃转储。一个进程试图记忆映射一个新区域似乎存在问题。问题是它无法保存内存映射信号量。

当我查看进程的mm_struct并打印其内容时。我看到struct rw_semaphore mmap_sem如下所示。现在,他count的价值是否可疑?它有一个负值,好像有一个竞争条件,它在检查零后由两个不同的线程减少两次。

  mmap_sem = {
    count = -4294967295,
    wait_lock = {
      {
        rlock = {
          raw_lock = {
            slock = 262148
          }
        }
      }
    },
    wait_list = {
      next = 0xffff8801f0113e48,
      prev = 0xffff8801f0113e48
    }
  },

1 个答案:

答案 0 :(得分:1)

很抱歉这个混乱。我认为崩溃会提取正确的数据类型,并在打印出所有值时正确使用...

看起来崩溃实用程序不会将count成员视为int ....

当我将其打印为int时,我得到正确的值。

crash> p (int) (((struct mm_struct *) 0xffff8801f15fa540)->mmap_sem).count
$13 = 1