Since bit spin locks are only a single bit, there's nowhere to put
a lockdep map.  Fortunately, all bit spin locks in the kernel are
conceptually in only a few classes of lock, and by introducing the
split_lock as somewhere to store the lockdep_map, we can track each bit
spin lock's dependencies.

This split_lock would also give us somewhere to queue waiters, should we
choose to do that.  Or a centralised place to handle PREEMPT_RT mutexes.
But I'll leave that for someone who knows what they're doing; for now
this keeps the same implementation.

Matthew Wilcox (Oracle) (17):
  x86: Rename split_lock_init to sld_init
  locking: Add split_lock
  bit_spinlock: Prepare for split_locks
  hlist_bl: Prepare for split_locks
  dm-snap: Add dm_exceptional_lock
  dcache: Add d_hash_lock
  fscache: Add cookie_hash_lock
  gfs2: Add qd_hash_lock
  mbcache: Add mb_cache_lock
  hlist_bl: Make the split_lock parameter mandatory
  s390: Add airq_iv_lock
  zram: Add zram_table_lock
  jbd2: Add jbd2_jh_lock
  slub: Add slab_page_lock
  zsmalloc: Add zs_pin_lock
  rhashtable: Convert to split_lock
  bit_spinlock: Track bit spin locks with lockdep

 arch/s390/include/asm/airq.h  |  5 +++--
 arch/x86/kernel/cpu/intel.c   |  6 +++---
 drivers/block/zram/zram_drv.c |  8 ++++---
 drivers/md/dm-snap.c          | 10 +++++----
 drivers/s390/cio/airq.c       |  3 +++
 fs/dcache.c                   | 25 +++++++++++-----------
 fs/fscache/cookie.c           | 13 ++++++------
 fs/gfs2/quota.c               |  5 +++--
 fs/jbd2/journal.c             | 18 +++++++++-------
 fs/mbcache.c                  | 25 +++++++++++-----------
 include/linux/bit_spinlock.h  | 39 ++++++++++++++++++++++++++++++-----
 include/linux/jbd2.h          | 10 +++++----
 include/linux/list_bl.h       | 15 ++++++++++----
 include/linux/rhashtable.h    | 20 +++++++-----------
 include/linux/split_lock.h    | 37 +++++++++++++++++++++++++++++++++
 lib/rhashtable.c              |  5 +----
 mm/slub.c                     |  6 ++++--
 mm/zsmalloc.c                 | 11 +++++++---
 18 files changed, 174 insertions(+), 87 deletions(-)
 create mode 100644 include/linux/split_lock.h

-- 
2.30.2

Reply via email to