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 42DE2361646 for ; Mon, 23 Feb 2026 10:58:00 +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=1771844281; cv=none; b=tIkf/pjJrBXooSCakRV0R+FWDXj8qjjSIQvRSeygsqdvcnZgS2rOknODOU0Y8SzDHsml8jd5aeNAjWAoaCuygKIPnt2hitAYzcaAD8Mqp1VOIRxcPdbqeIXEPrkeVmqZdav+6RErY9TU1wkdGmqz5HqMV/lAiCpT3F6ve2TANGM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771844281; c=relaxed/simple; bh=ykJxCO5E3C4rLvQUHj8cBmllgqzoa7atFqjHJqnF08Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oTVpIW646ONX8ByoJijnGKitGMVmSfV0AMeGrCoZhVPMS8vfCYy9W0LHhotsgYzp2VntHOauQUyxEM+EUorhL/XWG97lQxocdcnOH6y8R7EiSu4HQ/Urvqe1T/9aibzjgH5q4vPRTnzgT59qvEtmdkIyiS6Wc6Hjx/BtG38K47w= 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=GKbNCrUD; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=VcDWwkOC; 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="GKbNCrUD"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="VcDWwkOC" 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 61NA2WBF2570444 for ; Mon, 23 Feb 2026 10:57:59 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= gpubd5YMntLes45xNFw/jUH52Ohlh5F86xtCr6wE4hg=; b=GKbNCrUD37d/jcWF BDhg91NqRjhbLi5nmmhMlT5ARl5ph7rgx50NfCMT1b9aZBmHhwmJ3qhcxyU4xerQ pcZ6H4/X9mZhQMw257egnvBLEaiYjxJWzw/b6ppwrggksQKksMJC07sE+5g7nQg8 97waYdusqyrCHrt9THYeoLGpj+Ab2dui/lTxL9irN0tL1KP+1mBwE7a4UT1K8HnF BY7B3pSxGbpncD7MjcbosaKI57fRsrk9SrchJCIybZ131YC/TxaKnR9Ubn0O7+M1 AKODeKf8RXPNDu/+YDVg3T+rflBFXu0eqExO+U+rHbDPo56F91PLKx9hUBYDHzPI xfIEMw== Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cf5vgvge8-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Feb 2026 10:57:59 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-8c71156fe09so3806160885a.0 for ; Mon, 23 Feb 2026 02:57:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1771844278; x=1772449078; 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=gpubd5YMntLes45xNFw/jUH52Ohlh5F86xtCr6wE4hg=; b=VcDWwkOCLEfDtapZI5+OgP0qXov+lMgiyuiUP5Iy9VzwCx5eiG/t7CIZpLs+SMupa2 MVv4TQk+qXdKjWhK2/kKK9uOAphzsM1tFctX/Mdp20xZ5NtTtnI3/NzDTHBZlgcYIaBT c44exDGwRzV8CCk6/EuKucbAdTh9q2i4Y91h4uh+H/JSyGx42qTIk+fHCTX5FPLKtzLi LgS7Ns46TYbw9Sgh72d2jfWAIWIgfJl5J+Op4k+33mL8xB8JmKOO0WEuWh9xBTefzNGy wVZX4bCWDAG+WVnPfdj3PL1dqBHg56gLWeVHUoPOfNpOZROLWQVBUYzf4IfB22jJIfHP tMIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771844278; x=1772449078; 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=gpubd5YMntLes45xNFw/jUH52Ohlh5F86xtCr6wE4hg=; b=e+Qaloj640+gbrHywJAYhc6dmq3Gfjjy6IGwCL5ollWqCCZ0wk7Y+zpqzeYH5CQ69m od83fAEqjYOIS8BnClYjn9UxUin5FJH30W6nibKstPKQ/gafAjDO11yMqbFelyS9iaIs 0wT8RrAoJfQ2TT7joaH//0xRMI/lGXywJi4DuIBj0RBs4rhkE1cMMjz4NM5+68zA9Xzj APDqhkPphWgehHj+iLeo5gAkAVJyyVioVvRKpCnJc7WASb4BvR+KUVzBlie08+olNt1d hXeSKBsJoRwX+qTePQhE1fp9tcg/zc5km6Fe1qFNXyv8IxE+K7J9ixS96/aVSKtQP5Yg VaVQ== X-Gm-Message-State: AOJu0YyyB+XZ+PBosDqHunzIw8r2uGufwbpeyR0AGOuhRRf5ofDFIUEq DvwVMz9xETlexf4NIl3gq76OdJilmyhFeBTdEL4gCuywjTnPasZlfvuHzfpYzxQPIREsLk7iRKc 3ULVmENIJtFG295R3L6me7YZmsGQpbkwg+GBkvx6H9JIQV+U1SLv+YisYXGB1YJuCz76fZC7yjZ 4= X-Gm-Gg: AZuq6aKmkT8MDFFO8BYaIJ3PWoeB8AHiMzt0sJwdc7q8JYfqDmOzz1eDAvce4SiGMNL lpRjg20c7Md7yyU3Ca5LYOYvxfhPPL3Z7pVcRRGlYS6NSzQ/7Kg0ZE6zhJICGeGKzl/8ojfX52S BGMUscnEGhbxOLOUl8UUh29YVsltPUXGq0caQTObndrvm/BwdhtUvhz4wk5oGFIDnCOQAcaLBup O0zbDu6O1rrym/U0BPQmk3qXtTDY4M5dZ/+3aM2UPcHIBrICu55MUSBAimLF+UecsRt7dXyxajK S4SX3WELl/mFVIFCiT9IRjfhY9bq+ggOcUVt0LpvDgZEfyolwg5XJT8vy66rViE9RkXrvRDrstG mmYBbShSa1jNv12v5uzqESPEYwKkMe+qPpsGS/Eh+21kqz0nLsKLj X-Received: by 2002:a05:620a:25ce:b0:8cb:72b2:2a05 with SMTP id af79cd13be357-8cb8c9d1e5emr934475585a.2.1771844278244; Mon, 23 Feb 2026 02:57:58 -0800 (PST) X-Received: by 2002:a05:620a:25ce:b0:8cb:72b2:2a05 with SMTP id af79cd13be357-8cb8c9d1e5emr934474285a.2.1771844277812; Mon, 23 Feb 2026 02:57:57 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:bd71:422c:5e83:8b37]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970c00c18sm18120002f8f.14.2026.02.23.02.57.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Feb 2026 02:57:57 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 23 Feb 2026 11:57:05 +0100 Subject: [PATCH v2 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: 7bit Message-Id: <20260223-nvmem-unbind-v2-4-0df33a933dca@oss.qualcomm.com> References: <20260223-nvmem-unbind-v2-0-0df33a933dca@oss.qualcomm.com> In-Reply-To: <20260223-nvmem-unbind-v2-0-0df33a933dca@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski 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=6574; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=ykJxCO5E3C4rLvQUHj8cBmllgqzoa7atFqjHJqnF08Q=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpnDKrs+19Is7QbydQ7D9iFFzi55Achklj4Be1d nAG8wD+ScmJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaZwyqwAKCRAFnS7L/zaE w1lED/4p4gGvPbnYcCSSwgKL89+REzByRI2ipTL50vErp+p67DAecZNWEuId66dZjcx0RRSV+kr NR36fybt0d7zsY/1OXjgxMRFtrsfWJnXHrqoYVaKVc9PfoZ6LNemX5mCbT1VMwunZFKPD69Q1wu 7vUMP6XFY2e9QAzdXyyvAyRi1DdVaOFowvmd2Lfpk/Q71/fg5CeF4+Bgf44b15iCYg90HWLsufu 2V9U0LZw7SjJDzHfCl2zG25oRj5WMpXi9UrDX3SM5/RUx7nsRL0xRerVhtj/k9n08C6pcsFl4hP GmZ8hCAQ6dzddRsfFX3uHtMEzLLsBSMp5+TruR/3yGL9qyqF5yx1mCTUw7seyWsFMUlbmVvHvPO X6hvE3ef9pov0A7G5qw9RKblWRFMXQFVdbeuQ3NNiQzbfTzFrg8ntH3VEBuZcOTFE0msav0hF7Q Tb0Fsma0H5hPBbRiXeA+jaP9OapdIlsWv7he+J0/ULEUGBry6eXPRt8UZ6HKegwXa2t6l+6zYJS eJIEV4ZIZX7sUGSowmoOZOM/9dro5IG72TFvPf4ylUitXANnnYooFlcKWObkvjVaFGzTUtl5/K2 zCGPjBndyyXEYLG+dpmoqpHSlUbwvKfSzB/andf1QZUH4DN8MGc3w6zKRgATWrKFBjewkx0uJQc WeukaPv0UZttZcw== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjIzMDA5NCBTYWx0ZWRfX4Ajwf+mZKzcl VUu7LoX31JdehdaCloKx08mCB3Z84kBW+a9gErseS4+BQu2GB21jSCByUG6c9ZdxxZFUCwQn4oT jIaYJ65TqyAJ1kJQDDyD9RmynAdlnnfbgr/j/7llXZiJQXNmYW1pl+AUz8LLUaY3v85x9NviLBb RZ7myS+S9PIkiXx0pTC8umKfC2IomIp63tPuKOQXxZtwz1vBvuaj7qlW91fScdD6nS7nnSGoX29 p9xGRp/x4trJZu6/yU8oUXaZb9Tv8Q1vSiNE9zakr6q6V2IwOcyd0YeQW+60GYctdY4a7ssV9VA WxkTYvw9BQeAhwSS2M8j/0Q9O+bTMsTUh4wlWRUCriXXKH+MlJat6rsUJDS8xzubQLrHaK+3Wxn eCyfXEGoPeKzOhHA6dog+9ZCs6ihaPsK7k/EO7oW7l0eWX46O0qTeiZSq5Oh0uIl8dCJ2pgycpi vYZZ3MvIsCM8KF9MvZQ== X-Authority-Analysis: v=2.4 cv=W+A1lBWk c=1 sm=1 tr=0 ts=699c32b7 cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=uP1ucDPQAAAA:8 a=-rJ4p0UJwyiPJ0m2jL8A:9 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O:22 a=9a9ggB8z3XFZH39hjkD6:22 X-Proofpoint-GUID: oCyrqa0aefyZwxYxd55BHqT5yUAXzKYB X-Proofpoint-ORIG-GUID: oCyrqa0aefyZwxYxd55BHqT5yUAXzKYB X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-23_02,2026-02-20_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 lowpriorityscore=0 phishscore=0 suspectscore=0 spamscore=0 bulkscore=0 adultscore=0 priorityscore=1501 clxscore=1015 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2602230094 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 924e2e247ac1ad426d73310f1024000ca64e0471..42827ba2146ce9ba07716ac5973327da6e9426da 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_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; } @@ -1379,14 +1367,14 @@ nvmem_find_cell_entry_by_node(struct nvmem_device *nvmem, struct device_node *np { struct nvmem_cell_entry *iter, *cell = NULL; - mutex_lock(&nvmem_mutex); + guard(mutex)(&nvmem_mutex); + list_for_each_entry(iter, &nvmem->cells, node) { if (np == iter->np) { cell = iter; break; } } - mutex_unlock(&nvmem_mutex); return cell; } @@ -2123,10 +2111,10 @@ void nvmem_add_cell_lookups(struct nvmem_cell_lookup *entries, size_t nentries) { int i; - mutex_lock(&nvmem_lookup_mutex); + guard(mutex)(&nvmem_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); @@ -2141,10 +2129,10 @@ void nvmem_del_cell_lookups(struct nvmem_cell_lookup *entries, size_t nentries) { int i; - mutex_lock(&nvmem_lookup_mutex); + guard(mutex)(&nvmem_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