From nobody Mon Feb 9 08:56:28 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (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 4D4EF364E9D for ; Fri, 16 Jan 2026 11:01:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768561295; cv=none; b=OwXH2Kw9bRiTQUmg5z+hSxAxBQ4pticiKG/p5Yvo9/k7l84/QnocNFCHlfH/r5DMQ32WNpMJbe/thy5W3I96sixhmiy8TsRo0Lpk/h6jdFlBicQlDnjobIDaq18U8M10uclYtGjHrZRP79L5OE3sk7tDsARC3zO2yB3jK5p17wg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768561295; c=relaxed/simple; bh=qdd81TzQGTV1ftxAN2AmJ5zQSnYHW7TGbjbFYFwB5GY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FiQ8GERPqIEXUpvaBGNrIuy0QeBjAGJAyovabWWc3YiIeCnLqZgv8bYdGa0K1hqyu/3hiXn7eOfhVDp0k3yIv2l3JyYOCYsn5s9YpBu9MNUGdkTMLAfeBcCWvU3OrLswx+8deAO7tTSkicB9nubU/jtGaYC/OxXXfTZr1wYR5Qw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=Hgi3QM47; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=HFsQmpo6; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="Hgi3QM47"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="HFsQmpo6" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 60G8Nqhj4101350 for ; Fri, 16 Jan 2026 11:01:32 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= uQrQ0ayrcTm8VLCHF2V4dD1WRxUu5hLYY1t5VNtZkms=; b=Hgi3QM47sgLwQCLa cjnCF4VyjOTiLUZbQEtoNrHtfDXCX+FISxdxmIC+1AyGCGq1yyWhRdmG0G2Ir9EZ a9/G2X/5cQvlsv1CLhm+1fQwXNzhtupiQ7btiVhyDc3TW9clXgm5Br+aDpn+C7/K 36YiUOxo/VlbstE/QOVH69lzwJ2Ot8p0ArBDDIks6EeKek1h4GxIpAEgTh0t9XyL Bd5IKOz7Kssp/YqZr00TmGJRfaQhl920w904tMpDL1dPRMsMv6dBvV5Fhi7WYtO1 IqVoKUjV+ECJzxjGPAIun3Ez554jTqZdw/pHMDHUx9Zfrekz1DImC3/KmEe4LZvb wL3BNw== Received: from mail-vs1-f69.google.com (mail-vs1-f69.google.com [209.85.217.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bq9751v0q-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 16 Jan 2026 11:01:32 +0000 (GMT) Received: by mail-vs1-f69.google.com with SMTP id ada2fe7eead31-5ec87b2b4ddso1496387137.3 for ; Fri, 16 Jan 2026 03:01:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1768561292; x=1769166092; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=uQrQ0ayrcTm8VLCHF2V4dD1WRxUu5hLYY1t5VNtZkms=; b=HFsQmpo6gfGsiTXZqmVaWpq8d8lYKLJWQdkG3p9mJ56+2lzbqbvcp+KRJPG0ROHq4K 9uw5l29qwUWoXKe5tN0vHZQ3eoAu85t0fOXSsLDACIwU5gn2GeHOskD6NgCMZTZ2LZY7 AbKP6b4e2j91PzvJwBZ0VOTS0XxKGSdYKsw5nm940IN3gfJ1xY+h8hG6OJsfgNI4Q6Y4 /OpoTVTkHR6AAHfhHmz2lLJuwpIP0x/++bYT+jXLqjmYFZVdERTwp1S48OyRDEHs+IQA rC5MlDttYzvZ0TBkYDX28LNCyoOAgWTFJ4Wk46ChvHZM68wK0cVwrEXILvfklCs28/A5 G57Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768561292; x=1769166092; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=uQrQ0ayrcTm8VLCHF2V4dD1WRxUu5hLYY1t5VNtZkms=; b=vhloAivRT9aIm/sxuuESOMBXtB0Cit2mwgbglkRFGW7pfxSE4h+QxofyHrKHVamoCv oQljGXmRXul7RslEkcZjOmx/tGv4EwVFQtqWljycLUz9IdbExs6l6yE3mykp7tWMIXOX 34E62jtv6hZDPRp0Pr3c8hNdLdekAbyqkFEGf9SMzZz+0O2ytXMP5d+zXJtmb85lX1UK cQBrh9qw7LDAJMT8A0JwwPVH4c8C4qr+hoFMLOpx3HvhTjz9v5kWPsY02rTT0zvAqulv zkf8Ktpk8UxwUaqzvhQqgiTvTbUj5jsGxC0IomS/ruwdKBDzyseHA5BkFLnY0Ou3kKGA HnTA== X-Gm-Message-State: AOJu0YzxVBYwET461YCSOlg4W3Wb7jleCtI1qvnQmWZrlQZGv3dRbrKb bYXNuWOUtgIkBD8hNkNPsxkoHnMOkXaHh6BnXsSlQJr4nCqu6B81rHVUZ4VE6a6RLRm6QEs4983 xRCUFIYIvqxdz0STdNXDrkbYLPI//3SbRcbosRXUIWpjKuCIP3TSqxceXSv+F2T8dFXsGlBxxO1 4= X-Gm-Gg: AY/fxX7w9OI8YrqhJR/6yYj+kKFfs0cV+NBqAv6nTieyD5owpzx3GnKdT+2BSFT7Xxf 3sPSyghRBManvFZKG8BFgOlrEFC+LJGA+gd5hbPZncyCSA5HnlHAURn9XH9yMBFTr879ojUKkty F4b/3DIt3ZDYz795M+wiCTNn1JMWYC0Yr6b8qsPQlPU3ab7KvAkumuTaxeleCHK+ldms38aIdsb wkcvjiKMy9LqkrOgWeptlemrfRsXFE8MZfGs7Cx1GWUGvKuMyjA0c98JoP7f/mIedsxPDg1okR1 NNWrtIZFcaWZXm0nlEQD9qDV2hRkZg7H4bRgPM8SpWt0+KMaUHEVnSSd1PJWxhLt28i8hmu4Sgd hlR5/nYL4L8LF1hm4Rh2gefNcUGZwCNW2FXJFZZI= X-Received: by 2002:a05:6102:cc6:b0:5db:20ea:2329 with SMTP id ada2fe7eead31-5f1a55a32demr785052137.35.1768561290056; Fri, 16 Jan 2026 03:01:30 -0800 (PST) X-Received: by 2002:a05:6102:cc6:b0:5db:20ea:2329 with SMTP id ada2fe7eead31-5f1a55a32demr785044137.35.1768561289470; Fri, 16 Jan 2026 03:01:29 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:d1c:5bb0:db13:fc7d]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47f4289b789sm93512975e9.1.2026.01.16.03.01.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Jan 2026 03:01:29 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 16 Jan 2026 12:01:11 +0100 Subject: [PATCH 4/7] nvmem: simplify locking with guard() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260116-nvmem-unbind-v1-4-7bb401ab19a8@oss.qualcomm.com> References: <20260116-nvmem-unbind-v1-0-7bb401ab19a8@oss.qualcomm.com> In-Reply-To: <20260116-nvmem-unbind-v1-0-7bb401ab19a8@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski Cc: linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6574; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=qdd81TzQGTV1ftxAN2AmJ5zQSnYHW7TGbjbFYFwB5GY=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpahp/Qw7dm2mxKUv7bSl8+T/Zb32g5MJum23eR MXk68A5qV2JAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaWoafwAKCRAFnS7L/zaE wxwhEACPiPt2oaz3LpXXXFQDtfVc7qRWWdDOGMo6acyF34FDhUW/jX6iv04MlGfxaY+mU3qDOxM 4ZW4pneRxZB8ep7zXUvikMn016bTDdLqmmbCpdY+2U2Zq8DaQ4W1rzXeC/5GLDepyarTsgpN4lT 6HbE/UV1vUvnO4VP1tdhjDL8ILnZ8aY9K/kZ5B5v+bhfjoFrOqUo03+6iys29TkKfK1iMHihJo0 bxEnhMq4gq1rkyT6OWbcgAxEMm8kyBYPDo5OMjStFQXS2dAT65cjp1wD/26Vb8mZUTB5zb6Eg0B FUar0cAntmpBZ+GFp7+cq3cXdtKLjsxxr+PKxoNffdsMkI2HwmA5t0NAb2fh2nmXe2g09HpaQzo SxPoR0t4IVnxadAGbaF2r+lRO9sQ4dcb46N7xSjaD5U5unZuAIvyKL9dmnrd/iS+dMcGjRNFJ7b 9AkfmtcdO8cDrDtcTPWIk0QM02ChGiS7N+Wu5Gp+uygVawONaYEGHV0ShT3PbdZ3dm/8U610Y+Y 6UGWeDnUztRcyRIX+iUsDrhnVr37xcFBJIpLd/K3BFtMmrxN0WBmMrytYQwjedGDVYOYcgW5QDw doFXqY38E++ywPJrHmyxtggANTLb5n4SitFOliyl7iJ/pUFmm/M/gdV2tILbzDl7RyJoG+iIGzI KWfaMLbrjXzpyXA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA4MCBTYWx0ZWRfX/EqhsGLePqr+ glxN3WtOncyZ8GN8Pe+nN8kIh+21z/z0pRjkKY+2SaYolVJ+RgDNk+Z16R9xuPhmuhXtXeznYUg 7RN14I0NNAjt2859fq4DUNItCpCstWZJqPLdaEy97VdYn6mg6TrYVE8P06v2T7qPdLNGfl5F8Z1 eQKRI9YT86DewyAqC6dwYvUbUKaqd8ImBPSoLarOUYN7ihYxW0MGzObkoJaIR0hjLHIK0z7zUjQ DOHyX+4ZDJFxFekdjMgHWHu9ZJdG2GtOo/nkc/O4/IeDaO+pXGhlvmb2CxDRRAINWil2GuuW8ah 2+YZljiC3BVQXU+Wh3Xcxz1lOvN97f/fJytPXMN59fN0xIH/mCEWHfGHbunSwpa/VAJRrr7bSfw sz5sD/JdCQK71QbfqxZJHpebNCY0yGfCImN2MY2UlOgv5YK4o6ShQ1VeB5fYZ0jvbikqc/qP0iF 6uZLPRh6xPSDuoepU3w== X-Authority-Analysis: v=2.4 cv=Sv6dKfO0 c=1 sm=1 tr=0 ts=696a1a8c cx=c_pps a=5HAIKLe1ejAbszaTRHs9Ug==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=uP1ucDPQAAAA:8 a=-rJ4p0UJwyiPJ0m2jL8A:9 a=QEXdDO2ut3YA:10 a=gYDTvv6II1OnSo0itH1n:22 a=9a9ggB8z3XFZH39hjkD6:22 X-Proofpoint-GUID: epO3COxvSn_YchRADPpgm4E3pFfsMbWf X-Proofpoint-ORIG-GUID: epO3COxvSn_YchRADPpgm4E3pFfsMbWf X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-16_03,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 clxscore=1015 impostorscore=0 bulkscore=0 adultscore=0 phishscore=0 spamscore=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601160080 Use lock guards from cleanup.h to simplify locking. While at it: add the missing mutex.h include. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 76 ++++++++++++++++++++++--------------------------= ---- 1 file changed, 32 insertions(+), 44 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 454e0645d1545602cd193f66b54bd5c5811ca5ed..f045c53863aa7d55d51e44712c0= 1eba97be2ac66 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -6,6 +6,7 @@ * Copyright (C) 2013 Maxime Ripard */ =20 +#include #include #include #include @@ -13,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -468,27 +470,23 @@ static int nvmem_populate_sysfs_cells(struct nvmem_de= vice *nvmem) const struct bin_attribute **pattrs; struct bin_attribute *attrs; unsigned int ncells =3D 0, i =3D 0; - int ret =3D 0; + int ret; =20 - mutex_lock(&nvmem_mutex); + guard(mutex)(&nvmem_mutex); =20 if (list_empty(&nvmem->cells) || nvmem->sysfs_cells_populated) - goto unlock_mutex; + return 0; =20 /* Allocate an array of attributes with a sentinel */ ncells =3D list_count_nodes(&nvmem->cells); pattrs =3D devm_kcalloc(&nvmem->dev, ncells + 1, sizeof(struct bin_attribute *), GFP_KERNEL); - if (!pattrs) { - ret =3D -ENOMEM; - goto unlock_mutex; - } + if (!pattrs) + return -ENOMEM; =20 attrs =3D devm_kcalloc(&nvmem->dev, ncells, sizeof(struct bin_attribute),= GFP_KERNEL); - if (!attrs) { - ret =3D -ENOMEM; - goto unlock_mutex; - } + if (!attrs) + return -ENOMEM; =20 /* Initialize each attribute to take the name and size of the cell */ list_for_each_entry(entry, &nvmem->cells, node) { @@ -501,10 +499,8 @@ static int nvmem_populate_sysfs_cells(struct nvmem_dev= ice *nvmem) attrs[i].size =3D entry->bytes; attrs[i].read =3D &nvmem_cell_attr_read; attrs[i].private =3D entry; - if (!attrs[i].attr.name) { - ret =3D -ENOMEM; - goto unlock_mutex; - } + if (!attrs[i].attr.name) + return -ENOMEM; =20 pattrs[i] =3D &attrs[i]; i++; @@ -514,13 +510,10 @@ static int nvmem_populate_sysfs_cells(struct nvmem_de= vice *nvmem) =20 ret =3D device_add_group(&nvmem->dev, &group); if (ret) - goto unlock_mutex; + return ret; =20 nvmem->sysfs_cells_populated =3D true; =20 -unlock_mutex: - mutex_unlock(&nvmem_mutex); - return ret; } =20 @@ -558,9 +551,8 @@ static const struct bus_type nvmem_bus_type =3D { static void nvmem_cell_entry_drop(struct nvmem_cell_entry *cell) { blocking_notifier_call_chain(&nvmem_notifier, NVMEM_CELL_REMOVE, cell); - mutex_lock(&nvmem_mutex); - list_del(&cell->node); - mutex_unlock(&nvmem_mutex); + scoped_guard(mutex, &nvmem_mutex) + list_del(&cell->node); of_node_put(cell->np); kfree_const(cell->name); kfree(cell); @@ -576,9 +568,8 @@ static void nvmem_device_remove_all_cells(const struct = nvmem_device *nvmem) =20 static void nvmem_cell_entry_add(struct nvmem_cell_entry *cell) { - mutex_lock(&nvmem_mutex); - list_add_tail(&cell->node, &cell->nvmem->cells); - mutex_unlock(&nvmem_mutex); + scoped_guard(mutex, &nvmem_mutex) + list_add_tail(&cell->node, &cell->nvmem->cells); blocking_notifier_call_chain(&nvmem_notifier, NVMEM_CELL_ADD, cell); } =20 @@ -728,14 +719,14 @@ nvmem_find_cell_entry_by_name(struct nvmem_device *nv= mem, const char *cell_id) { struct nvmem_cell_entry *iter, *cell =3D NULL; =20 - mutex_lock(&nvmem_mutex); + guard(mutex)(&nvmem_mutex); + list_for_each_entry(iter, &nvmem->cells, node) { if (strcmp(cell_id, iter->name) =3D=3D 0) { cell =3D iter; break; } } - mutex_unlock(&nvmem_mutex); =20 return cell; } @@ -1124,11 +1115,11 @@ static struct nvmem_device *__nvmem_device_get(void= *data, struct nvmem_device *nvmem =3D NULL; struct device *dev; =20 - mutex_lock(&nvmem_mutex); - dev =3D bus_find_device(&nvmem_bus_type, NULL, data, match); - if (dev) - nvmem =3D to_nvmem_device(dev); - mutex_unlock(&nvmem_mutex); + scoped_guard(mutex, &nvmem_mutex) { + dev =3D bus_find_device(&nvmem_bus_type, NULL, data, match); + if (dev) + nvmem =3D to_nvmem_device(dev); + } if (!nvmem) return ERR_PTR(-EPROBE_DEFER); =20 @@ -1338,7 +1329,7 @@ nvmem_cell_get_from_lookup(struct device *dev, const = char *con_id) =20 dev_id =3D dev_name(dev); =20 - mutex_lock(&nvmem_lookup_mutex); + guard(mutex)(&nvmem_mutex); =20 list_for_each_entry(lookup, &nvmem_lookup_list, node) { if ((strcmp(lookup->dev_id, dev_id) =3D=3D 0) && @@ -1346,11 +1337,9 @@ nvmem_cell_get_from_lookup(struct device *dev, const= char *con_id) /* This is the right entry. */ nvmem =3D __nvmem_device_get((void *)lookup->nvmem_name, device_match_name); - if (IS_ERR(nvmem)) { + if (IS_ERR(nvmem)) /* Provider may not be registered yet. */ - cell =3D ERR_CAST(nvmem); - break; - } + return ERR_CAST(nvmem); =20 cell_entry =3D nvmem_find_cell_entry_by_name(nvmem, lookup->cell_name); @@ -1366,7 +1355,6 @@ nvmem_cell_get_from_lookup(struct device *dev, const = char *con_id) } } =20 - mutex_unlock(&nvmem_lookup_mutex); return cell; } =20 @@ -1382,14 +1370,14 @@ nvmem_find_cell_entry_by_node(struct nvmem_device *= nvmem, struct device_node *np { struct nvmem_cell_entry *iter, *cell =3D NULL; =20 - mutex_lock(&nvmem_mutex); + guard(mutex)(&nvmem_mutex); + list_for_each_entry(iter, &nvmem->cells, node) { if (np =3D=3D iter->np) { cell =3D iter; break; } } - mutex_unlock(&nvmem_mutex); =20 return cell; } @@ -2126,10 +2114,10 @@ void nvmem_add_cell_lookups(struct nvmem_cell_looku= p *entries, size_t nentries) { int i; =20 - mutex_lock(&nvmem_lookup_mutex); + guard(mutex)(&nvmem_mutex); + for (i =3D 0; i < nentries; i++) list_add_tail(&entries[i].node, &nvmem_lookup_list); - mutex_unlock(&nvmem_lookup_mutex); } EXPORT_SYMBOL_GPL(nvmem_add_cell_lookups); =20 @@ -2144,10 +2132,10 @@ void nvmem_del_cell_lookups(struct nvmem_cell_looku= p *entries, size_t nentries) { int i; =20 - mutex_lock(&nvmem_lookup_mutex); + guard(mutex)(&nvmem_mutex); + for (i =3D 0; i < nentries; i++) list_del(&entries[i].node); - mutex_unlock(&nvmem_lookup_mutex); } EXPORT_SYMBOL_GPL(nvmem_del_cell_lookups); =20 --=20 2.47.3