[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <165055518776.3745911.9346998911322224736.stgit@dwillia2-desk3.amr.corp.intel.com>
Date: Thu, 21 Apr 2022 08:33:08 -0700
From: Dan Williams <dan.j.williams@...el.com>
To: linux-cxl@...r.kernel.org
Cc: Ira Weiny <ira.weiny@...el.com>,
Ben Widawsky <ben.widawsky@...el.com>,
Will Deacon <will@...nel.org>,
Jonathan Cameron <Jonathan.Cameron@...wei.com>,
Vishal Verma <vishal.l.verma@...el.com>,
Dave Jiang <dave.jiang@...el.com>,
Alison Schofield <alison.schofield@...el.com>,
Boqun Feng <boqun.feng@...il.com>,
Ingo Molnar <mingo@...hat.com>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Peter Zijlstra <peterz@...radead.org>,
Waiman Long <longman@...hat.com>,
"Rafael J. Wysocki" <rafael@...nel.org>, nvdimm@...ts.linux.dev,
linux-kernel@...r.kernel.org
Subject: [PATCH v3 0/8] device-core: Enable device_lock() lockdep validation
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.stgit@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/Ylf0dewci8myLvoW@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
Powered by blists - more mailing lists