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 2811B3845C9 for ; Wed, 29 Apr 2026 15:43:54 +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=1777477440; cv=none; b=J75z+rklJEY3NRf8e6QzVZl4SiL659+ZY8qCopNEftGwZkQlMh6Rlf5afSXwH8uJTOsG+vHQYGtCKywQt/EN3sPCcN8SAG2BEqqOu6fxuAPfJuh8s7XqWp2RIncvBiy/jUDefZwTR2K6HsiuLiOsvuxfXzKsQMDlHdcmvW9eqEg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777477440; c=relaxed/simple; bh=FBSzacBacZXWrP090z+AhdVbxQ8fM1ULKOpRS4p42Co=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RUz+wmP9VwkX0EwxTfA7RhdXmY4NPQg6XHEqXKdeTSHAhZUasSJuxV/YUxYOdPdJow57mBMjJ7CKhG3sxCT/Y0Zb1J3yO3Mpc9OG4TfpiZUfA99vZNa/fvOkQcU6b6eBw/1ZH1V+guyGYkmxgb09Yy7oj6KVjACVc53CKu0as2M= 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=SxeBz7Y3; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=d/YW0J1Z; 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="SxeBz7Y3"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="d/YW0J1Z" 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 63TFG6oV2889782 for ; Wed, 29 Apr 2026 15:43:53 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= wDTPW9Lzf9f3QH3dx1ugRZu6zRIdBZHVrPxgQ+2kI/M=; b=SxeBz7Y3NZCM/Opa yx1SlJ65KixOOk1B5xwgw/cUxG18cXwfS9Hm7r7zebBXE+5DswUjLywRBTHEuUCf YiuQ7ztLPA7Q1DBUyj+P2m99NPLghxGMWnyNznF239WyDIUt/q/gTlBlRzCm2JT4 3q7gkekjSN10Neg34IxacYprhDSZL5D3yuALwUCEiDFAYGYBbn1EHysERvNubrir YmF1Wccpyra3ZyaGvsEUtJaX5u+hiEDqxmRvata8FEqbEuxmGrGcnbaFL3luz12s ix/2DMG8YmnfLNBKLs92q8cZHbhQkd/1SM1kI1Qq87XX168QTztEXECV1mTtrMQB YRwQgA== Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4du0wqckcq-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 29 Apr 2026 15:43:53 +0000 (GMT) Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-50e136aff17so229471041cf.3 for ; Wed, 29 Apr 2026 08:43:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777477432; x=1778082232; 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=wDTPW9Lzf9f3QH3dx1ugRZu6zRIdBZHVrPxgQ+2kI/M=; b=d/YW0J1ZGgY/K2UwKhgo1YIFcLgJxfFvvucTS3VVh2VS1BzSYTxdX3iTze1hRZBhBL swZAPpxpK+MtSjGTwsfQBLUsLoWu5p0aiCxeHYwsuqgvC1wUCCNc7p4/N+blhLM3u6FV GrzTDRA//ogjCJNH0fpsQ9fHEmiYevVdquGw0Ah3TdzsRvCEATXze38G/+Fvqmtl/a6b pV3zu6vV6koWhPgtgQinam6dfY/n5uVlVE8NOm6deN7E1DMoPKuxFc+TXy7Y4wZoIVrp dwqBHM6w6vmwYYKhTf7m2RFD7YEa8SWilq790QNgdJILU9ikfqIZUEgRuCZjqVpjD0gp 6aJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777477432; x=1778082232; 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=wDTPW9Lzf9f3QH3dx1ugRZu6zRIdBZHVrPxgQ+2kI/M=; b=VBAY3qxmpAcd0o/5eVIR9d58ce55CIF47jkNwlvwpNB3PaDCqm9TmOxd5X76z6s9Qm UCFE2D93/OgVd3ldjw1yhtL7HwO3sgolVUcMO7Tbysdt71wYGB9uBJI6oxDrNbULOp64 w1bsOeGXjmFN7Ddeo46gUcWscfYWO4KGxYyj2UoYot5sZJ4kkkDQw/rCdOaK2PPLojs4 iJoeIBHujmiShkw4KT4G6QFIa/3C84pBnmPnt25nKNRJ/iWwLT8Sofbceac4qcvw9NT4 FMw2NHW4+movSYVkxOjCfWGusqemszQhJ79YbnUxgYvI+NAmVXFbaHz4VVExY58NL8Gz TdHQ== X-Gm-Message-State: AOJu0Yyr7lRD7L4eAItX5thj1kI7DPeuNP6lO/8DE46QxwO0xItwEtKv jdG39849+qG3tDL1dMe3A5GU4kutHCtpwi8V5KYxWFynrCceil2lL9DXlJXBgA6ffhGOJ8ARYFB He8vN30Pv41Th2n/ZMKATKjQ4AGyrYQ097tdo8PPz/WXdBcgkwiyHT3jsFm9d5Nv/ZdakKVxMTu U= X-Gm-Gg: AeBDieu2aRBfBmD8NMupRNkwvj7qiFojyyuQABZ01wad3nXXaDCD8amCR8644OU3cAR /eqA786KQ2BfcXbMCNoc3PubvurWIGOdGqO/PrJE41HJmGbq+WSLAzcAyEnGRwCXLwwJDaXZYyC sjqI8eguoIyhRDSJGHz+HSlvmKhCmjhpbMYR73Y5N90QcYTvYQE5FrwAtymajyYL+TPn54PQRGz ABDSHMveigeGjZQ5I6uEK1NpewxNXeAaQpMH3AZjnJ8OR12CVd5SpkxaMGHD8S36vqndyBsG+Md LcC8JLsgdNYfQFxYGl2MUHD2JNPxtuZBw41GOa0olzCW1Py1PF/Xc+3FFcQ0ePMj/OH9K5J5zmB ogSwzoe0/vtTEvC4IG4cFI8RotzmZ+Yn+y6HS1cyUf24nEKv9/ovE+4+/tyPYmA== X-Received: by 2002:a05:622a:4c0a:b0:50f:bb77:a084 with SMTP id d75a77b69052e-510189c04famr66269781cf.25.1777477431932; Wed, 29 Apr 2026 08:43:51 -0700 (PDT) X-Received: by 2002:a05:622a:4c0a:b0:50f:bb77:a084 with SMTP id d75a77b69052e-510189c04famr66269151cf.25.1777477431319; Wed, 29 Apr 2026 08:43:51 -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.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 08:43:50 -0700 (PDT) From: Bartosz Golaszewski Date: Wed, 29 Apr 2026 17:43:23 +0200 Subject: [PATCH v3 8/9] nvmem: remove duplicated reference counting 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-8-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=5375; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=FBSzacBacZXWrP090z+AhdVbxQ8fM1ULKOpRS4p42Co=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBp8icoHCPn4JP86Vxz8WsLYeDYLHwcz5mQf63uZ V0pG+MOhJ+JAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCafInKAAKCRAFnS7L/zaE w3b2D/9nQYlrddhxkk8qywNh53VpqA5GyYpFpSMl0phowhL2M+3/cpWx5t/LwPWpmA+DcdRw7fh Z+R9KE0RrljzCwE7Erzq7f92KMjrkWXmyzyAGUc38DBHYNkoQqpwKw90iZQMk2Rz45WbjlI8ogC Tepc3NS/gp/8URfCxqz89m5dlxzax+l4VZfEvft26181oYYVx0mqyNXRGVKaltHinAPlw4ky62/ kf8NJ5DB7B50ora5ke4tbSBvYZ1m/RX7FYb7D6UrcSIDhlqs/1Y3dT8WQhzdWfTnvVMgwUYE+Mg tAfJOCBeQDWZgmFQ08b5kDvZJvnkvK3dzaO7qZ8fVATkZ7h2+bEd4+8Ln7ZbWaxJ4rXsjLsiIi1 FSuaswJXqxzStuvFkhsrLG5HzOob17W1cdbvcGxjlNF21J3AZ3GXKs8q6hG2PrBmM42cWSJeIpb en0PsUCe2nsnuv34IQbXoR6q5WQi6MXAJbUUIfZ/bwq6KuQZCTmwMYFMSC+3c243zjKnDIDSOsC XW71x5Zde+EGOXfKQT6PliMIma/xRbyFoZJ5NyseqyORgQZXA4UEB6zSC75592PVvVR7ApY852B Cs+GkXAl1g5mUyXEA3JugZ3hAQ0kB3XnRKsEs4TmxWJuv8lvJLE0UETvupkzN6i8TvJLJxpk3Uk uACATlrw2U4jb2w== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: GCzDsXH8ox2VVXJCMzJhJP-gp0ZbGACd X-Proofpoint-ORIG-GUID: GCzDsXH8ox2VVXJCMzJhJP-gp0ZbGACd X-Authority-Analysis: v=2.4 cv=BfDoFLt2 c=1 sm=1 tr=0 ts=69f22739 cx=c_pps a=WeENfcodrlLV9YRTxbY/uA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=IOj402APi-VxR199s-4A:9 a=QEXdDO2ut3YA:10 a=kacYvNCVWA4VmyqE58fU:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI5MDE1NyBTYWx0ZWRfX2X2J1+8W6SCc k6jukn4OOQJecvmeiADY8T1Hlc6xPCm3EoMK1mJL/TgQ42CZtHax/r5XbkK0uPTgTXUj1abJfmp jHYMFhys58aVUNAuu/s4UROYRZldgz34De9BR0lozGM3KFDpG6RW2IhwZ9yjm9HOnyhLi6k8y5j ORmZlvvNzS2LW8+9gTtiJ7/JezmPn+qV778MCvtZOEOXoKDv/w6nnzho4HlXhJhpmOqWqGTDkRz WjYAAlCbXqoH+eTlnW6oX3yf7SU/p+G7lvW2NiJwkIMfazK32o1abJHD2EicRY3snmKwt//CCoy kYWe3gEjnaWOVx4tl0IE97JxwEFcSWQd66799tikZv+GyDsVN2szWht+rUVip7y4qzPbza8iB// VB9gjcp/+WukVXKWXufgCBmdpXvJlsyA4tM1IMCmjyDHDPa0Ky+PTMoVYBEhfD5Qz0v4hqg9rj/ sRbAVzTXjAreIeBLdwQ== 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 priorityscore=1501 impostorscore=0 malwarescore=0 lowpriorityscore=0 bulkscore=0 adultscore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604290157 Commit c1de7f43bd84 ("nvmem: use kref") introduced reference counting with kref to an already reference counted nvmem_device structure. We only need one refcount so use the one provded by device's kobject and drop the kref field from struct nvmem_device. Signed-off-by: Bartosz Golaszewski --- drivers/nvmem/core.c | 77 +++++++++++++++++++---------------------------- drivers/nvmem/internals.h | 1 - 2 files changed, 31 insertions(+), 47 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 32fe048a4a9152b7a5ec465ae5bbf04e30319554..590d880ede944670c09dd62b394626a959e5cdd1 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -529,24 +529,6 @@ static void nvmem_sysfs_remove_compat(struct nvmem_device *nvmem) #endif /* CONFIG_NVMEM_SYSFS */ -static void nvmem_release(struct device *dev) -{ - struct nvmem_device *nvmem = to_nvmem_device(dev); - - ida_free(&nvmem_ida, nvmem->id); - gpiod_put(nvmem->wp_gpio); - kfree(nvmem->ops); - kfree(nvmem); -} - -static const struct device_type nvmem_provider_type = { - .release = nvmem_release, -}; - -static const struct bus_type nvmem_bus_type = { - .name = "nvmem", -}; - static void nvmem_cell_entry_drop(struct nvmem_cell_entry *cell) { blocking_notifier_call_chain(&nvmem_notifier, NVMEM_CELL_REMOVE, cell); @@ -565,6 +547,25 @@ static void nvmem_device_remove_all_cells(const struct nvmem_device *nvmem) nvmem_cell_entry_drop(cell); } +static void nvmem_release(struct device *dev) +{ + struct nvmem_device *nvmem = to_nvmem_device(dev); + + gpiod_put(nvmem->wp_gpio); + nvmem_device_remove_all_cells(nvmem); + ida_free(&nvmem_ida, nvmem->id); + kfree(nvmem->ops); + kfree(nvmem); +} + +static const struct device_type nvmem_provider_type = { + .release = nvmem_release, +}; + +static const struct bus_type nvmem_bus_type = { + .name = "nvmem", +}; + static void nvmem_cell_entry_add(struct nvmem_cell_entry *cell) { scoped_guard(mutex, &nvmem_mutex) @@ -940,7 +941,6 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config) goto err_put_device; } - kref_init(&nvmem->refcnt); INIT_LIST_HEAD(&nvmem->cells); nvmem->fixup_dt_cell_info = config->fixup_dt_cell_info; @@ -1003,24 +1003,24 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config) if (config->cells) { rval = nvmem_add_cells(nvmem, config->cells, config->ncells); if (rval) - goto err_remove_cells; + goto err_remove_compat; } if (config->add_legacy_fixed_of_cells) { rval = nvmem_add_cells_from_legacy_of(nvmem); if (rval) - goto err_remove_cells; + goto err_remove_compat; } rval = nvmem_add_cells_from_fixed_layout(nvmem); if (rval) - goto err_remove_cells; + goto err_remove_compat; dev_dbg(&nvmem->dev, "Registering nvmem device %s\n", config->name); rval = device_add(&nvmem->dev); if (rval) - goto err_remove_cells; + goto err_remove_compat; rval = nvmem_populate_layout(nvmem); if (rval) @@ -1042,8 +1042,7 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config) #endif err_remove_dev: device_del(&nvmem->dev); -err_remove_cells: - nvmem_device_remove_all_cells(nvmem); +err_remove_compat: nvmem_sysfs_remove_compat(nvmem); err_put_device: put_device(&nvmem->dev); @@ -1052,21 +1051,6 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config) } EXPORT_SYMBOL_GPL(nvmem_register); -static void nvmem_device_release(struct kref *kref) -{ - struct nvmem_device *nvmem; - - nvmem = container_of(kref, struct nvmem_device, refcnt); - - blocking_notifier_call_chain(&nvmem_notifier, NVMEM_REMOVE, nvmem); - - nvmem_sysfs_remove_compat(nvmem); - - nvmem_device_remove_all_cells(nvmem); - nvmem_destroy_layout(nvmem); - device_unregister(&nvmem->dev); -} - /** * nvmem_unregister() - Unregister previously registered nvmem device * @@ -1074,8 +1058,12 @@ static void nvmem_device_release(struct kref *kref) */ void nvmem_unregister(struct nvmem_device *nvmem) { - if (nvmem) - kref_put(&nvmem->refcnt, nvmem_device_release); + blocking_notifier_call_chain(&nvmem_notifier, NVMEM_REMOVE, nvmem); + + nvmem_sysfs_remove_compat(nvmem); + nvmem_destroy_layout(nvmem); + + device_unregister(&nvmem->dev); } EXPORT_SYMBOL_GPL(nvmem_unregister); @@ -1136,8 +1124,6 @@ static struct nvmem_device *nvmem_device_match(void *data, return ERR_PTR(-EINVAL); } - kref_get(&nvmem->refcnt); - return nvmem; } @@ -1253,9 +1239,8 @@ EXPORT_SYMBOL_GPL(devm_nvmem_device_put); */ void nvmem_device_put(struct nvmem_device *nvmem) { - put_device(&nvmem->dev); module_put(nvmem->owner); - kref_put(&nvmem->refcnt, nvmem_device_release); + put_device(&nvmem->dev); } EXPORT_SYMBOL_GPL(nvmem_device_put); diff --git a/drivers/nvmem/internals.h b/drivers/nvmem/internals.h index 070eef89ffca78fe033aaaada0f91c257fe2f166..60daa79c404dc915872481bd3b02de2258d33406 100644 --- a/drivers/nvmem/internals.h +++ b/drivers/nvmem/internals.h @@ -19,7 +19,6 @@ struct nvmem_device { int stride; int word_size; int id; - struct kref refcnt; size_t size; bool read_only; bool root_only; -- 2.47.3