From mboxrd@z Thu Jan 1 00:00:00 1970 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 B30483E1718 for ; Thu, 21 May 2026 14:26:02 +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=1779373564; cv=none; b=IEhDWD2V8bMT7PPWWjoX6Hc1T1CIMris9zipdPLzx/hRu4G4hmw+Ogp+3YXfjA2NZhCi0HFALRJ1ClHNbpQQaVXauxMK1Utoqc+vT8UItOUqjVsMnYHnMLYNEB5xwq0h5HODvkt3d84JYtjnj7FcFKxQN+WSuQFaOkM6KpC2L9I= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779373564; c=relaxed/simple; bh=ZdTk1Ziexd4QriIf2QJ2Q9EoStiw8d8kyLYkSqQPIiU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FLVYpNpXT4IJCkSJTdeJtNVRrWeiIlG2M0upRCxpwgm/5VTSP/1U00kPMgayX773nv25qm659MjjBmOYoIdOFcXh8qZkRllM82uWh8SMybEmi0YysktHKdkzcSPnwdOwVN0KWdF2g22pTuwZd+kDhGWeZSNKIqJirkNaKDXBcig= 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=RVty6RUQ; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Bs7SO8Kx; 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="RVty6RUQ"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Bs7SO8Kx" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64L9ALKg3555946 for ; Thu, 21 May 2026 14:26:02 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= fL2dHwSbHszwitWCSD9mEtveo5+L6thdY8thu2dsFPs=; b=RVty6RUQzlTHOihn ZDzSVtv+m4IJU+1QaGO2ZH0LOoPeVlfBOpIeT+pulZD3L+f2IpqgYWiYHAOkEr4a zr38iDR/iNh6Odi8cMFZF/DkKFZN1RkRK5wDgtBQwXjxj47umFIRoCjKM6JRB0/J NjkbsIF223i6DaUUkdHo7s85Tz5g6bggcHuq79NNBzUV6QmC628n6rjfkBUAPBdt VEl7ZXbw8ct2hTTck2ABfMn3psWinmmYabhf2JiepFpT/RMc2SgAhMd4umnks+rt XcekjLNMCdr3oS353RT1z2r2Ip7cyLS81JPM6uw6mxx4llNoWkPSEDYBvrSk4KYl GIljWg== Received: from mail-oo1-f69.google.com (mail-oo1-f69.google.com [209.85.161.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e9fb6myp5-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 21 May 2026 14:26:01 +0000 (GMT) Received: by mail-oo1-f69.google.com with SMTP id 006d021491bc7-69b76062cffso7905283eaf.1 for ; Thu, 21 May 2026 07:26:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779373561; x=1779978361; 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=fL2dHwSbHszwitWCSD9mEtveo5+L6thdY8thu2dsFPs=; b=Bs7SO8Kx2G+jVh+eFyVYR25JjcbBE5oXF9AogumiaUGvtuX3ycQLvs8VpcRMbGXOhq FQOmDGUwJXbXy7I3rZAF/2chNuo8O/Czw0zK/XXN9GdPYUxj1iFzQhmcycVJ281+Dw5r 7iE5qb9SDqoq4snWbFrSgg9wLqGiFqpAk7CfEqcrQM67V/qHPsUkNsmM4HcBpU0b+/79 NUmn9Iwd7WwCYJs42YYRISRMzPeZTKnc5ylhCkfVpvV0BSLcyldW+JtYjtz2nIPzt4GF qrs/kOASejUwL42qPaGPYmOqMBvjuh6zDcTHPBR0/lzEVld4x5bLoiVJjmKFCV9XlxMG kacg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779373561; x=1779978361; 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=fL2dHwSbHszwitWCSD9mEtveo5+L6thdY8thu2dsFPs=; b=Rvk6A0puD0qOoRc5Dq3xuLpSlpUqVdS2xHs2AKrW6noCraweHYGbWOn2ZnpJuI6c24 RW02du2bAlA/YdsR+OU8nuXZQ+UDgeZhwCuTJNjHfuefDjdvKI6a797VIE5hNZ3UYqSV C2w4ZquXMk9m/09rpxskq2glC27MEOzMfBOdYY9QpEK6EnsUyBRbAyYTeF2mkmBSPLvK Yj8wEkq+762rRvrvbFwRlv1w8DH4GlWdrrz1DgrN5cfwQM4BVMHtXzFGNpHcjcV5hDwo ZmPKkEaWyiOxSq2PvrY3PkT5tUJ1B2jh3q6krN+h10ddNsxoPyqHTCgHHoV2X79Dn3KC vV9g== X-Gm-Message-State: AOJu0YxSrC/4xxlBYzxzIXCO5M0444sNTWNuUzrcvS42wRJCtgP6jUA1 KIHxZBJkbggPLU1LXGlAnMKGVgQk2p2eZVjE/MichsASXQcHEcNdiZYU7luEKuPd8Y1ZtxSlIwL BSLmeOxfX1jEXgxDwPLGycTTcO6ctYgbeYRoCoiSMLNB1GrevI2akoPNp9ETZZR6jlOQ= X-Gm-Gg: Acq92OGRqC1MELWZVE+4ov2JRE3G5apb56rkLkVUt3unmwiT0tIbYXkPXj5kKGdnasB 5Mgx2xfGIaLYC4PJAOM8/vpgmCusTEMvDBjGtKQYHQR47lEQ2FU5ipRkJvfuoqWtJ3vEsaLKJn0 i5eM+wSO7frW61VaiyqiW/9bhu6KFk6Cf5ZHhr40eyBvve3dVYVIp3u5evQxakIWi4gOA6Zrg7A SB4DJx/eG6OnA0LfkpsPnz++diSUGohIayDDYNxdHnPIWTUUVbzwI7kcB5CP4hZY8rB88mjbR8W BxU0KGFay3Mgh893lBgrBMc19hmx2o4w9lf5lVLx5zgf+icE3vipJ4+ZvwYSTtnQyfNxz45ppvT qzJTxDBCY91mK0YWHnr1uUgvsEmMplXVRNVAnPp6618V5L8Mh2YA= X-Received: by 2002:a05:6820:4790:b0:69d:7774:fae3 with SMTP id 006d021491bc7-69d7774fdafmr512843eaf.26.1779373561039; Thu, 21 May 2026 07:26:01 -0700 (PDT) X-Received: by 2002:a05:6820:4790:b0:69d:7774:fae3 with SMTP id 006d021491bc7-69d7774fdafmr512828eaf.26.1779373560572; Thu, 21 May 2026 07:26:00 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bb10:ae82:b7c3:d15a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4903c9abbadsm30441925e9.8.2026.05.21.07.25.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 May 2026 07:25:59 -0700 (PDT) From: Bartosz Golaszewski Date: Thu, 21 May 2026 16:25:38 +0200 Subject: [PATCH v4 05/10] 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: 7bit Message-Id: <20260521-nvmem-unbind-v4-5-7fa136759491@oss.qualcomm.com> References: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> In-Reply-To: <20260521-nvmem-unbind-v4-0-7fa136759491@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold , Loic Poulain Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6918; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=ZdTk1Ziexd4QriIf2QJ2Q9EoStiw8d8kyLYkSqQPIiU=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBqDxXoiTfb8EwnK775yHx6HFIcm/PfscJ0UWpqw 53oHM0m1IGJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCag8V6AAKCRAFnS7L/zaE w7H6EAC07JM72XFbLfJIJpjIn6jge7yHWF5jRMKSVJWz7y2Vd6xS48OYFVpkGOLIoqQg268QacW d83vKGG5pLXbLVUeC3Au8wLku4ABUSAcBI3da3Hpvc2UfvhzaIrrG+kqb/cdlBAYOxTBI85BMmo HXQBrVqWjjMPe05D43d68ASpb7IuKDU4TU6Qx+L8Rv82zPCsCzf9t0OB+P85LgzM88eUOiZW2kt bHOaH/MFqZ44ruRb3G7m9emz2GAz9exVP9FaVBvlYYd33PawvKwJhyc9hDMsWKkqhXxLjOf8Gwq Nkc5W/xQN6WMtQwIAyGobn+cfiZmre/Xw0FIfhrrSsMuRIZ7P9XZIlFxukZu1ocfg36v0COV6Bg 3FONN40DAKNidWlrkjnfHSdF4HSxfUYF8leZLYW3odSFLwSee45ne0VtlT+ZSe39MzO3ZRXD9qG uDxDa9DXjg9fTBd8Aqk8RI8+ogTnR1r2NyE1tDBTNC4wKWZjz6WgtWBPWfUGmZXkkjClCBvZZ71 pPBORv7X32ch9pjr/S6OMdoh4L+h24NXzGI0xW4oS0iDH7jtWQd7hyuDhCIVU2i239EVoOWwSu3 81bQcm5n18zPFkOMtDq6wNnlGsIifSMeY61Q0mHK3yq1RFnUStyKExI+r/CQoi/ZTBppGx5lvM8 /AMw/E/M02jGyEw== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Authority-Analysis: v=2.4 cv=do/rzVg4 c=1 sm=1 tr=0 ts=6a0f15f9 cx=c_pps a=lVi5GcDxkcJcfCmEjVJoaw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=uP1ucDPQAAAA:8 a=-rJ4p0UJwyiPJ0m2jL8A:9 a=QEXdDO2ut3YA:10 a=rBiNkAWo9uy_4UTK5NWh:22 a=9a9ggB8z3XFZH39hjkD6:22 X-Proofpoint-ORIG-GUID: VDZmAOxwe1Br1P7R361SgbVCoMJ15BXm X-Proofpoint-GUID: VDZmAOxwe1Br1P7R361SgbVCoMJ15BXm X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTIxMDE0NCBTYWx0ZWRfX5yEnbIIbwgmb m4rgBMlSZcYe4BIBNRu9JwjVmzzwI9RPz7PLarW9sGFr0TJNSwzHX/rVUJBmnpCs6YacdHchxTW SBVQ1869lypvExEaLItAG9Tm1kkZbe9GrObdkgxzgY8pOI0eZiTDYS8wI39/pMf6GO9vgCma0Be VNm+iyCM7PinuBmjyhZyh7QbfRJCtfqbIWTJYs42c0tU0+fzrvF/ZFBCRZIWGO0SPDlCuPCLlLj 3T6PLD2GvtNo6jyC3IipdgRkNiY47JbR8a1BFwOX8nnklJke4n8mxBRCGsmijJO9Qy5asFbh2/f e2pL/H843UfhBizCDp1d/TCaiftOq+QG2c4tRD4SI0hqslPj6nSYVJq7aHwS3fcqEBuHw+xGI1T Y/hpGJEH7VtHMBn7N4pGn1RzO8WVb36/Zgoyiqke/IHKgab/QK5DPm3iE94b/kEBu/nSB96A0xk 070fqT4qrnqDgbbF2EA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-21_02,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 lowpriorityscore=0 bulkscore=0 suspectscore=0 clxscore=1015 spamscore=0 malwarescore=0 phishscore=0 priorityscore=1501 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605210144 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 | 88 ++++++++++++++++++++++------------------------------ 1 file changed, 37 insertions(+), 51 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index bf5dde6288cfa75cab4040c6b93e3376e87fc691..623aeb9533c0124bb893d0c229570e00cfa3c52a 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -6,6 +6,7 @@ * Copyright (C) 2013 Maxime Ripard */ +#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_device *nvmem) const struct bin_attribute **pattrs; struct bin_attribute *attrs; unsigned int ncells = 0, i = 0; - int ret = 0; + int ret; - mutex_lock(&nvmem_mutex); + guard(mutex)(&nvmem_mutex); if (list_empty(&nvmem->cells) || nvmem->sysfs_cells_populated) - goto unlock_mutex; + return 0; /* Allocate an array of attributes with a sentinel */ ncells = list_count_nodes(&nvmem->cells); pattrs = devm_kcalloc(&nvmem->dev, ncells + 1, sizeof(struct bin_attribute *), GFP_KERNEL); - if (!pattrs) { - ret = -ENOMEM; - goto unlock_mutex; - } + if (!pattrs) + return -ENOMEM; attrs = devm_kcalloc(&nvmem->dev, ncells, sizeof(struct bin_attribute), GFP_KERNEL); - if (!attrs) { - ret = -ENOMEM; - goto unlock_mutex; - } + if (!attrs) + return -ENOMEM; /* 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_device *nvmem) attrs[i].size = entry->bytes; attrs[i].read = &nvmem_cell_attr_read; attrs[i].private = entry; - if (!attrs[i].attr.name) { - ret = -ENOMEM; - goto unlock_mutex; - } + if (!attrs[i].attr.name) + return -ENOMEM; pattrs[i] = &attrs[i]; i++; @@ -514,13 +510,10 @@ static int nvmem_populate_sysfs_cells(struct nvmem_device *nvmem) ret = device_add_group(&nvmem->dev, &group); if (ret) - goto unlock_mutex; + return ret; nvmem->sysfs_cells_populated = true; -unlock_mutex: - mutex_unlock(&nvmem_mutex); - return ret; } @@ -558,9 +551,8 @@ static const struct bus_type nvmem_bus_type = { 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) 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); } @@ -728,14 +719,14 @@ nvmem_find_cell_entry_by_name(struct nvmem_device *nvmem, const char *cell_id) { struct nvmem_cell_entry *iter, *cell = NULL; - mutex_lock(&nvmem_mutex); + guard(mutex)(&nvmem_mutex); + list_for_each_entry(iter, &nvmem->cells, node) { if (strcmp(cell_id, iter->name) == 0) { cell = iter; break; } } - mutex_unlock(&nvmem_mutex); return cell; } @@ -1121,11 +1112,11 @@ static struct nvmem_device *__nvmem_device_get(void *data, struct nvmem_device *nvmem = NULL; struct device *dev; - mutex_lock(&nvmem_mutex); - dev = bus_find_device(&nvmem_bus_type, NULL, data, match); - if (dev) - nvmem = to_nvmem_device(dev); - mutex_unlock(&nvmem_mutex); + scoped_guard(mutex, &nvmem_mutex) { + dev = bus_find_device(&nvmem_bus_type, NULL, data, match); + if (dev) + nvmem = to_nvmem_device(dev); + } if (!nvmem) return ERR_PTR(-EPROBE_DEFER); @@ -1335,7 +1326,7 @@ nvmem_cell_get_from_lookup(struct device *dev, const char *con_id) dev_id = dev_name(dev); - mutex_lock(&nvmem_lookup_mutex); + guard(mutex)(&nvmem_lookup_mutex); list_for_each_entry(lookup, &nvmem_lookup_list, node) { if ((strcmp(lookup->dev_id, dev_id) == 0) && @@ -1343,11 +1334,9 @@ nvmem_cell_get_from_lookup(struct device *dev, const char *con_id) /* This is the right entry. */ nvmem = __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 = ERR_CAST(nvmem); - break; - } + return ERR_CAST(nvmem); cell_entry = nvmem_find_cell_entry_by_name(nvmem, lookup->cell_name); @@ -1363,7 +1352,6 @@ nvmem_cell_get_from_lookup(struct device *dev, const char *con_id) } } - mutex_unlock(&nvmem_lookup_mutex); return cell; } @@ -1377,18 +1365,16 @@ static void nvmem_layout_module_put(struct nvmem_device *nvmem) static struct nvmem_cell_entry * nvmem_find_cell_entry_by_node(struct nvmem_device *nvmem, struct device_node *np) { - struct nvmem_cell_entry *iter, *cell = NULL; + struct nvmem_cell_entry *cell; - mutex_lock(&nvmem_mutex); - list_for_each_entry(iter, &nvmem->cells, node) { - if (np == iter->np) { - cell = iter; - break; - } + guard(mutex)(&nvmem_mutex); + + list_for_each_entry(cell, &nvmem->cells, node) { + if (np == cell->np) + return cell; } - mutex_unlock(&nvmem_mutex); - return cell; + return NULL; } static int nvmem_layout_module_get_optional(struct nvmem_device *nvmem) @@ -2121,10 +2107,10 @@ void nvmem_add_cell_lookups(struct nvmem_cell_lookup *entries, size_t nentries) { int i; - mutex_lock(&nvmem_lookup_mutex); + guard(mutex)(&nvmem_lookup_mutex); + for (i = 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); @@ -2139,10 +2125,10 @@ void nvmem_del_cell_lookups(struct nvmem_cell_lookup *entries, size_t nentries) { int i; - mutex_lock(&nvmem_lookup_mutex); + guard(mutex)(&nvmem_lookup_mutex); + for (i = 0; i < nentries; i++) list_del(&entries[i].node); - mutex_unlock(&nvmem_lookup_mutex); } EXPORT_SYMBOL_GPL(nvmem_del_cell_lookups); -- 2.47.3