1. 08 10月, 2020 1 次提交
  2. 29 9月, 2020 1 次提交
    • B
      lockdep: Optimize the memory usage of circular queue · 6d1823cc
      Boqun Feng 提交于
      Qian Cai reported a BFS_EQUEUEFULL warning [1] after read recursive
      deadlock detection merged into tip tree recently. Unlike the previous
      lockep graph searching, which iterate every lock class (every node in
      the graph) exactly once, the graph searching for read recurisve deadlock
      detection needs to iterate every lock dependency (every edge in the
      graph) once, as a result, the maximum memory cost of the circular queue
      changes from O(V), where V is the number of lock classes (nodes or
      vertices) in the graph, to O(E), where E is the number of lock
      dependencies (edges), because every lock class or dependency gets
      enqueued once in the BFS. Therefore we hit the BFS_EQUEUEFULL case.
      
      However, actually we don't need to enqueue all dependencies for the BFS,
      because every time we enqueue a dependency, we almostly enqueue all
      other dependencies in the same dependency list ("almostly" is because
      we currently check before enqueue, so if a dependency doesn't pass the
      check stage we won't enqueue it, however, we can always do in reverse
      ordering), based on this, we can only enqueue the first dependency from
      a dependency list and every time we want to fetch a new dependency to
      work, we can either:
      
        1)	fetch the dependency next to the current dependency in the
      	dependency list
      or
      
        2)	if the dependency in 1) doesn't exist, fetch the dependency from
      	the queue.
      
      With this approach, the "max bfs queue depth" for a x86_64_defconfig +
      lockdep and selftest config kernel can get descreased from:
      
              max bfs queue depth:                   201
      
      to (after apply this patch)
      
              max bfs queue depth:                   61
      
      While I'm at it, clean up the code logic a little (e.g. directly return
      other than set a "ret" value and goto the "exit" label).
      
      [1]: https://lore.kernel.org/lkml/17343f6f7f2438fc376125384133c5ba70c2a681.camel@redhat.com/Reported-by: NQian Cai <cai@redhat.com>
      Reported-by: syzbot+62ebe501c1ce9a91f68c@syzkaller.appspotmail.com
      Signed-off-by: NBoqun Feng <boqun.feng@gmail.com>
      Signed-off-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
      Link: https://lkml.kernel.org/r/20200917080210.108095-1-boqun.feng@gmail.com
      6d1823cc
  3. 16 9月, 2020 1 次提交
  4. 10 9月, 2020 13 次提交
  5. 26 8月, 2020 24 次提交