Messages in this thread |  | | From | Waiman Long <> | Subject | [PATCH v5 0/7] locking/lockdep: Reuse zapped chain_hlocks entries | Date | Mon, 3 Feb 2020 11:41:40 -0500 |
| |
v5: - Fix more build errors reported by kbuild test robot.
v4: - Fix build errors reported by kbuild test robot. - Adopt the single chain block allocator code suggested by PeterZ which combine the last 3 patches of v3 series. - Add another patch to introduce a fast path in the chain block allocator. - In patch 1, move the inc_chains() out of CONFIG_TRACE_IRQFLAGS conditional compilation block.
v3: - Move the bug fix patches to the beginning of the series. - Include a number of changes as suggested by PeterZ. - Increase MAX_CHAIN_BUCKETS from 8 to 10 to reduce the chance of using the unsized list. - Add patch 7 to add a lockdep_early_init() call. - Add patch 8 to allocate chain hlocks by splitting large chain block as a last resort.
v2: - Revamp the chain_hlocks reuse patch to store the freed chain_hlocks information in the chain_hlocks entries themselves avoiding the need of a separate set of tracking structures. This, however, requires a minimum allocation size of at least 2. Thanks to PeterZ for his review and inspiring this change. - Remove the leakage counter as it is no longer applicable. - Add patch 6 to make the output of /proc/lockdep_chains more readable.
It was found that when running a workload that kept on adding lock classes and then zapping them repetitively, the system will eventually run out of chain_hlocks[] entries even though there were still plenty of other lockdep data buffers available.
[ 4318.443670] BUG: MAX_LOCKDEP_CHAIN_HLOCKS too low! [ 4318.444809] turning off the locking correctness validator.
In order to fix this problem, we have to make chain_hlocks[] entries reusable just like other lockdep arrays. Besides that, the patchset also adds some zapped class and chain_hlocks counters to be tracked by /proc/lockdep_stats. It also fixes leakage in the irq context counters and makes the output of /proc/lockdep_chains more readable.
Waiman Long (7): locking/lockdep: Decrement irq context counters when removing lock chain locking/lockdep: Display irq_context names in /proc/lockdep_chains locking/lockdep: Track number of zapped classes locking/lockdep: Throw away all lock chains with zapped class locking/lockdep: Track number of zapped lock chains locking/lockdep: Reuse freed chain_hlocks entries locking/lockdep: Add a fast path for chain_hlocks allocation
kernel/locking/lockdep.c | 335 ++++++++++++++++++++++++----- kernel/locking/lockdep_internals.h | 13 +- kernel/locking/lockdep_proc.c | 28 ++- 3 files changed, 311 insertions(+), 65 deletions(-)
-- 2.18.1
|  |