Linux kernel rw_信号量的负计数值

Linux kernel rw_信号量的负计数值,linux-kernel,linux-device-driver,mutex,embedded-linux,semaphore,Linux Kernel,Linux Device Driver,Mutex,Embedded Linux,Semaphore,我正在调试内核崩溃转储。一个进程试图将内存映射到一个新区域时,似乎出现了问题。问题是它无法保持内存映射信号量 当我查看流程的mm_结构并打印其内容时。我看到struct rw_信号量mmap_sem如下所示。现在,他对伯爵的价值有怀疑吗?它有一个负值,就好像存在一个争用条件,在检查零后,两个不同的线程将其递减两次 mmap_sem = { count = -4294967295, wait_lock = { { rlock = {

我正在调试内核崩溃转储。一个进程试图将内存映射到一个新区域时,似乎出现了问题。问题是它无法保持内存映射信号量

当我查看流程的mm_结构并打印其内容时。我看到struct rw_信号量mmap_sem如下所示。现在,他对伯爵的价值有怀疑吗?它有一个负值,就好像存在一个争用条件,在检查零后,两个不同的线程将其递减两次

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

很抱歉给你带来了困惑。我认为crash提取了正确的数据类型,并在打印所有值时正确使用了这些数据类型

看起来崩溃实用程序没有将计数成员读取为int

当我把它打印为int时,我得到了正确的值

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