-
- Downloads
driver-core, libnvdimm: Let device subsystems add local lockdep coverage
For good reason, the standard device_lock() is marked lockdep_set_novalidate_class() because there is simply no sane way to describe the myriad ways the device_lock() ordered with other locks. However, that leaves subsystems that know their own local device_lock() ordering rules to find lock ordering mistakes manually. Instead, introduce an optional / additional lockdep-enabled lock that a subsystem can acquire in all the same paths that the device_lock() is acquired. A conversion of the NFIT driver and NVDIMM subsystem to a lockdep-validate device_lock() scheme is included. The debug_nvdimm_lock() implementation implements the correct lock-class and stacking order for the libnvdimm device topology hierarchy. Yes, this is a hack, but hopefully it is a useful hack for other subsystems device_lock() debug sessions. Quoting Greg: "Yeah, it feels a bit hacky but it's really up to a subsystem to mess up using it as much as anything else, so user beware :) I don't object to it if it makes things easier for you to debug." Cc: Ingo Molnar <mingo@redhat.com> Cc: Ira Weiny <ira.weiny@intel.com> Cc: Will Deacon <will.deacon@arm.com> Cc: Dave Jiang <dave.jiang@intel.com> Cc: Keith Busch <keith.busch@intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Vishal Verma <vishal.l.verma@intel.com> Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by:Dan Williams <dan.j.williams@intel.com> Acked-by:
Greg Kroah-Hartman <gregkh@linuxfoundation.org> Reviewed-by:
Ira Weiny <ira.weiny@intel.com> Link: https://lore.kernel.org/r/156341210661.292348.7014034644265455704.stgit@dwillia2-desk3.amr.corp.intel.com
Showing
- drivers/acpi/nfit/core.c 14 additions, 14 deletionsdrivers/acpi/nfit/core.c
- drivers/acpi/nfit/nfit.h 24 additions, 0 deletionsdrivers/acpi/nfit/nfit.h
- drivers/base/core.c 3 additions, 0 deletionsdrivers/base/core.c
- drivers/nvdimm/btt_devs.c 8 additions, 8 deletionsdrivers/nvdimm/btt_devs.c
- drivers/nvdimm/bus.c 17 additions, 11 deletionsdrivers/nvdimm/bus.c
- drivers/nvdimm/core.c 5 additions, 5 deletionsdrivers/nvdimm/core.c
- drivers/nvdimm/dimm_devs.c 2 additions, 2 deletionsdrivers/nvdimm/dimm_devs.c
- drivers/nvdimm/namespace_devs.c 18 additions, 18 deletionsdrivers/nvdimm/namespace_devs.c
- drivers/nvdimm/nd-core.h 68 additions, 0 deletionsdrivers/nvdimm/nd-core.h
- drivers/nvdimm/pfn_devs.c 12 additions, 12 deletionsdrivers/nvdimm/pfn_devs.c
- drivers/nvdimm/pmem.c 2 additions, 2 deletionsdrivers/nvdimm/pmem.c
- drivers/nvdimm/region.c 1 addition, 1 deletiondrivers/nvdimm/region.c
- drivers/nvdimm/region_devs.c 8 additions, 8 deletionsdrivers/nvdimm/region_devs.c
- include/linux/device.h 5 additions, 0 deletionsinclude/linux/device.h
Loading
Please register or sign in to comment