From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6B2BD2EC569 for ; Wed, 21 Jan 2026 01:11:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768957912; cv=none; b=MNCkDEFVrh3EUHm/CFwxiyNpkXJGTkzOHfwhuRcnX3bSz8nLu50Lb+rajYyLKjnlBg/WMSuNjJpT1vrkihklypDkzNaZd4bYXsXwGVcMQhSnMiE4EHurgimensLbK5SwZSQQDI7/qZC5lrmM06TAXpp5phgVnSFC3gkTMOv9J7c= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768957912; c=relaxed/simple; bh=GsEgsD3UUrEHF5Z5mnzBdjaqQA8MKMXEJII30Ay47EM=; h=Mime-Version:Content-Type:Date:Message-Id:Subject:Cc:To:From: References:In-Reply-To; b=ZhXHaLMT2k3B4EeeJW8gVppg6+VLaG3V4J9BZgMDWzwlC6kf7WSuBoJvi6xx3cebx3RyP4tv4t7/jdbyqIfbl/0QGkLeTaomctEkbULlFLiVjWH4YRrugTjge1uXdh0TZ0A1BhIuc+Y/bKUTIL6PFyPKkaUDm3LqAU70CJY44Tw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cJHgRXr0; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cJHgRXr0" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2B522C16AAE; Wed, 21 Jan 2026 01:11:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768957912; bh=GsEgsD3UUrEHF5Z5mnzBdjaqQA8MKMXEJII30Ay47EM=; h=Date:Subject:Cc:To:From:References:In-Reply-To:From; b=cJHgRXr0dkmOrlIzd0OXtPKMbKD/tUg3LBCl2KXn3XL/YMJnEYkGx3Q/PlOpL9nZI 1XAqCiOw/Ol4eEsdLY6m8P183RfYi02f0RWORdFgS3iFbvnJwCDAlEHX1IRe6ihQ4q 45o9mFgwiZwRQgdYzBebqnV1lZNVggfbi8DyJX2zIRs8FIswmoIwvYupvqCsHYxA4U j9lTXKvGsftdkHEFMgTWARmXcmkL4CiFaoc+xRY2ZoBDrhm9OSnVQXH0ENtfFgoYkQ neK91GvFGAnXHVTJ3hMXftfj0MMdPlGSg5PdFfE6q+6k3FYexnR397CAh0GxtVi7H2 TPrJejSlECn6Q== Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Wed, 21 Jan 2026 02:11:48 +0100 Message-Id: Subject: Re: [PATCH v5] driver core: enforce device_lock for driver_match_device() Cc: "Gui-Dong Han" , , , , , "Qiu-ji Chen" , , "Marek Szyprowski" To: "Mark Brown" From: "Danilo Krummrich" References: <20260113162843.12712-1-hanguidong02@gmail.com> <7ae38e31-ef31-43ad-9106-7c76ea0e8596@sirena.org.uk> <4ec6cf46-990e-489c-836e-49124034b67f@sirena.org.uk> <47a4290a-6e5b-4648-b798-e9d967b570b4@sirena.org.uk> In-Reply-To: On Tue Jan 20, 2026 at 10:18 PM CET, Danilo Krummrich wrote: > Anyways, this should work: I Just notied that I pasted the wrong diff, which was nonsense of course, s= ince it just unlocks all the suppressed false positives. (Should not have sent i= t during a meeting. :) What I actually intended (not neat, but hopefully helps): diff --git a/drivers/base/base.h b/drivers/base/base.h index 677320881af1..4741412d7e46 100644 --- a/drivers/base/base.h +++ b/drivers/base/base.h @@ -190,8 +190,13 @@ static inline int driver_match_device(const struct dev= ice_driver *drv, static inline int driver_match_device_locked(const struct device_driver *d= rv, struct device *dev) { - guard(device)(dev); - return driver_match_device(drv, dev); + int ret; + + mutex_acquire(&dev->mutex.dep_map, 0, 0, _THIS_IP_); + ret =3D driver_match_device(drv, dev); + mutex_release(&dev->mutex.dep_map, _THIS_IP_); + + return ret; } =20 static inline void dev_sync_state(struct device *dev) diff --git a/drivers/base/core.c b/drivers/base/core.c index 40de2f51a1b1..56c62b3016aa 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -2557,6 +2557,8 @@ static void device_release(struct kobject *kobj) =20 kfree(dev->dma_range_map); =20 + lockdep_unregister_key(&dev->lock_key); + if (dev->release) dev->release(dev); else if (dev->type && dev->type->release) @@ -3159,7 +3161,9 @@ void device_initialize(struct device *dev) kobject_init(&dev->kobj, &device_ktype); INIT_LIST_HEAD(&dev->dma_pools); mutex_init(&dev->mutex); - lockdep_set_novalidate_class(&dev->mutex); + //lockdep_set_novalidate_class(&dev->mutex); + lockdep_register_key(&dev->lock_key); + lockdep_set_class(&dev->mutex, &dev->lock_key); spin_lock_init(&dev->devres_lock); INIT_LIST_HEAD(&dev->devres_head); device_pm_init(dev); diff --git a/include/linux/device.h b/include/linux/device.h index 0be95294b6e6..dc898a420bc2 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -579,6 +579,7 @@ struct device { struct mutex mutex; /* mutex to synchronize calls to * its driver. */ + struct lock_class_key lock_key; =20 struct dev_links_info links; struct dev_pm_info power;