Changes since v2 [1] - Use lockdep_set_class(), lockdep_set_class_and_subclass(), and lock_set_class() instead of a 'lockdep_mutex' in 'struct device'. (Peter and Waiman) - Include a fix identifed by this new infrastructure
[1]: https://lore.kernel.org/r/164982968798.684294.15817853329823976469.st...@dwillia2-desk3.amr.corp.intel.com The device_lock() uses lockdep_set_novalidate_class() because it is taken in too many contexts that cannot be described by a single mutex lock class. The lack of lockdep coverage leads to deadlock scenarios landing upstream. To mitigate that problem the lockdep_mutex was added [2]. The lockdep_mutex, however, is an unscalable hack that overlooks advancements in the lockdep API to change a given lock's lock class [3]. With lockdep_set_class() a device subsystem can initialize a dedicated lock class per device type at device creation time, with lock_set_class() a device-driver can temporarily override a lockdep class after-the-fact. Use lockdep class assignment APIs to replace the usage of lockdep_mutex in the CXL and NVDIMM subsystems, and delete lockdep_mutex. [2]: commit 87a30e1f05d7 ("driver-core, libnvdimm: Let device subsystems add local lockdep coverage") [3]: https://lore.kernel.org/r/ylf0dewci8myl...@hirez.programming.kicks-ass.net --- Dan Williams (8): cxl: Replace lockdep_mutex with local lock classes cxl/acpi: Add root device lockdep validation cxl: Drop cxl_device_lock() nvdimm: Replace lockdep_mutex with local lock classes ACPI: NFIT: Drop nfit_device_lock() nvdimm: Drop nd_device_lock() device-core: Kill the lockdep_mutex nvdimm: Fix firmware activation deadlock scenarios drivers/acpi/nfit/core.c | 30 ++++++++------- drivers/acpi/nfit/nfit.h | 24 ------------ drivers/base/core.c | 3 -- drivers/cxl/acpi.c | 15 ++++++++ drivers/cxl/core/memdev.c | 3 ++ drivers/cxl/core/pmem.c | 10 ++++- drivers/cxl/core/port.c | 68 ++++++++++++++++------------------ drivers/cxl/cxl.h | 78 --------------------------------------- drivers/cxl/mem.c | 4 +- drivers/cxl/pmem.c | 12 +++--- drivers/nvdimm/btt_devs.c | 23 +++++++----- drivers/nvdimm/bus.c | 38 ++++++++----------- drivers/nvdimm/core.c | 14 +++---- drivers/nvdimm/dax_devs.c | 4 +- drivers/nvdimm/dimm_devs.c | 12 ++++-- drivers/nvdimm/namespace_devs.c | 46 ++++++++++++++--------- drivers/nvdimm/nd-core.h | 68 +--------------------------------- drivers/nvdimm/pfn_devs.c | 31 +++++++++------- drivers/nvdimm/pmem.c | 2 + drivers/nvdimm/region.c | 2 + drivers/nvdimm/region_devs.c | 20 ++++++---- include/linux/device.h | 30 +++++++++++++-- lib/Kconfig.debug | 23 ------------ 23 files changed, 209 insertions(+), 351 deletions(-) base-commit: ce522ba9ef7e2d9fb22a39eb3371c0c64e2a433e