From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 0A2E2381AE7 for ; Wed, 29 Apr 2026 15:43:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477430; cv=none; b=aN0EYpcUbWTRXD9GOOIWDR+IHUzcnfxPHvxJ17doO950jq1zYw/qoEPLDg9dkF7V9iemMITGC8uzg7a5xOx3JPOH9bE24ptYFnWakp9SwGEexWPm6pKuVUmzq6zMtNiFmmui7LBZBrAnnAU7XHsQSWPJHgZirXrlbjkHZqAf9iM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477430; c=relaxed/simple; bh=7OWSKFora/JgRpwn3Sl8HqHFJ3EbESBfThaQbaLHvQk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=d5OVn5I7GsVa6rgeHmqp+hVHnRgLoeB36F6Ux4r2/m0/VdaFTM2aU/4qT5+HTD1DSFQxucj3+iAyy/DsqUBXP5oI4B2bevpulrwYTCM87kjNUl+n142qRUb0rl7327yfGbAZCoHJcDbueNWxabmgBfWqVYcq/6K1ImtJxhlTL+w= 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=Ez7MOYBh; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=RDopKekz; arc=none smtp.client-ip=205.220.180.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="Ez7MOYBh"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="RDopKekz" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63TFKVS32095179 for ; Wed, 29 Apr 2026 15:43:46 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= FLHk9Fdq6J5XlOf7czVfxn8rUJ9n3BNxHbsNsqib0gI=; b=Ez7MOYBh7zhDOvfO GG2hKlZfrR/MktLbjau8yoVN5i33JeRvnhH7xlGR2a68TZEnYDE+CRN4EE8vqPKG ighUfVl8GlnWC5T8TPfBRVw3k1CPOeWh1+wSRqCP97SgyWqqqCLKeVf+vL2KxFlt i+FLrpbpHwQphLmjZxLW+kzgHNFCjVi7oUE6E6qfUkZHUK3URO57ZBox7u4eGMqR Yj0qArBFIemOZ/QzMLG4S9PcrTO5bBd7BgSe3ls3/i/Pcybb8WEi1dQEYrmCtopB u11F9BEO+guMtejVz0q5uk6bo5l84lx51GcHKUsaKRF2aljGw8Ra8fivitmVQWTT tG6bHg== Received: from mail-vs1-f71.google.com (mail-vs1-f71.google.com [209.85.217.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dudh3t16f-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 29 Apr 2026 15:43:45 +0000 (GMT) Received: by mail-vs1-f71.google.com with SMTP id ada2fe7eead31-6130270a5f1so17765545137.1 for ; Wed, 29 Apr 2026 08:43:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777477425; x=1778082225; 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=FLHk9Fdq6J5XlOf7czVfxn8rUJ9n3BNxHbsNsqib0gI=; b=RDopKekzaK4b7EC/rekF4YUL1BdPw1gk5lQ1e2saJOyDjdnlPPBKZpJ1TXz0/57BBt ffZU/9EctoV2IysFZH1AdllPyRaLlQ/dQzIvU08ew4DLGjSIC/9FlLH4iVucg+cT1A3W cPCcq6yVAS+rf7sRWBueP0PIGWhlmjHGT2zKuflBqdOGzg0mfNSPQHR9E4ORMx44IH7B 2BdfSOgvPCkkgva6iynhrVWkfk6spQxwVbLGLdPwwxZzTKqrVETIPDXM4pDYRkiUTRLI cy3KzLSfnjFW0E0CRYYcQnRt9eGob2N5n7cPilP+1LC9Hvs8atTDBVw9shqrF9MHLLcz y/6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777477425; x=1778082225; 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=FLHk9Fdq6J5XlOf7czVfxn8rUJ9n3BNxHbsNsqib0gI=; b=ZcfbO5wN0iimulZdSmXXFlqmOqXSRsaybM7iB+tJa1sv0Fz6uMtGeEef9+w6Kt+Clc QE50V72QNjG5kOIfUNh6dWj9jhGudo22Tn0aUIUdtYPrw8GIsqxJu2BvYAoYbn1wjVj6 5rsNM3h8ANYFf932gXNb4I8xc/QPxGSwpYSSTgMsGjfykI6g+nZELMwYPTMRt6/AJTEd iEMwKiEyff2PD3MfZbxNxFipcxlGYalI1JpaXpogePssZG+9WUmKSZYKAczy+IHzR7ng yblwL9vqp+zgpltwcGsVazmAkJnyVMbFSiaoKtvgxav0NdSDbSSklKCHtbbdqgGZw6qm wuew== X-Gm-Message-State: AOJu0YzZDM8aZI1UX06OtxT4hhENk0Jd6A8X9+SFH1Q2JSrSghFJoZwA pvjoEtozB61/Wm2hB8jNre9V+D0PGehwNlmW6eTF02MRfYxChrR2bx3azz6UbClYgX98amS4fYv FrcptZ+3uQ2Y445kbk7I7lvwKrWYiJH35cSU6umCqxKbeeEko3GVegTTeQ+k0AiB8QV0= X-Gm-Gg: AeBDies+JaWc/xXRQ40DH3YKDNRXEW1aR6TXa7TQrWU+1NPKNn9vikmcxgCkQhqfXh7 8je5h6bsNOQ94whjBPp9eQzdqmP4eBmEYvzfoCsvtAvfqyHu6qdDBIWG4cSL+nvYtV/3r5vO6N2 UyJb56OSS38wT3l2ArpFJR3vaQcCCzbrgx6lGuervcX/zUNtY0W2jI9ncLjAbBNJLWQxZuM59YN uuxO+9lqyBFwLeGD/R75LFcY9mLb58m+pJXwkH+K8Lk6U77PWxGFoqYqDjqsB6fqFcOxBcXQq0d 9RisaMNAwZLIfStJwv8lGxe5G/GMiHxkMq+F5ERZQ919jm+M6fSPQOe8KJacJ+yFSh+joZ3TCV7 ij58ihmlB+XcRfRL12ZFHYwAowNRPKGAxhXcTiSZhjZDcXfnaoUpsW5YRehX5iA== X-Received: by 2002:a05:6102:8501:20b0:62a:1bba:64ee with SMTP id ada2fe7eead31-62a1bba6fffmr901081137.6.1777477425367; Wed, 29 Apr 2026 08:43:45 -0700 (PDT) X-Received: by 2002:a05:6102:8501:20b0:62a:1bba:64ee with SMTP id ada2fe7eead31-62a1bba6fffmr901044137.6.1777477424751; Wed, 29 Apr 2026 08:43:44 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:e9c0:e45a:1dbc:c82a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-447b3d481b2sm6837552f8f.4.2026.04.29.08.43.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 08:43:43 -0700 (PDT) From: Bartosz Golaszewski Date: Wed, 29 Apr 2026 17:43:19 +0200 Subject: [PATCH v3 4/9] 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: <20260429-nvmem-unbind-v3-4-2a694f95395b@oss.qualcomm.com> References: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> In-Reply-To: <20260429-nvmem-unbind-v3-0-2a694f95395b@oss.qualcomm.com> To: Srinivas Kandagatla , Bartosz Golaszewski , Johan Hovold 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=7OWSKFora/JgRpwn3Sl8HqHFJ3EbESBfThaQbaLHvQk=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBp8icjReE+l5ztCd7sNPs8n7DTg5tNOMt0N0WhP EA1R/RCSZyJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCafInIwAKCRAFnS7L/zaE w+wMEACix2fVkLB7I3IyijhDg01DgYr5l5z2mUVcqxVbWNVNrpq1Gr4kC6JCtb+4HjFudM7brNH GlLUj+xq88ahbTILUZoU5AujhMUWQld9stRr7eotN79MQo0xT984eWzRCZ1EXETJKBAW7h6po+h cMzajSRPcDhDoavgF7mkXDbvfjmLGW/Pk190TW/SUwc6MrJcIPks8jb77nBovmo3YNZpmMevD0D 8jO+tuHCG1KpLmqnqA/MCb1IcfcLlvrK+JM/VZ3HH/+OWly6eT4wxJykIBeh42+NLqIypCso2WP gmOcW3D2QvWpJAPwJN4+HfOW1DTwTn09Dquc4r7aGp59yutouEuyjahZ9jt/SQIw0K74zicBtqf vBTgElFFPs0CVPP6Zl766Kha7nIdNPyMlYn1RgmaMKen+R4PdSOBkxL2k+YZHdoD4EhgEuQL2T4 Vvd6ZQZ4Yw3D06ge4qGaXaYyzDGcg6gZV5MrW/uDm/zkSFOskuVtn5O/eu6FLpJRVjHOdiv9mop QUDbBejCizpzgP/kzywzkWUiNjdHAeclfNZ6ZzJQjzNHlnY8lX66WKNpCsL3rOYW/hk/HpMfHaS 7zrM0M/qCEvaMfIxtuw6JLgzw60nrsMW06OnVXs5Aojm/YEwQflf9FE9seTDFfmOTiSYdGliKze Vy5kITLYUSRiT4A== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: Zcs_x1f-v6R8d22Q5N6fgXs2ECEGHwMk X-Authority-Analysis: v=2.4 cv=A4dc+aWG c=1 sm=1 tr=0 ts=69f22732 cx=c_pps a=P2rfLEam3zuxRRdjJWA2cw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=uP1ucDPQAAAA:8 a=-rJ4p0UJwyiPJ0m2jL8A:9 a=QEXdDO2ut3YA:10 a=ODZdjJIeia2B_SHc_B0f:22 a=9a9ggB8z3XFZH39hjkD6:22 X-Proofpoint-ORIG-GUID: Zcs_x1f-v6R8d22Q5N6fgXs2ECEGHwMk X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI5MDE1NyBTYWx0ZWRfXwA76M3xB7ruV nCwaF+9sKP0hczbmsH7kqOFNpVvZAZ8NSYgkmputm4yA4bXtzAkpDxgdego/t0bJKpexm/4f7BS oudXR7Wob98Ddj1xTveTo8O6qdriFx/PaZrP/ZbVqe5Kjkfb53sVl72MkiHyMUcWvS29KhtxSC6 iaMzlFp5bSOlsYxV0KBUTZ5jTJuGaPakakk+egaSqS5I9nBVGW4yPKlPfNCjnbavdayP+qUd6sN TjzWmNOSMb+hmJt/2heVyqlbZRgahVvIYVCSWaQhTktSn3uzcAz2/jRMqgOq0s3sK2DlZTZ9zqX /8umcG/g73S+GqPmI9LDUnS/PbQ52OYiThKIsp3ciddEeO+HaY5dD6Kcuqv0Vd8D5hjJB5+obCM fehZtpERHgmabCbgopIwYdihmk+iwWTZMWOn6Y6XG9wxyr2u5EOUUUNuEezyQOkI5VGrJxLxb7I vbziW8tKpndV4NHhqCw== 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-04-29_01,2026-04-28_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 suspectscore=0 malwarescore=0 lowpriorityscore=0 priorityscore=1501 phishscore=0 bulkscore=0 impostorscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604290157 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 61f7484f96f3a89450686745c1efad8fc24c667e..d6c62b3a527d3412a990ca143bee3209ff28d18d 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 @@ -462,27 +464,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) { @@ -495,10 +493,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++; @@ -508,13 +504,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; } @@ -552,9 +545,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); @@ -570,9 +562,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); } @@ -722,14 +713,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; } @@ -1115,11 +1106,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); @@ -1329,7 +1320,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) && @@ -1337,11 +1328,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); @@ -1357,7 +1346,6 @@ nvmem_cell_get_from_lookup(struct device *dev, const char *con_id) } } - mutex_unlock(&nvmem_lookup_mutex); return cell; } @@ -1371,18 +1359,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) @@ -2117,10 +2103,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); @@ -2135,10 +2121,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